对不起初学者的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
这里出了什么问题?
答案 0 :(得分:4)
除非您明确要求,否则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);
也会起作用,但在这种情况下没有意义 - 使用常规(非单元格)数组似乎是正确的代码中的方法。