我试图评估表达式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
任何提示都将受到高度赞赏!
答案 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,反之亦然