我尝试从方程(方程组)中提取系数到列表(矩阵)。我试过CoefficientList[poly, {var1, var2, ...}]
但没有成功。
这个简单的例子可以解释我的问题:
Eq1 = a D[U[x1, x2], {x1, 2}] + b D[V[x1, x2], {x2, 2}]
有什么建议吗?
修改
丹尼尔的Lichtblau解决方案非常清楚(谢谢你),但如果这个方程看起来像这样呢?
Eq1 = a D[U[x1, x2], {x1, 2}] + b D[V[x1, x2], {x2, 2}] + c W[x1, x2]
一个简单的例子可以解决如下:
还有更优雅的解决方案吗? (特别是对于更复杂的表达方式)
Ps我无法理解为什么,但这个解决方案给了我正确的结果。
答案 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