MATLAB - 使用for循环查找x ^ 2 + y的所有组合

时间:2013-05-22 03:52:18

标签: matlab loops

我有两个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 个答案:

答案 0 :(得分:5)

使用meshgrid,matlab内置的2-D矩形网格,无需循环!

[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);

enter image description here

修改 mdgrid也很好,唯一要注意的是[y x]=meshgrid...是相同的[x y]=ndgird...

答案 1 :(得分:3)

使用:

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

其他答案的问题:

  1. @ inigo的答案将更改xy与初始示例相比的顺序(使用meshgrid而不是ndgrid
  2. @ NominSim的答案必须从d_x
  3. 获得额外的努力x
  4. @mecid的答案必须分别计算列和行(在MATLAB中也没有++运算符)。如果我要沿着@ mecid的路线走下去,我会使用以下内容。
  5. 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
    

    由于它产生了一些讨论,从文档(在MATLAB中,而不是在在线文档中)讨论了meshgridndgrid之间的差异:

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

答案 2 :(得分: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

答案 3 :(得分:1)

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

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)。