Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在matlab中计算for循环中的值_Matlab - Fatal编程技术网

如何在matlab中计算for循环中的值

如何在matlab中计算for循环中的值,matlab,Matlab,我已经建立了一个方程,但我需要找到更广义的公式。我的计划如下: p2=[]; W=3; i=6; for a1=1:W for a2=a1:W for a3=a2:W for a4=a3:W for a5=i-a4-a3-a2-a1; if(a4 <= a5 && a5<=W) p2=[p2;a1,a

我已经建立了一个方程,但我需要找到更广义的公式。我的计划如下:

p2=[];
W=3;
i=6;

for a1=1:W
    for a2=a1:W
        for a3=a2:W
            for a4=a3:W
                for a5=i-a4-a3-a2-a1;
                    if(a4 <= a5 && a5<=W)
                        p2=[p2;a1,a2,a3,a4,a5];
                    end
                end
            end
        end
    end
end
p2=[];
W=3;
i=6;
对于a1=1:W
对于a2=a1:W
对于a3=a2:W
对于a4=a3:W
对于a5=i-a4-a3-a2-a1;

如果(a4我想这正是你想要的:

[a5 a4 a3 a2 a1]=ndgrid(1:W,1:W,1:W,1:W,1:W);
ind = find(a2>=a1&a3>=a2&a4>=a3&a5>=a4&a1+a2+a3+a4+a5==i)
p2 = [a1(ind) a2(ind) a3(ind) a4(ind) a5(ind)]

我假设您希望将代码扩展到大量,因此我的建议可能不是最好的方法。但是,您可以尝试首先枚举k=4元素的所有组合。对于每个组合,您可以根据您的条件计算第5个元素

此方法与Luis Mendo的方法类似,但避免生成k**n可能性。通过对所有组合进行排序,您将拥有所有有效序列。您应该将每个组合(例如(2 1 2 1))解释为一个序列(例如[1 2 2])。这允许您避免对像[2 1 1 2]这样的序列进行评估由于每个组合都映射到一个有效序列上(反之亦然)。您不必计算无效序列


您可以使用combnk(v,k)生成组合。然后,您可以使用a5的所有可能值展开查找到的列表。

对于任意数量的“a”变量,您可以构造类似于我以前的解决方案的字符串,然后
eval
这些字符串:

num = 5; % number of "a" variables
W = 3;
i = 6;

string1 = '[';
for n = num:-1:1
  string1 = [ string1 'a' num2str(n) ' '];
end
string1 = [ string1 '] = ndgrid(1:W);'];

string2 = 'ind = find(';
for n = 2:num
  string2 = [ string2 'a' num2str(n) '>=a' num2str(n-1) '&' ];
end
for n = 1:num
  string2 = [ string2 'a' num2str(n) '+'];
end
string2 = [ string2(1:end-1) '==i);' ];

string3 = 'p2 = [ ';
for n = 1:num
  string3 = [ string3 'a' num2str(n) '(ind) ' ];
end
string3 = [ string3 ']' ];

eval(string1);
eval(string2);
eval(string3);

非常感谢您的帮助。您的代码正在运行,但我想要的是,我不想手动编写a5、a4、a3、a2、a1,因为我需要为a50展开此方程式,因此手动编写非常困难。因此,您能帮我告诉我如何声明这些“a”吗使用for循环?您需要构建字符串,然后对其求值。我发布了一个新的解决方案,可以做到这一点。