3

我有两个这样的 for 循环:

for x = 1:1:15
    for y = 1:1:15
        values(x,y) = x^2 + y
    end
end

这允许我为 x 和 y 的每个组合(如果它们是整数)计算 x^2 + y。

但是,如果我也想计算小数的 x^2 + y 怎么办?

所以是这样的:

for x = 0:0.1:15
    for y = 0:0.1:15
        ????? = x^2 + y
    end
end

如果 x 和 y 是小数,那么任何人都可以帮我找到一种可以计算 x^2 + y 的所有可能性的方法,因此不能再用作索引参考?

4

4 回答 4

5

使用meshgrid,matlab 内置的二维矩形网格,无需循环!

[y x]=meshgrid(0:0.1:15)
values=x.^2+y

可视化这一点:

imagesc(values);
title('values=x^2+y'); axis square
xlabel('x'); ylabel('y'); colorbar;
axis xy;
set(gca,'XTick',1:10:151,'YTick',1:10:151);
set(gca,'XTickLabel',0:1:15,'YTickLabel',0:1:15);

在此处输入图像描述

编辑: mdgrid也很好唯一需要注意的是这[y x]=meshgrid...是相同的 [x y]=ndgird...

于 2013-05-22T04:09:18.560 回答
3

利用:

[x y] = ndgrid(0:0.1:15);
values = x.^2 + y;

其他答案的问题:

  1. @inigo 的答案将改变您的初始示例的顺序xy与您的初始示例进行比较(通过使用meshgrid而不是ndgrid.
  2. @NominSim 的答案必须付出额外的d_x努力x
  3. @mecid 的答案必须分别计算列和行(MATLAB 中也没有 ++ 运算符)。如果我要走@mecid 的路线,我会使用以下方法。
x = 0:.1:15;
y = 0:.1:15;
values = zeros(numel(x),numel(y));
for xnum = 1:numel(x)
    for ynum = 1:numel(y)
        values(xnum,ynum) = x(xnum)^2 + y(ynum);
    end
end

meshgrid由于它产生了一些讨论,因此从文档(在 MATLAB 中,不在在线文档中)关于和之间的区别ndgrid

meshgridndgrid除了前两个输入和输出参数的顺序被切换(即,[X,Y,Z] = meshgrid(x,y,z)产生与 相同的结果)之外,类似[Y,X,Z] = ndgrid(y,x,z)...meshgrid也仅限于 2D 或 3D。

于 2013-05-22T04:17:23.350 回答
2
for x =1:0.1:15
  for y=1:0.1:15
    values(x*10-10, y*10-10) =x^2+y;
  end
end
于 2013-05-22T03:58:34.690 回答
1

为什么不循环从 1 到 151 的整数然后计算要使用的小数呢?然后你仍然可以使用索引引用。

IE

for x = 1:1:151
    for y = 1:1:151
        d_x = x / 10.0 - 0.1
        d_y = y / 10.0 - 0.1
        values(x,y) = d_x^2 + d_y
    end
end

(如果我的语法稍有偏差,请原谅我有一段时间没有使用 MATLAB)。

于 2013-05-22T03:58:17.087 回答