【问题标题】:for or while loops in matlabmatlab中的for或while循环
【发布时间】:2014-05-19 12:15:46
【问题描述】:

我刚刚开始在编程课的 matlab 中使用 for 循环,基本的东西对我很好,但是我被要求“使用循环创建一个 3 x 5 矩阵,其中每个元素的值是它的行号与其列号的幂除以其行号和列号之和例如元素(2,3)的值是(2^3 / 2+3) = 1.6

那么我需要使用什么样的循环来使我能够开始新行以形成矩阵?

【问题讨论】:

  • 两者都可以。但是,for 循环会很整洁。您可以使用循环索引来索引矩阵元素。

标签: matlab loops for-loop while-loop


【解决方案1】:

由于您需要知道行号和列号(并且只是因为您必须使用循环),所以 for 循环是自然的选择。这是因为如果设置正确,for 循环会自动为您跟踪行号和列号。更具体地说,您需要一个嵌套的 for 循环,即一个 for 循环位于另一个循环中。例如,外循环可能会遍历行,而内循环可能会遍历列。

至于在矩阵中开始新行,这是在循环中执行的非常糟糕的做法。你应该预先分配你的矩阵。这将对您的代码产生重大的性能影响。预分配最常使用zeros 函数完成。

例如

num_rows = 3;
num_cols = 5;
M = zeros(num_rows,num_cols); %// Preallocation of memory so you don't grow your matrix in your loop
for row = 1:num_rows
    for col = 1:num_cols
        M(row,col) = (row^col)/(row+col);
    end
end

但最有效的方法可能是根本不使用循环,而是使用ndgrid 一次性完成:

[R, C] =  ndgrid(1:num_rows, 1:num_cols);
M = (R.^C)./(R+C);

【讨论】:

    【解决方案2】:

    命令bsxfun 对此类问题非常有帮助。它会为你完成所有的循环和预分配。

    例如:

    bsxfun(@(x,y) x.^y./(x+y), (1:3)', 1:5)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-28
      • 1970-01-01
      • 1970-01-01
      • 2014-08-21
      • 1970-01-01
      • 2021-07-27
      • 2020-05-15
      相关资源
      最近更新 更多