k度以下のすべてのd次元単項式を計算し、それらをセル配列-Pbaseに順番に入れたい(私はMatlabを使うが、このプロブレム他の言語にも適用されます)。 kとdはユーザによって提供されるが任意である。問題は、私はこれを行う方法を見つけていないということです次数がk未満のすべてのd次元単項式を計算する
n=nchoosek(d+k,k);%i know there are n over k possibilities for such monomials
Pbase=cell(1,n);
degreeindex=zeros(k+1,3);%showing [degree, start, end]
x=sym('x',[d,1]);
%the polynomials of degree 0
Pbase{1}=1;
degreeindex(1,1:3)=[0,1,1];%initialized for degree 0
%degree 1 monomials
degree=2;
degreeindex(degree,:)=[degree-1,degreeindex(degree-1,3)+1,degreeindex(degree-1,3)+1];
for i=1:d
Pbase{degreeindex(degree,2)+i-1}=x(i);
degreeindex(degree,3)=degreeindex(degree,3)+1;
end
%degree2 monomials
degree=3;
degreeindex(degree,:)=[degree-1,degreeindex(degree-1,3),degreeindex(degree-1,3)+1];
for i=1:d
for j=i:d
Pbase{degreeindex(degree,3)-1}=x(i).*x(j);
degreeindex(degree,3)=degreeindex(degree,3)+1;
end
end
%degree3 monomials
degree=4;
degreeindex(degree,:)=[degree-1,degreeindex(degree-1,3),degreeindex(degree-1,3)+1];
for i1=1:d
for i2=i1:d
for i3=i2:d
Pbase{degreeindex(degree,3)-1}=x(i1).*x(i2)*x(i3);
degreeindex(degree,3)=degreeindex(degree,3)+1;
end
end
end
...
:私はこれまで行われてきた、(degreeindexという配列がPbaseの中にある程度の単項式の場所を表示する)
任意の次数kである。上記のソリューションでは、すべての度合に対して新しい(さらに深い)ネストループを含める必要があります。
私はこれが不合理な問題だと思っていますが、私はその周りに頭を浮かべることはできません。私はすべてのアドバイスに感謝します。
ありがとう、Tokkot!これは本当に素晴らしく簡単な解決策です。 –