功能:没有得到正确答案?

时间:2014-02-25 21:23:06

标签: matlab function

我注意到我正在尝试编写的函数非常奇怪。我的代码如下:

function y=testfun(x)
for i=1:2
    A(i*ones(2,2))=eye(2,2);

    y=zeros(2,2);
    y=y+eye(2,2); %+A(1*ones(2,2))
end
end

如果我使用y=y+eyes(2,2),那么我会得到testfun(some random number)=[1 0; 0 1]。但是,如果我删除y=y+eyes(2,2)并输入y=y+A(1*ones(2,2)), testfun(some random number) = [1 1; 1 1]。但是,我希望能得到和以前一样的答案,[1 0; 0 1]。

有没有人有可能知道为什么会这样?我的另一个问题是:如果我在命令窗口中键入A(1*ones(2,2)),为什么我得到错误:“未定义函数'A'用于'double'类型的输入参数。”< / em>我没定义它吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

第一件事:Matlab在column-major order中存储元素。所以在第一次迭代中(当i等于1时),行

A(i*ones(2,2)) = eye(2,2);

按以下顺序等同于以下语句:

A(i) = 1;
A(i) = 0;
A(i) = 0;
A(i) = 1;

当然只有最后一个声明才有效。因此,在第一次迭代中,A只是1。出于同样的原因,在第二次迭代中(当i等于2时)A(2)被分配了1,因此A变为[1 1]

函数返回的y的值是第二次迭代的值。在该迭代中,请考虑语句

y = y + A(1*ones(2,2));

由于1*ones(2,2)只有四个1,因此表达式A(1*ones(2,2))是一个包含四个1的矩阵,即ones(2,2)。您要将其添加到y的上一个值zeros(2,2)。因此y变为ones(2,2),该值将由函数返回。