如何在嵌套的matlab for循环中的每次迭代中创建一个新的变量名?

时间:2014-06-01 19:09:01

标签: matlab variables for-loop variable-names

我想运行我的功能并创建3种不同的输出变量。

for i=1:3
    for j=1:3
Rent_nb = landrent(i,j,Dist);
    end 
end

我希望“_nb”为1,2,3 ...所以我得到3个输出数组。 所以我在互联网上看到了,我看到我必须使用它:
http://www.mathworks.com/matlabcentral/answers/29712-creating-a-new-variable-in-each-iteration

所以这会给我:

for i=1:3
    for j=1:3
eval(['rent' num2str(i) '= landrent(i,j,Dist_lowcost)']);
    end 
end

这似乎有效,但我真的不明白...... 我想获得9个输出(i和j的每个组合一个)而不是3个。 我猜这与这部分有关:num2str(i).. 但我真的不明白这是如何工作的或它的作用。 有人可以解释/帮助吗?

由于

1 个答案:

答案 0 :(得分:1)

单独写出命令(对字符串)然后对其进行评估可能会有所帮助,因此您将能够准确地看到正在评估的语句:

for i=1:3
    for j=1:3
        cmd = ['rent' num2str(i) '= landrent(i,j,Dist_lowcost);'];
        fprintf('command to evaluate is: %s\n',cmd);  % or just step through the code
        eval(cmd);
    end 
end

以上i==1的输出是

command to evaluate is: rent1= landrent(i,j,Dist_lowcost)
command to evaluate is: rent1= landrent(i,j,Dist_lowcost)
command to evaluate is: rent1= landrent(i,j,Dist_lowcost)

请注意,对于每个j,我们会将rent1重置为landrent(i,j,Dist_lowcost),这就是为什么您只获得三个输出 - 每次后续迭代j都会替换之前的结果

如果您决定继续使用上述内容并创建新变量而不是使用矩阵,则可以执行以下操作 - 在renti的每次迭代中创建i向量,然后使用当你迭代j

for i=1:3
    cmd = ['rent' num2str(i) '=zeros(1,3);'];
    eval(cmd);
    for j=1:3
        cmd = ['rent' num2str(i) '(j)= landrent(i,j,Dist_lowcost);'];
        fprintf('cmd=%s\n',cmd);
        eval(cmd);
    end 
end