変数 (x1、x2、...) と係数 (c1、c2、...) がある多項式の展開を自動的に計算したいと考えています。私の目標は計算することですp(1)*(c1*x1+c2*x2+...)^n+ ... + p(n)*(c1*x1+c2*x2+...)^n .
お気づきのように、結果の式はF(x1,x2...)*g(c1,c2,...)
[F は行行列、g は列行列] のように記述できます。つまり、係数と変数の間に何らかの乗法分離があります。
現在、私は MATLAB シンボリック ツールボックスを使用し、結果のシンボリック展開を手動で調べることによって F と g を構築しています。c=(c1,c2,...)
n が大きくて大きすぎる場合、項が多すぎて手動では不可能になるため、これはあまり実現可能ではありません。たとえば(c1*x1+c2*x2+c3)
とn=2
、私が欲しいのは次のとおりです。
>> p=[2 5]
p =
2 5
>> syms c1 c2 c3
>> syms x1 x2
>> expression= p(1)*(c1*x1+c2*x2+c3)^2 + p(2)*(c1*x1+c2*x2+c3);
>> expand(expression)
ans =
2*c1^2*x1^2 + 4*c1*c2*x1*x2 + 4*c1*c3*x1 + 5*c1*x1 + 2*c2^2*x2^2 + 4*c2*c3*x2 + 5*c2*x2 + 2*c3^2 + 5*c3
>> F=[5*x1 5*x2 5 4*x1*x2 4*x1 4*x2 2*x1^2 2*x2^2 2]
F =
[ 5*x1, 5*x2, 5, 4*x1*x2, 4*x1, 4*x2, 2*x1^2, 2*x2^2, 2]
>> g=[c1 c2 c3 c1*c2 c1*c3 c2*c3 c1^2 c2^2 c3^2].'
g =
c1
c2
c3
c1*c2
c1*c3
c2*c3
c1^2
c2^2
c3^2
>> expand(F*g)
ans =
2*c1^2*x1^2 + 4*c1*c2*x1*x2 + 4*c1*c3*x1 + 5*c1*x1 + 2*c2^2*x2^2 + 4*c2*c3*x2 + 5*c2*x2 + 2*c3^2 + 5*c3
次の質問を見つけました。などを使用して自動的に行う方法があるようです。上記のconv
場合の自動化されたソリューション(またはそのような自動化に向けた少なくともいくつかのアイデア)を思いつくことができるx=(x1,x2) and c=(c1,c2,c3) and n=2
場合; 高次元の場合に一般化できると思います。
注: F または g の項の順序は、構造化された方法で順序付けられている場合、問題ではありません。