matlab中的solve函数不能赋值

2025年05月05日 09:54
有2个网友回答
网友(1):

楼上回答使用eval函数行不通。

如果求解之后的表达式中都是已知量,可以使用eval,但现在的结果里还有x1、x2等未知量,用eval会导致报错。

 

可以使用subs函数:

>> subs(s.c1)
ans =
(x1*dq(1) + 800)/(dq(1) + 1000)

>> subs(s.c2)
ans =
(800*b(1) + x2*dq(2) + x1*b(1)*dq(1))/(dq(1) + dq(2) + 1000)

但这样带来的问题是,数组的元素无法带入,例如dq(1)、dq(2)等。可以进一步指定要代入的符号变量,例如

>> subs(subs(s.c1),'dq(1)',dq(1))
ans =
x1/201 + 160/201

但这种做法对于类似s.c2的表达式里面有多个数组元素的情况,就会非常繁琐,关于这一点,我没有好的办法,希望有高手能指教。

 

我觉得比较可取的方法是,把求解的方程直接写成符号表达式(而不是字符串):

syms c1 c2 c3 c4 x1 x2 x3 x4
f1=(q0*c0+dq(1)*x1)/(q0+dq(1))-c1;
f2=(b(1)*c1*(q0+dq(1))+dq(2)*x2)/(q0+dq(1)+dq(2))-c2;
f3=(b(2)*c2*(q0+dq(1)+dq(2))+dq(3)*x3)/(q0+dq(1)+dq(2)+dq(3))-c3;
f4=(b(3)*c3*(q0+dq(1)+dq(2)+dq(3))+dq(4)*x4)/(q0+dq(1)+dq(2)+dq(3)+dq(4))-c4;
s=solve(f1,f2,f3,f4,'c1','c2','c3','c4')

这样求解可以直接得到结果:

>> s.c1
ans =
x1/201 + 160/201
 
>> s.c2
ans =
(2*x1)/1009 + (4*x2)/1009 + 320/1009

网友(2):

eval(s.c1)
eval(s.c2)