这是你的方程式和变量:
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