Ich möchte alle d-dimensionalen Monomalen Grad weniger als k berechnen und sie in ein Zell-Array - Pbase - in einer geordneten Weise (ich benutze Matlab aber dieses plfblem gilt auch für andere Sprachen). k und d werden vom Benutzer zur Verfügung gestellt, aber willkürlich.Berechnen Sie alle d-dimensionalen Monomalen Grad weniger als k
Was ich bisher getan haben, (die Array genannt degreeindex zeigen die Position von Monome einem gewissen Grad in Pbase):
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
...
Das Problem ist, dass ich das nicht einen Weg finden, zu tun für einen beliebigen Grad k. In der obigen Lösung müsste ich für jeden Grad eine neue (und tiefere) verschachtelte Schleife einfügen.
Ich weiß, dass dies wie ein triviales Problem scheint, aber ich kann es nicht verstehen. Ich schätze alle Ratschläge.
Danke, Tokkot! Dies ist eine wirklich nette und einfache Lösung. –