Matrix 生成Hilbert矩阵Fortran

Matrix 生成Hilbert矩阵Fortran,matrix,fortran,Matrix,Fortran,我刚开始用Fortran,我试图生成一个非常简单的4x4 Hilbert矩阵,但我的输出是一堆零,除了一开始的1。任何帮助都将不胜感激 代码如下: PROGRAM HILBERT IMPLICIT NONE REAL :: a(4,4) REAL :: i, j !Initialise matrix a with non zeroes i = 1.0 j = 1.0 DO i = 1,4,1 a(i,4) = 0.0 DO j = 1,4,1 a=1.0/(i+j-1.0)

我刚开始用Fortran,我试图生成一个非常简单的4x4 Hilbert矩阵,但我的输出是一堆零,除了一开始的1。任何帮助都将不胜感激

代码如下:

PROGRAM HILBERT
IMPLICIT NONE
REAL :: a(4,4)
REAL :: i, j

!Initialise matrix a with non zeroes
 i = 1.0
 j = 1.0

DO  i = 1,4,1
 a(i,4) = 0.0 
 DO  j = 1,4,1

a=1.0/(i+j-1.0)     !Attempt to generate Hilbert matrix

  WRITE(6,'(f3.0)',advance='no') a(i,j)   !formatted output

 END DO
    write(6,*) !formatted output
END DO 

END PROGRAM HILBERT

array=scaler
将数组的所有元素设置为scaler。尝试
a(i,j)=…
除了@M.S.B.和@Stefan指出的更正之外,您还可以更有效地(在代码和错误倾向性方面)使用
for all
语句创建这样一个矩阵:

program hilbert
  implicit none
  real a(4,4)

  integer i,j

  forall(i=1:4, j=1:4) a(i,j) = 1/(i+j-1.0)

! As @Stefan says, the format is an important part of the answer
  print '(4F8.5)', a

end program hilbert

从给定的代码开始:

PROGRAM HILBERT
IMPLICIT NONE
REAL :: a(4,4)
REAL :: i, j


DO  i = 1,4 ! The third argument is not necessary if equal to 1
 DO  j = 1,4
  a(i,j) = 1.0/(i+j-1.0) ! generate Hilbert matrix

  WRITE(6,'(f8.5)',advance='no') a(i,j)   !formatted output
 END DO
 write(6,*) !formatted output
END DO 

END PROGRAM HILBERT
无需初始化
i
j
,因为循环会自动执行此操作

a(i,4)=0的初始化应该是
a(i,j)=0
,但这不是必需的。按照M.S.B.的建议,您可以在开始时使用
a=0
进行初始化,但在这种情况下不需要这样做

一件非常重要的事情:格式代码不会显示数字的小数部分


而且:根据较新的标准,循环变量(
i
j
在这种情况下)必须是整数,因为实数的行为是不明确的。

除了答案之外:不要在
DO
中使用
real
变量。非常感谢您的时间,我的格式行一直在拖我后腿。她现在已经开始运行了,我终于可以开始计算她的行列式了。谢谢你给我介绍forall语句,这似乎是一个节省时间的好方法!