- max笔记
-
在MATLAB中,solve函数主要是用来求解代数方程(多项式方程)的符号解析解。
用法示例:
solve(eq)
solve(eq, var)
solve(eq1, eq2, ..., eqn)
g = solve(eq1, eq2, ..., eqn, var1, var2, ..., varn)
其中,eq代表一个符号表达式或字符串,var代表一个变量名称
详细的解释:
g=solve(eq)
函数求代数方程的符号解析解。参量eq表示符号表达式或字符串。若eq是一符号表达式或一没有等号的字符串,则函数对方程的默认变量求解方程eq=0,默认变量由命令findsym(eq)确定。若输出参量g为单一变量,则对于有多重解的非线性方程,g为一行向量。
g=solve(eq,var)
扩展资料
solve使用注意事项
1、solve解非代数方程的能力较弱,最好结合其他方式求解非代数方程
2、如果解得是一个方程组,而且采用了形如[a,b]=solve(a+b==1, 2*a-b==4,a,b) 的格式,那么,在MATLAB R2014a中没问题,可以保证输出的a,b就等于相应的解。
3、但是在R2012b等早先版本中不能保证输出的顺序就是你声明变量时的顺序。所以最好采用g=solve(a+b==1, 2*a-b==4,a,b)这种单输出格式,这样输出的是一个结构体,g.a和g.b就是对应的解。
- okok云
-
matlab的运行结果是:
0 -8.0000
-8.5000 - 0.8660i -0.0000 + 0.0000i
-8.5000 + 0.8660i -0.0000 - 0.0000i
上面的结果自身就是不正确的,我分析的原因是:matlab先求出了解析解,接着代入系数值,由于matlab运算精度低,系数又太多,公式极其复杂,从而导致结果失真过于严重
mathematica运行结果显示:mathematica先求出解析解,接着精确代入系数值计算,也出现了数量级为-16的误差,有部分失真,但是这个失真很容易发现,而得到修正
mathematica执行消去y的运算结果显示原方程组只能由三组解
借助mathematica的结果分析,可以得出:matlab的运行结果中,并没有丢失一组解,而是解的失真太为严重达到了0.1,
可以用下面的程序执行数值解:
function s=sss(p)
syms x y
a=p(1);
b=p(2);
c=p(3);
d=p(4);
e=p(5);
f=p(6);
g=p(7);
a1=simplify(c*x^2+c*x*y+(c*g-c*a-c*b+1)*x-a-e);
a2=simplify(d*y^2+d*x*y+(d*g-d*a-d*b+1)*y-b-f);
[x0,y0]=solve(a1,a2);
s=[x0 y0]
这个程序运行速度快且结果准确,
结果为
[ 0, 0]
[ 0, -8]
[ -13, 0]
注:可以看到新的程序输出结果是矩阵形式,而老程序的输出不是,问题很可能和eval的使用有关.
- cloud123
-
主要是这个命令上的错误,["num2str(T0)*(0.9)^x=",num2str(Tend)]
最后一句代码应该这样改一下就可以了。
Time1=ceil(double(solve([num2str(T0),"*(0.9)^x=",num2str(Tend)]))) %计算迭代的次数
修改后执行结果
- gitcloud
-
1、solve 这个命令用来求解符号方程、方程组等。
x=solve("eqn1","eqn2",...,"var1","var2",...)
例子:
解方程组:x^2+y-6=0;y^2+x-6=0
程序设计:[x,y]=solve("x^2+y-6","y^2+x-6","x","y")
2、subs可以把符号表达式里面的符号变量替换为新的变量
F=subs(f,old,new)
例子:
用符号表达式计算x^2+x-1在x=2时的值
程序设计:g=sym("x^2+x-1");
G=subs(g,"x",2)
- 贝贝
-
1、solve 这个命令用来求解符号方程、方程组等。
x=solve("eqn1","eqn2",...,"var1","var2",...)
例子:
解方程组:x^2+y-6=0;y^2+x-6=0
程序设计:[x,y]=solve("x^2+y-6","y^2+x-6","x","y")
2、subs可以把符号表达式里面的符号变量替换为新的变量
F=subs(f,old,new)
例子:
用符号表达式计算x^2+x-1在x=2时的值
程序设计:g=sym("x^2+x-1");
G=subs(g,"x",2)
- 可可
-
你将T0转化成字符串干什么?不知道你还有其他特殊的用途没有,我的理解就是你想解T0*(0.9)^x== 1e-30,这个用solve直接代进去解就可以了
syms x
Time=solve(T0*(0.9)^x== 1e-30,x)
如果你想了解solve的用法,用matlab的帮助文件查看一下,matlab的帮助文件还是很强大的,祝好!
- 蓓蓓
-
subs我没有用过,solve确实可以解方程
solve("方程1", "方程2", "方程3", ..., "方程n", "欲解出的变量1(根据你的要求,写y即可)", ...,"欲解出的变量n")
对于方程中的字母元,应先用syms 定义
比如syms x y a b即可定义a b x y 四个元
- 苏州马小云
-
把solve中的引号去掉就好,加引号代表string函数,x,y将以r,s符号表示,所以无法对其赋值
改后调用[ISp,ISn]=paper_IS1(2,3)
结果显示:ISp =
[ 4.75, 4.30*i]
ISn =
[ 4.75, -4.30*i]
- meira
-
x1=1;x2=2;w=3;f=4; %假设它们的值是这些 g=10; y1=f*g; y2=-f*g; k=solve("-y2=(-8)*x2*w^2*(sin(k)+x1/(16*x2))^2+4*x2*w^2+((x1*w)^2)/(32*x2)","k") k=subs(k) 运行结果: k = asin(1/16/x2*(-x1*w+(x1^2*w^2+32*y2*x2+128*x2^2*w^2)^(1/2))/w) asin(1/16/x2*(-x1*w-(x1^2*w^2+32*y2*x2+128*x2^2*w^2)^(1/2))/w) k = 0.4569 -0.5279
- 牛云
-
注意你的标点符号。
syms x; solve("x+3=1")
ans =
-2
[x,y]=solve("x+y=1", "x-11*y=5")
x =
4/3
y =
-1/3
- 皮皮
-
syms x
>> solve("x+1=3")
ans =
2
>> solve("x+3=1")
ans =
-2
你的是哪个版本的,我的运行就没问题 你看上面就是我的