我有一个由13个未知数组成的12个线性方程组。我想用Matlab解决这个系统,并选择参数化解决方案的变量。
我正在关注如何使用linsolve的示例,这似乎是我正在寻找的。特别是,我希望解决方案能够被未知的" i"参数化。但是,这个对linsolve的调用:
>> syms a b c d e f g h i w1 w2 w3 w4
>> linsolve([i = w1, f = w1, c = -4*w1, g+i = w2, d+f = -0.5*w2, a+c = -1.5*w2, h+i = w3, e+f = -0.5*w3, b+c = 0.5*w3, g+h+i = w4, d+e+f = w4, a+b+c = 0], [a, b, c, d, e, f, g, h, w1, w2, w3, w4, i])
返回此错误消息:
Error: The expression to the left of the equals sign is not a valid target for an assignment.
其中"等于符号"表示最终的等式:" a + b + c = 0"。
我是Matlab的新手。我只是希望不必手动解决这个问题。建议表示赞赏。
答案 0 :(得分:3)
错误“等号左侧的表达式不是作业的有效目标”是因为=
保留用于作业和can't be overloaded;因此,符号方程式使用等式运算符==
来表示左侧和右侧。因此,所有=
都需要==
。
A*X = B
和右侧X
的情况下, linsolve
求解A
的等式B
。
由于您的问题是线性的,您可以这样做,但由于未知数的原因,系数矩阵可能很大。
另一种方法是使用solve
函数,它解决了给定未知数的方程列表:
eqns = {i == w1, f == w1, c == -4*w1, g+i == w2, d+f == -0.5*w2,...
a+c == -1.5*w2, h+i == w3, e+f == -0.5*w3, b+c == 0.5*w3,...
g+h+i == w4, d+e+f == w4, a+b+c == 0};
vars = {a b c d e f g h w1 w2 w3 w4};
sol = solve(eqns{:},vars{:});
sol
是一个结构,其字段名称与未知数相匹配,其条目包含该未知数的解决方案:
>> sol.a
ans =
i
>> sol.b
ans =
3*i
您会注意到我从变量列表中删除了i
,因为它是参数而不是要解决的问题。