请教,如何提取多变量多项式的系数。
mathematica吧
全部回复
仅看楼主
level 5
yogort2012 楼主
不得已,这样提系数有点复杂。实际问题中变量很多。我需要提取所有系数,分别令系数等于0,再得到若干方程。请教各位大神。
代码:
a = v[x, y]
\!\(\*SuperscriptBox[\(u\),
TagBox[
RowBox[{"(",
RowBox[{"0", ",", "1"}], ")"}],
Derivative],
MultilineFunction->None]\)[x, y] + u[x, y]*
\!\(\*SuperscriptBox[\(u\),
TagBox[
RowBox[{"(",
RowBox[{"1", ",", "0"}], ")"}],
Derivative],
MultilineFunction->None]\)[x, y] + x*u[x, y];
b = MonomialList[a, {u[x, y],
\!\(\*SuperscriptBox[\(u\),
TagBox[
RowBox[{"(",
RowBox[{"1", ",", "0"}], ")"}],
Derivative],
MultilineFunction->None]\)[x, y],
\!\(\*SuperscriptBox[\(u\),
TagBox[
RowBox[{"(",
RowBox[{"0", ",", "1"}], ")"}],
Derivative],
MultilineFunction->None]\)[x, y]}]
b = b /. MapThread[Rule, {{u[x, y],
\!\(\*SuperscriptBox[\(u\),
TagBox[
RowBox[{"(",
RowBox[{"1", ",", "0"}], ")"}],
Derivative],
MultilineFunction->None]\)[x, y],
\!\(\*SuperscriptBox[\(u\),
TagBox[
RowBox[{"(",
RowBox[{"0", ",", "1"}], ")"}],
Derivative],
MultilineFunction->None]\)[x, y]}, Table[1, {3}]}]
2017年01月23日 03点01分 1
吧务
level 15
这样?:
DeleteCases[List @@ Expand@a, u[__]^(_. ) | Derivative[__][u][__]^(_.), {2}]
2017年02月04日 09点02分 2
学习了~
2017年02月06日 11点02分
level 7
@xzcyr 的思路就是很直观, 把不感兴趣的变量踢掉
当然还有一个思路, 那就是给变量赋值为1, 那么结果乘下来也就是系数了
其实异曲同工
ReplaceAll[
a // MonomialList, {Derivative[___][u][___] -> 1, u[___] -> 1}]
当然, Derivative[___][u][___] 这个形式是怎么得到的呢?
InputForm看看就行了, 这其实偏微分最坑的地方, 一不小心就会出现bug
2017年02月04日 11点02分 3
你这个方法比我的直接多了啊。(我写答案的时候也不知道是怎么回事,拐到了那种“奇怪”的思路上,貌似是潜意识里觉得这里就该把Default给用上……)
2017年03月04日 08点03分
level 6
不是有CoefficientList嘛
CoefficientList[a, {u[x, y], Derivative[1, 0][u][x, y], Derivative[0, 1][u][x, y]}]
然后可以Flatten一下
Flatten[%]
再把0删掉
DeleteCases[%, 0]
最后列好方程
% == 0 // Thread
2017年02月07日 12点02分 4
如果我没理解错,那么如果是这样的情况: a = (u + v - 1) x - (u - v + 2) y; 要x和y前面的系数为0,二楼三楼的代码则会整个展开,跟想要的结果不一样
2017年02月07日 12点02分
@e_i_pi 我觉得是楼主问的不够清楚……比如楼主那个a里的u[x,y],是否应该Collect一下就不明确。
2017年03月04日 08点03分
[大拇指]
2020年05月16日 07点05分
level 5
yogort2012 楼主
这么多人的助力帖子,我当时怎么就忘记感谢和学习了呢,谢谢吧主又给扒出来
2017年03月04日 08点03分 5
1