Matlab:如何求解方程组并选择解的参数化

时间:2015-02-06 02:44:45

标签: matlab

我有一个由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的新手。我只是希望不必手动解决这个问题。建议表示赞赏。

1 个答案:

答案 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,因为它是参数而不是要解决的问题。