关于matlab的循环嵌套问题
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/11/08 14:11:30
关于matlab的循环嵌套问题
IN=3;
s=0;
w=0;
for r=0:(IN-1)
w=w+nchoosek(IN,1)*nchoosek((IN-1),r);
end
men=zeros(w,IN);
p=factorial(IN);
m=zeros((IN*p),IN);
for r=0:(IN-1)
a=[2 ones(1,r) zeros(1,IN-r-1)];
m=perms(a);
for i=1:(p-1)
for j=(i+1):p
if(m(j,:)==m(i,:))
m(j,:)=zeros(1,IN);
end
end
end
for i=1:p
if(m(i,:= zeros(1,IN))
s=s+1;
men(s,:)=m(i,:);
end
end
end
这个程序大循环里的第一个子循环可以得出结果,但第二个子循环不行,可能是不能嵌套两个平行的循环.此代码用来产生无重复的全排列,或给出其他解决方法.
IN=3;
s=0;
w=0;
for r=0:(IN-1)
w=w+nchoosek(IN,1)*nchoosek((IN-1),r);
end
men=zeros(w,IN);
p=factorial(IN);
m=zeros((IN*p),IN);
for r=0:(IN-1)
a=[2 ones(1,r) zeros(1,IN-r-1)];
m=perms(a);
for i=1:(p-1)
for j=(i+1):p
if(m(j,:)==m(i,:))
m(j,:)=zeros(1,IN);
end
end
end
for i=1:p
if(m(i,:= zeros(1,IN))
s=s+1;
men(s,:)=m(i,:);
end
end
end
这个程序大循环里的第一个子循环可以得出结果,但第二个子循环不行,可能是不能嵌套两个平行的循环.此代码用来产生无重复的全排列,或给出其他解决方法.
循环都是可以的,只是if(m(i,:)~= zeros(1,IN))这句判断有问题
改成别的句子就好了
我运行了一下
IN=3;
s=0;
w=0;
for r=0:(IN-1)
w=w+nchoosek(IN,1)*nchoosek((IN-1),r);
end
men=zeros(w,IN);
p=factorial(IN);
m=zeros((IN*p),IN);
for r=0:(IN-1)
a=[2 ones(1,r) zeros(1,IN-r-1)];
m=perms(a);
for i=1:(p-1)
for j=(i+1):p
if(m(j,:)==m(i,:))
m(j,:)=zeros(1,IN);
end
end
end
for i=1:p
if m(i,:)==zeros(1,IN)
else s=s+1;
men(s,:)=m(i,:);
end
end
end
>> men
men =
0 0 2
0 2 0
2 0 0
0 1 2
0 2 1
1 0 2
1 2 0
2 1 0
2 0 1
1 1 2
1 2 1
2 1 1
不知这样是不是你要的结果
改成别的句子就好了
我运行了一下
IN=3;
s=0;
w=0;
for r=0:(IN-1)
w=w+nchoosek(IN,1)*nchoosek((IN-1),r);
end
men=zeros(w,IN);
p=factorial(IN);
m=zeros((IN*p),IN);
for r=0:(IN-1)
a=[2 ones(1,r) zeros(1,IN-r-1)];
m=perms(a);
for i=1:(p-1)
for j=(i+1):p
if(m(j,:)==m(i,:))
m(j,:)=zeros(1,IN);
end
end
end
for i=1:p
if m(i,:)==zeros(1,IN)
else s=s+1;
men(s,:)=m(i,:);
end
end
end
>> men
men =
0 0 2
0 2 0
2 0 0
0 1 2
0 2 1
1 0 2
1 2 0
2 1 0
2 0 1
1 1 2
1 2 1
2 1 1
不知这样是不是你要的结果