系数列表/矩阵方程(方程组)

时间:2011-03-02 00:46:27

标签: wolfram-mathematica

我尝试从方程(方程组)中提取系数到列表(矩阵)。我试过CoefficientList[poly, {var1, var2, ...}]但没有成功。

这个简单的例子可以解释我的问题:

Eq1 = a D[U[x1, x2], {x1, 2}] + b D[V[x1, x2], {x2, 2}]

reproduce problem

有什么建议吗?

修改

丹尼尔的Lichtblau解决方案非常清楚(谢谢你),但如果这个方程看起来像这样呢?

Eq1 = a D[U[x1, x2], {x1, 2}] + b D[V[x1, x2], {x2, 2}] + c W[x1, x2]

一个简单的例子可以解决如下:

additional question

还有更优雅的解决方案吗? (特别是对于更复杂的表达方式)

Ps我无法理解为什么,但这个解决方案给了我正确的结果。

reproduce problem

2 个答案:

答案 0 :(得分:4)

首先,偏导数用Derivative表示,因此模式需要匹配。另外,我认为你不想使用CoefficientList,因为这会接受你的表达式出现的术语。总而言之,以下内容应该有效:

In[7]:= (Coefficient[Eq1, #] &) /@ {Derivative[2, 0][U][x1, x2], Derivative[0, 2][V][x1, x2]}
Out[7]= {a, b}

此处(Coefficient[Eq1, #] &)是一个匿名函数,用于查找参数的系数,/@将其映射到右侧的列表中。

HTH

答案 1 :(得分:1)

CoefficientArrays通常可用于在某些变量集中将系数提取到线性系统。在这种情况下,我们首先需要获取变量列表。

dvars = Cases[Eq1, Derivative[__][_][__], -1];

CoefficientArrays返回{constants,coefficients}形式的结果。它使用稀疏数组,因此我将转换为带有Normal的显式列表。

Normal[CoefficientArrays[Eq1, dvars]]

Out [672] = {0,{b,a}}

Daniel Lichtblau Wolfram Research