【发布时间】:2016-11-09 18:44:01
【问题描述】:
我想计算所有度数小于 k 的 d 维单项式 并以有序的方式将它们放入一个单元格数组 - Pbase 中(我使用 Matlab,但这个问题也适用于其他语言)。 k 和 d 由用户提供,但任意。
到目前为止我所做的,(称为degreeindex的数组显示了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
...
问题是我没有找到一种方法来实现任意度数 k。在上面的解决方案中,我必须为每个学位添加一个新的(更深的)嵌套循环。
我知道这似乎是一个失败的微不足道的问题,但我无法理解它。我感谢所有建议。
【问题讨论】:
标签: arrays matlab loops nested-loops