Fortran - 将变量传递到 CGESV
Fortran - Passing a variable into CGESV
我正在尝试测试 LAPACK 方法 CGESV,但我遇到了问题。我想在我的代码的其他部分重用我的 'A' 矩阵,但是当我将它传递给方法时它会发生变化。 'A'的定义:
(input/output) COMPLEX array, dimension (LDA,N)
On entry, the N-by-N coefficient matrix A.
On exit, the factors L and U from the factorization
A = P*L*U; the unit diagonal elements of L are not stored.
有没有一种方法可以在将 A 的值传递到 CGESV 后保留它,而不是创建一个临时变量来存储该值?
例程就地完成工作,因此保留原始数组的唯一方法是制作一个副本。
正如您已经注意到的那样,A
矩阵被 P*L*U
分解覆盖。如果矩阵的大小不是很大,可以复制A
矩阵的内容,用复制的来分解。
CALL CCOPY(N*N, A, 1, A_NEW, 1)
如果矩阵太大以至于无法在内存中保留两个副本,则可以使用分解后的矩阵执行数学运算。例如计算 y=A*x
* y = x
CALL CCOPY(N, X, 1, Y, 1)
* y = U * y
CALL CTRMV('Upper', 'No transpose', 'Non-unit', N, A, N, Y, 1)
* y = L * y
CALL CTRMV('Lower', 'No transpose', 'Unit', N, A, N, Y, 1)
* y = P * y
CALL DLASWP( 1, Y, N, 1, N, IPIV, 1 )
所需的额外内存是 IPIV
大小的整数 N
。
我正在尝试测试 LAPACK 方法 CGESV,但我遇到了问题。我想在我的代码的其他部分重用我的 'A' 矩阵,但是当我将它传递给方法时它会发生变化。 'A'的定义:
(input/output) COMPLEX array, dimension (LDA,N)
On entry, the N-by-N coefficient matrix A.
On exit, the factors L and U from the factorization
A = P*L*U; the unit diagonal elements of L are not stored.
有没有一种方法可以在将 A 的值传递到 CGESV 后保留它,而不是创建一个临时变量来存储该值?
例程就地完成工作,因此保留原始数组的唯一方法是制作一个副本。
正如您已经注意到的那样,A
矩阵被 P*L*U
分解覆盖。如果矩阵的大小不是很大,可以复制A
矩阵的内容,用复制的来分解。
CALL CCOPY(N*N, A, 1, A_NEW, 1)
如果矩阵太大以至于无法在内存中保留两个副本,则可以使用分解后的矩阵执行数学运算。例如计算 y=A*x
* y = x
CALL CCOPY(N, X, 1, Y, 1)
* y = U * y
CALL CTRMV('Upper', 'No transpose', 'Non-unit', N, A, N, Y, 1)
* y = L * y
CALL CTRMV('Lower', 'No transpose', 'Unit', N, A, N, Y, 1)
* y = P * y
CALL DLASWP( 1, Y, N, 1, N, IPIV, 1 )
所需的额外内存是 IPIV
大小的整数 N
。