【问题标题】:MATLAB - Using for loops find all the combinations of x^2 + yMATLAB - 使用 for 循环查找 x^2 + y 的所有组合
【发布时间】:2013-05-22 03:52:18
【问题描述】:

我有两个这样的 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 的所有可能性的方法?

【问题讨论】:

    标签: matlab loops


    【解决方案1】:

    使用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...

    【讨论】:

    • +1 简单直接的答案。 (我也喜欢可视化的使用......它去哪儿了?)
    • 简单而好的答案。我更喜欢axis xy 而不是更复杂的set(gca,'ydir', 'normal')。更短...
    • 感谢您的评论,我同意axis xy 更短更好。我将在...中编辑它。
    【解决方案2】:

    用途:

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

    其他答案的问题:

    1. @inigo 的回答将改变xy 的顺序,与您最初的示例相比(使用meshgrid 而不是ndgrid
    2. @NominSim 的答案必须付出额外的努力才能得到 d_x from 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
    

    由于它引起了一些讨论,从文档(在 MATLAB 中,不在在线文档中)关于 meshgridndgrid 之间的区别:

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

    【讨论】:

    • +1 我喜欢使用ndgrid 而不是meshgrid。我已经多次遇到笛卡尔与行/列问题。这是一个很好的链接,解释了ndgridmeshgrid 之间的区别:mathworks.com.au/support/solutions/en/data/1-1AOGG/…
    • 请注意,我在@inigo 的回答中的 cmets 已经过时,因为在我回答之后,他从 [x y] = meshgrid 更改为 [y x] = meshgrid,这确实与 [x y] = ndgrid 相同。
    【解决方案3】:
    for x =1:0.1:15
      for y=1:0.1:15
        values(x*10-10, y*10-10) =x^2+y;
      end
    end
    

    【讨论】:

      【解决方案4】:

      为什么不循环从 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)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        • 2015-11-20
        相关资源
        最近更新 更多