对于给定的 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/