在fortran中写复杂矩阵

时间:2012-01-03 18:57:33

标签: fortran

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

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

在此示例中,将一个2nXn元素写入文件,即实数和虚数。 而不是两个元素,Re(a11)Im(a11),我怎么能把它写成一个元素Re(a11)+ iIm(a11)?

1 个答案:

答案 0 :(得分: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 

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