0

我想运行我的函数并创建 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 ).. 但我真的不明白这是如何工作的或它的作用。有人可以解释/帮助吗?

谢谢

4

1 回答 1

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,我们都重置rent1landrent(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
于 2014-06-01T19:34:38.937 回答