首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Matlab返回向量

Matlab返回向量
EN

Stack Overflow用户
提问于 2012-11-27 08:14:49
回答 1查看 1.7K关注 0票数 1

对于初学者提出的matlab问题,我很抱歉。

代码语言:javascript
运行
复制
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);

这不是我所期望的结果。

代码语言:javascript
运行
复制
vals =
 1 1 1
 4 4 4
 9 9 9
 ..... etc

如果我显式地将A,B和C放在一个行向量中并返回它,那么一切都是正常的。

代码语言:javascript
运行
复制
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

这里出了什么问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-27 08:45:34

除非您明确要求,否则MATLAB通常不愿意给您提供多个返回值。所以在第一个版本中,当你这样做的时候:

代码语言:javascript
运行
复制
vals(i,:) = crunch(i);

MATLAB所做的就是从crunch(i)中获取第一个返回值,然后将其传播给vals(i,:)的所有元素。这就像是在做:

代码语言:javascript
运行
复制
return_val = crunch(i);
vals(i,:) = return_val;

如果您显式地向MATLAB请求多个返回值,您将获得所需的行为。正如@igon所说,这个版本将修复这个行为:

代码语言:javascript
运行
复制
[vals(i,1), vals(i,2), vals(i,3)] = crunch(i);

或者,我认为如果vals是一个单元格数组,vals{i, :} = crunch(i);也可以工作,但在这种情况下就没有意义了-在代码中使用常规(而不是单元格)数组似乎是正确的方法。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13575381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档