【发布时间】:2016-11-11 12:00:14
【问题描述】:
我已经在 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}
那么我该怎么做呢?
【问题讨论】:
-
... 这些值无关紧要,因为它应该是一个通用的矩阵输出子程序。所以困扰我的是印刷品的布局。我怎样才能实现,例如,在行和列中排序的值就像在 maltab 中的输出一样?
-
您只需要在格式中添加一个重复说明符。这里一定有一个很好的问题可以指点你,但我现在找不到。您可能还想将重复计数设为变量(对此会有另一个问题)。
标签: formatting fortran