【问题标题】:How to condense n-1, n-2, ... in a for loop (matlab)?如何在 for 循环(matlab)中压缩 n-1,n-2,...?
【发布时间】:2012-10-09 23:51:30
【问题描述】:

我希望输入标准,因为矩阵的大小每次都会减小。

我试图简化我正在做的事情,看看浓缩它是否可行。

是否有一种方法可以简化以下内容,以便不需要 n-1、n-2 等,并且代码可以适应输入矩阵。

a = [2 4 5 6; 7 5 3 5; 6 7 9 4];
a
n = length(a(1,:));
b = [5];

for i = n,

    a = a.*b;

    a(:,n-1)=[];

    a

    a = a.*b;

a(:,n-2)=[];

a

a = a.*b;

a(:,n-3)=[];

a

end

我希望能够在每次迭代中看到输出。 例如:

a =

     2     4     5     6
     7     5     3     5
     6     7     9     4


a =

    10    20    30
    35    25    25
    30    35    20


a =

    50   150
   175   125
   150   100


a =

   750
   625
   500

【问题讨论】:

    标签: algorithm matlab matrix iteration


    【解决方案1】:

    在语法中使用 FOR 循环

    for i = starting_index:increment:ending_index
    

    从n-1倒数到1,如下:

    for i = n-1:-1:1 % Count down from n-1 to 1
        a = a.*b;
        a(:,i)=[];
        a
    end
    

    【讨论】:

      【解决方案2】:

      试试这个

      a = [2 4 5 6; 7 5 3 5; 6 7 9 4]
      
      n = size(a,1);
      b = [5];
      for i=1:n
          a = a(:,end-1).*b
      end
      

      我现在无法访问 Matlab,因此它可能无法按您的意愿工作。

      【讨论】:

      • 为了在控制台显示部分结果,我在定义了 'a' 的行中省略了分号。
      • 效果很好!谢谢!只需将倒数第二行更改为: a = a(:,end).*b ,不会与 end-1 一起运行
      • 你是对的,最后一个循环在i==n时会报错(列end-1不存在)。在您的示例中,您要删除倒数第二列,因此保留 end-1 但将 for i=1:n 更改为 n-1。
      猜你喜欢
      • 1970-01-01
      • 2018-09-08
      • 2020-06-10
      • 2020-08-29
      • 1970-01-01
      • 2018-02-11
      • 2012-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多