2015-02-06 75 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