对于初学者提出的matlab问题,我很抱歉。
function [ A B C ] = crunch(i)
A = i^2;
B = 2*A;
C = A+B;
end;
vals = zeros(5,3);
for i=1:5
vals(i,:) = crunch(i);
endfor;
disp(vals);
这不是我所期望的结果。
vals =
1 1 1
4 4 4
9 9 9
..... etc
如果我显式地将A,B和C放在一个行向量中并返回它,那么一切都是正常的。
function retval = crunch(i)
A = i^2;
B = 2*A;
C = A+B;
retval = [ A B C ];
end;
ans =
1 2 3
4 8 12
9 18 27
16 32 48
25 50 75
这里出了什么问题?
发布于 2012-11-27 08:45:34
除非您明确要求,否则MATLAB通常不愿意给您提供多个返回值。所以在第一个版本中,当你这样做的时候:
vals(i,:) = crunch(i);
MATLAB所做的就是从crunch(i)
中获取第一个返回值,然后将其传播给vals(i,:)
的所有元素。这就像是在做:
return_val = crunch(i);
vals(i,:) = return_val;
如果您显式地向MATLAB请求多个返回值,您将获得所需的行为。正如@igon所说,这个版本将修复这个行为:
[vals(i,1), vals(i,2), vals(i,3)] = crunch(i);
或者,我认为如果vals
是一个单元格数组,vals{i, :} = crunch(i);
也可以工作,但在这种情况下就没有意义了-在代码中使用常规(而不是单元格)数组似乎是正确的方法。
https://stackoverflow.com/questions/13575381
复制相似问题