繁体   English   中英

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的值保持不变,而不需要创建一个临时变量来存储该值?

这些例程就地完成工作,因此保留原始数组的唯一方法是进行复制。

您已经注意到, 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM