首页 > 解决方案 > 打印复杂矩阵 Fortran

问题描述

复矩阵是这样声明的:

complex(8) :: matrix(:,:)

如何以 nxn 格式打印每个元素的矩阵:(a, b) 或 a+ib?(我的意思是一个方阵,每行一行,所以会有 n 行和 n 列)

这是我用我想要的格式打印一个真实矩阵的方式:

do i=1,n
    do j=1,n
        write(*, fmt="(f0.2, tr2)", advance="no") matrix(i,j)
end do
    write(*, fmt="(a)") " "
end do

但我不确定如何将其转换为复杂矩阵

标签: matrixprintingfortranlinear-algebracomplex-numbers

解决方案


如何将每个元素的矩阵打印为:(a,b)

假设您已经知道这(a b)complextype 的默认打印格式,为什么这还不够?

do j=1,n
  write(*, *) matrix(:,j)
end do

输出将类似于:

          (10.000000000000000,-20.000000000000000)              (10.000000000000000,-20.000000000000000)              (10.000000000000000,-20.000000000000000)
          (10.000000000000000, 20.000000000000000)              (10.000000000000000, 20.000000000000000)              (10.000000000000000, 20.000000000000000)

如果您想要更多定制的东西,您可以尝试这样的事情(调整字段宽度和精度):

do j=1,n
  write(*, "(*('('sf6.2xspf6.2x'i)':x))") matrix(:,j)
end do

这会产生这样的结果:

( 10.00 -20.00 i) ( 10.00 -20.00 i) ( 10.00 -20.00 i)
( 10.00 +20.00 i) ( 10.00 +20.00 i) ( 10.00 +20.00 i)

推荐阅读