2016-11-11 121 views
0

格式说明我已经在这里fortran format specifier for complex number一个复杂的矩阵

阅读格式说明对复数但是我不能将它修改我的愿望。我认识层面的双重复杂的矩阵,我希望它是这样写的:

{1.000E+00, 0.000E+00} {2.123E+00, 6.545E+20} {5.456E+24, 5.562E+12} .... 
{1.000E+00, 0.000E+00} {2.123E+00, 6.545E+20} {5.456E+24, 5.562E+12} 
{1.000E+00, 0.000E+00} {2.123E+00, 6.545E+20} {5.456E+24, 5.562E+12} 
... 

所以在大括号的第一部分应该是真正的部分和第二部分的虚部。矩阵元素应分别放在大括号内,并根据矩阵中的位置彼此相邻放置。

到目前为止,我可以只打印出正确的一个元素或下对方所有的矩阵元素具有以下格式:("{",ES10.3, ",", 1X, ES10.3 ,"}")

编辑:

program test 
    implicit none 
    double complex     :: zz 
    double complex, dimension(3,4) :: aa 
    character (len=32)    :: fmtString 

    zz = cmplx(1.d0, -2.d0) 

    fmtString = '("{",ES10.3, ",", 1X ES10.3,"}")' 
    write(0,fmt = fmtString) zz !works 
    write(0,fmt = fmtString)aa !not formatted propperly 
end program test 

导致这样的事情,因为AA是不初始化:

{ 1.000E+00, -2.000E+00} <- zz works 
{ 9.881-324, 9.387-323} <- aa doesn't since it is not displayed as a 3x4 matrix 
{ 6.953-310, 0.000E+00} 
{ 0.000E+00, 0.000E+00} 
{ 1.812-314, 6.953-310} 
{ 0.000E+00, 1.019-312} 
{ 0.000E+00, 0.000E+00} 
{ 4.496-322, 0.000E+00} 
{ 0.000E+00, 2.631-312} 
{ 0.000E+00, 2.631-312} 
{ 0.000E+00, 1.210-316} 
{ 1.210-316, 1.210-316} 
{ 1.210-316, 3.953-323} 

那么我该如何继续?

+1

显示一些代码.. –

+0

...这些值并不重要,因为它应该是一个通用的矩阵输出子程序。所以困扰我的是印刷品的布局。我怎样才能存档,在行和列中排序的值例如像maltab中的输出? –

+1

您只需要为格式添加重复说明符。这里有一个很好的问题可以指出,但目前我找不到。您可能还想要重复计数变量(为此还会有另一个问题)。 – francescalus

回答

1
program test 
    implicit none 
    double complex     :: zz 
    double complex, dimension(3,4) :: aa 
    character (50)     :: fmtString 
    integer       :: i 

    zz = cmplx(1.d0, -2.d0) 
    aa = zz ! aa needs to be initialized too 

    fmtString = '(9999("{",ES10.3,",",1X,ES10.3,"}",:,1X))' 

    write(*,fmt = fmtString) zz 
    do i=1,size(aa,1) 
    write(*,fmt = fmtString) aa(i,:) 
    enddo 
end program test 
+0

谢谢!分号是干什么的? 另外我将9999略微推广一下,因为它可能会出现一个想要输出较大的矩阵: 'write(fmtString,'(I0)')size(aa,2)',然后 'fmtString ='(' // trim(fmtString)//'("{",ES10.3,“,”,1X,ES10.3,“}”,:,1X))'' –

+1

分号只是避免了最后一个空格每行的结尾。 (当没有数据要打印时,分号后的元素将被忽略)。你的建议当然可以接受,但是,如果你的编译器支持它(F2008),只需用字符*(无限重复)替换我的9999即可。 –