fortran - 根据输入 i,j 从 3x3 中提取次矩阵

标签 fortran matrix-multiplication

对于给定的 3x3 矩阵,例如: A = [3 1 -4 ; 2 5 6 ; 1 4 8]

如果我需要输入次矩阵 (1,2) 次要 = [2 6 ; 1 8]

我已经编写了一个程序来从文本文件中读取矩阵,并且我应该编写一个子例程来根据用户输入的 i,j 从主矩阵 A 中提取次矩阵。我对 Fortran 很陌生,不知道如何做到这一点。我做了一些非常绝望的尝试,但我确信有一种更干净的方法可以做到这一点。

我非常绝望,我为 i 和 j 的每种可能的组合编写了 9 个 if 函数,但这显然不是一个明智的方法。如有任何帮助,我们将不胜感激!

最佳答案

正如@HighPerformanceMark 在评论中所说,实现此目的的一种方法是使用向量下标。您可以声明一个包含要保留的行的数组,以及相同的列,并将它们作为索引传递给矩阵。像这样:

function minor(matrix, i, j)
  integer, intent(in) :: matrix(:,:), i, j
  integer :: minor(size(matrix, 1) - 1, size(matrix, 2) - 1)
  integer :: rows(size(matrix, 1) - 1), cols(size(matrix, 2) - 1), k

  rows = [(k, k = 1, i - 1), (k, k = i + 1, size(rows))]
  cols = [(k, k = 1, j - 1), (k, k = j + 1, size(cols))]
  minor = matrix(rows, cols)
end

(我还没有测试过,如果有错误请告诉我)

另一种选择是通过 4 个赋值构造一个新矩阵,每个赋值对应结果的每个象限(受排除的行/列限制)。

我更喜欢第一个选项,因为它更具可扩展性。您可以通过将数组作为参数传递来轻松扩展该函数以删除多行/列,或者调整它以在更高的维度上工作。

关于fortran - 根据输入 i,j 从 3x3 中提取次矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51779432/

相关文章:

fortran - 函数引用正在调用子例程

algorithm - 矩阵乘法的时间复杂度

c - 打开CV乘以巨大的矩阵分割错误

python - 多重矩阵乘法

c - pthread 编程中的共享数据

arrays - 在矩阵中减去或添加向量

fortran - 使用隐式 do 循环写入文件

c - 如何为矩阵乘法器 C 程序获取未知矩阵的正确维数?

c - 从 Fortran 运行时 METIS 段错误

fortran - 使用传输 fortran 内在函数 : does the standard advise for byte order? 转换为派生类型