Meshgrid和双for循环不会产生相同的矩阵,为什么?

时间:2014-12-16 00:10:53

标签: matlab

我试图评估表达式f = 2y-exp(z)可以采用不同z和y值的所有值。 y和z是长度为M的两个向量。我想知道为什么生成表达式f的两种方法产生不同的结果。

使用meshgrid:

    [Y,Z] = meshgrid(y,z);
argument = 2*Y-exp(Z);

并使用双重for循环

argument_new = zeros(M,M);
for i = 1:length(y)
    for j = 1:length(z)
    argument_new(i,j) = 2*y(i)-exp(z(j));
    end
end

任何提示都将受到高度赞赏!

3 个答案:

答案 0 :(得分:2)

归咎于meshgrid

  

MESHGRID与NDGRID类似,只是前两个输入的顺序       和输出参数切换(即[X,Y,Z] = MESHGRID(x,y,z)       产生与[Y,X,Z] = NDGRID(y,x,z))相同的结果。

解决方案:使用ndgrid,它不会进行切换,因此更加自然":

[Y,Z] = ndgrid(y,z);
argument = 2*Y-exp(Z);

或者在meshgrid之后的代码中,添加转置操作:argument = argument.';)

答案 1 :(得分:2)

这是因为meshgrid创建'倒置'方向的方式。我没有找到正确的字词,但这里有一个示例说明您的代码。您看到如果您取消注释选项2并使用argument_new(j,i)而不是argument_new(i,j)两个矩阵相等(使用{获得) {1}})。

isequal

答案 2 :(得分:0)

它们是相同的,你应该只调换一个(在Matlab中),或者你可以在for循环中用j替换i,反之亦然