【问题标题】:Matlab: subtract rows in a single matrix consecutively by iterative methodMatlab:通过迭代方法连续减去单个矩阵中的行
【发布时间】:2011-12-22 11:07:57
【问题描述】:

假设有一个矩阵 [mXn]。例如:a=[2 9; 5 7; 8 25; 1 6; 3 9]。

我想知道如何从第二行中减去第一行,依此类推,直到两行之间的差为 1。

接下来从第三行减去第一行,以此类推,差值为 2。

并且在每个循环之后保存新矩阵的输出,并使用与循环对应的名称来表示差异1的名称可能是 newMatDif_1 等等。

diff1----5-2 7-9; 8-2 25-9; .......newMatDiff_1  
diff2----8-2 25-9; 3-8  9-25;.......newMatDiff_2    
diff3----1-2 6-9; .......newMatDiff_3

【问题讨论】:

  • 第一个不应该是:5-2 7-9; 8-5 25-7; 1-8 6-25; 3-1 9-6; ... ?

标签: arrays matlab iteration operation


【解决方案1】:

您的命名方案在 MATLAB 中并不真正可行或有用,因此我使用了一个 3 维数组来保存差异。此操作的关键是旋转数组的行,为此我定义了一个函数:

rotate_rows = @(A, n) ( [ A((n+1):end,:); A(1:n,:)]);

for r = 1:rows(A)-1
    diffs(:,:,r) = a - rotate_rows(a,r);
end

【讨论】:

  • 其实你所做的是我不想要的。让我详细说明问题。 a.) 我有一个 5X2 的矩阵。 b.) 现在我想减去 R1-R2, R2-R3,..... c.) 我还想减去 R1-R3, R2-R4,....... d.) 同样R1-R4, R2-R5,.... 在这里,如果你看,那么我要减去的第 i 个行数正在增加。此外,对于(任何 for、while、do....)的每个循环,是否有任何可能的方法可以将答案保存在为相应循环自动命名的文件中?
  • 尝试运行代码。你会发现你正在寻找的每一个减法都确实是计算和存储的,再加上一些不会真正妨碍但允许更简单代码的减法。在 MATLAB 中,循环不可能创建新变量名或递增变量名。您可以将每个矩阵保存到单独的 .mat 文件中,但在该 .mat 文件中,它们仍然具有相同的变量名称,因此如果新的 .mat 文件不覆盖相同的工作区变量。这真的是你想要的吗?
猜你喜欢
  • 1970-01-01
  • 2014-07-15
  • 1970-01-01
  • 1970-01-01
  • 2017-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-08
相关资源
最近更新 更多