Matlab返回向量

时间:2012-11-27 00:14:49

标签: matlab octave

对不起初学者的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

这里出了什么问题?

1 个答案:

答案 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);也会起作用,但在这种情况下没有意义 - 使用常规(非单元格)数组似乎是正确的代码中的方法。