【发布时间】:2016-08-31 17:52:29
【问题描述】:
我正在尝试在 Fortran 中构建块三对角矩阵。现在我有了这段代码,它只处理放置在A_matrix 的主对角线中的矩阵,i 中的每一步都有一个新矩阵。
do i = gs+1, total_mesh_points
start_line = (3*i)-2
start_colu = (3*i)-2
final_line = (3*i)
final_colu = (3*i)
do ii = 1, 3
do jj = 1, 3
A_matrix(start_line:final_line,start_colu:final_colu) = &
impflux(ii,jj)
end do
end do
end do
这里我的A_matrix(i,j) 是一个大矩阵,它将在其主对角线上接收另一个三乘三矩阵 (impflux)。请注意,对于i 中的每一步,我都会有一个新的impflux 矩阵,该矩阵需要位于A_matrix 的主对角线中。
对于这个问题,我想不出更简单的解决方案。人们通常如何在 Fortran 中构建块对角矩阵?
【问题讨论】:
-
该代码没有多大意义。在以
ii和jj为索引的循环内,它反复更新a_matrix的相同元素,首先是impflux(1,1),然后是impflux(1,2),等。如果您向我们展示您正在尝试创建的内容的小示例,我可能会更好地理解。 -
感谢您的回复。我正在处理偏微分方程的隐式方法。在这些方法中,我们必须为网格中的每个点创建三个矩阵 (3x3)。代码的第一个循环通过网格中的所有点。其余代码将负责正确定位 A_matrix 内的矩阵 impflux(为网格中的每个点生成)。最终的结果将是 A_matrix 的主对角线内的一堆 impflux 矩阵。
-
理想的情况是,如果我将三个矩阵向量 a(i,j,nm)、b(i,j,nm) 和 c(i,j,nm) 传递给一个函数,然后它返回给我一个非常大的矩阵 (C),这三个矩阵 (a,b,c) 形成了三个主对角线。
-
您没有尝试创建三对角矩阵。您正在尝试创建一个block tridiagonal matrix。它们根本不是一回事