在fortran中写复杂矩阵

bil*_*ill 1 fortran

如何将Fortran中的复杂(nXn)矩阵写入文件?例如:

DO I=1,N
       write(14,'(100g15.5)') ( M(i,j), j=1,n )
ENDDO  
Run Code Online (Sandbox Code Playgroud)

在这个例子中,一个2nXn元素被写入文件,即真实和虚构.而不是两个元素,Re(a11)Im(a11),我怎么能把它写成一个元素Re(a11)+ iIm(a11)?

mil*_*cic 5

使用内部函数REAL和AIMAG来编写复数的单个实部和虚部:

CHARACTER(LEN=3),DIMENSION(n,n) :: imag_unit = '+i*'

WHERE(AIMAG(M)<0.)imag_unit = '-i*'

DO I=1,N
  write(14,'(100(g15.5,a,g15.5,2x))') ( REAL(M(i,j)),imag_unit(i,j),&
                                        ABS(AIMAG(M(i,j))), j=1,n )
ENDDO 
Run Code Online (Sandbox Code Playgroud)

说明:此代码定义了一个字符串矩阵,当虚部为正时,其值为'+ i',而虚部为负的'-i'.因为在格式化('-i')中考虑了负虚部,所以我们取虚部的绝对值.相应地编辑格式描述符,以便用于读取输出文件的程序将能够读取它.