2015-02-06 125 views
0

我有13个未知数的12个线性方程组。我想用Matlab解决这个系统,并选择参数化解决方案的变量。Matlab:如何求解方程组并选择解的参数化

我正在关注一个如何使用linsolve的例子,这个例子看起来就是我正在寻找的。特别是,我期待解决方案被未知的“我”参数化。然而,该呼叫到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

只是检查,你有符号数学工具箱? – paisanco 2015-02-06 03:55:25

+0

@paisanco:在提示符下运行'ver'给出:'符号数学工具箱版本6.0(R2014a)'。所以......是吗? – Schemer 2015-02-06 04:02:41

回答

3

错误“等号左边的表达式不是分配的有效目标”是因为=保留给赋值,can't be overloaded;因此,符号等式使用等号运算符==来表示左侧和右侧。所以所有的=需要是==

linsolve解决给定的系数矩阵A和右手侧BX等式A*X = 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,因为它是参数,不是要解决的。

+0

非常感谢。这为我节省了很多时间。非常感激。 – Schemer 2015-02-06 20:17:54