這是你的方程式和變量:
vars = {w11, w12, w21, w22};
eqs = {2 w11 + 3 w21 == 2 w12, w11 == 4 w12 + 3 w22,
w11 + 2 w21 + w22 == 0, 2 w12 + w21 + 2 w22 == 0};
這裏是矩陣:
In[48]:= matrix = Transpose[ eqs /. Equal :> Subtract /.
Map[Thread[vars -> #] &, IdentityMatrix[Length[vars]]]]
Out[48]= {{2, -2, 3, 0}, {1, -4, 0, -3}, {1, 0, 2, 1}, {0, 2, 1, 2}}
編輯:
In[49]:= eqs = {3 w11 + 2 w21 == 5 w11 + 3 w12, w11 + w21 == 5 w21 + 3 w22,
3 w12 + 2 w22 == -2 w11 - w12, w12 + w22 == -2 w21 - w22};
In[50]:= matrix = Transpose[ eqs /. Equal :> Subtract /.
Map[Thread[vars -> #] &, IdentityMatrix[Length[vars]]]]
Out[50]= {{-2, -3, 2, 0}, {1, 0, -4, -3}, {2, 4, 0, 2}, {0, 1, 2, 2}}
:
關於你的第二組方程的同作品
編輯:
根據要求擴展解決方案。首先,它是如何工作的:這個想法是首先將所有的變量到左側,這是用減法替換等號操作來實現的:
In[69]:= eqs = {3 w11 + 2 w21 == 5 w11 + 3 w12, w11 + w21 == 5 w21 + 3 w22,
3 w12 + 2 w22 == -2 w11 - w12, w12 + w22 == -2 w21 - w22};
在[70]:=方程/。等於:>減去
輸出[70] = { - w11 - 3 w12 + 2 w21,w11 - 4 w21 - 3 w22,2 w11 + 4 w12 + 2 w22,w12 + 2 w21 + 2 w22}
被構造
的規則,使得用於任何一組的規則,只有一個變量被設置爲1,其餘爲0:
In[71]:= Map[Thread[vars -> #] &, IdentityMatrix[Length[vars]]]
Out[71]= {{w11 -> 1, w12 -> 0, w21 -> 0, w22 -> 0}, {w11 -> 0, w12 -> 1, w21 -> 0, w22 -> 0},
{w11 -> 0, w12 -> 0, w21 -> 1, w22 -> 0}, {w11 -> 0, w12 -> 0, w21 -> 0, w22 -> 1}}
這允許計算係數:
In[72]:= eqs /. Equal :> Subtract /. Map[Thread[vars -> #] &, IdentityMatrix[Length[vars]]]
Out[72]= {{-2, 1, 2, 0}, {-3, 0, 4, 1}, {2, -4, 0, 2}, {0, -3, 2, 2}}
在檢查規則如何工作時,很容易看到我們需要d將Transpose
應用於結果。
現在,你的第二個請求需要更多的工作:
In[53]:= eqs = {3 w11 + 2 w12 == 5 w11 + 3 w21 + a, w11 + w12 == 5 w12 + 3 w22 - c,
3 w21 + 2 w22 + b == a - 2 w11 - w21, w21 + w22 == f - 2 w12 - w22};
In[55]:= modifiedEqs = With[{alts = Alternatives @@ vars},
eqs //. {lhs_ == HoldPattern[Plus[left___, x_, right___]] /; !FreeQ[x, alts] :>
lhs - x == left + right,
HoldPattern[Plus[left___, x_, right___] == rhs_] /; FreeQ[x, alts] :>
(left + right == rhs - x)}]
Out[55]= {-2 w11 + 2 w12 - 3 w21 == a, w11 - 4 w12 - 3 w22 == -c,
2 w11 + 4 w21 + 2 w22 == a - b, 2 w12 + w21 + 2 w22 == f}
In[68]:= matrix = {Transpose[# /. (lhs_ == rhs_) :> lhs /.
Map[Thread[vars -> #] &, IdentityMatrix[Length[vars]]]], #[[All,2]]} &[modifiedEqs]
Out[68]= {{{-2, 2, -3, 0}, {1, -4, 0, -3}, {2, 0, 4, 2}, {0, 2, 1, 2}}, {a, -c, a - b, f}}
的主要區別是,我們需要一個額外的步驟來分離常數,把他們帶到r.h.s.你可能會發現找出自己如何工作的細節更有用。
編輯:
是的,我忘了提:瞭解解決方案,你應該知道,當你申請的規則在列表嵌套會發生什麼 - 在這種情況下,規則的每個列表裏面的一個大名單結果的表達的轉化的副本,例如:
In[73]:= {a, b, c} /. {{a -> 1}, {b -> 1}, {c -> 1}}
Out[73]= {{1, b, c}, {a, 1, c}, {a, b, 1}}
HTH
列昂尼德·希夫林的反應看起來是正確的估計的正好。但我有一個先前的問題。關於Solve的結果,你不喜歡什麼? (也就是說,你爲什麼需要去解決這個問題?) – 2011-02-14 23:17:47
@丹尼爾,我得到一個錯誤,說'解決:: svars:方程式可能不會給所有解決方案「解決」變量。「因爲這是下確定的。 – 2011-02-14 23:39:50
是的,那恰恰是因爲它是欠定的。然後顯示的解決方案有一些有效的變量作爲參數,其他的解決方案就是這些變量。但是由於輸入是不確定的,我沒有看到你可能想要表達解決方案集。 – 2011-02-14 23:45:03