生成希尔伯特矩阵Fortran

时间:2014-02-14 17:04:32

标签: 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)     !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

3 个答案:

答案 0 :(得分:2)

从您给定的代码开始:

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

ij的初始化不是必需的,因为循环会自动执行此操作。

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

非常重要的一点:您的格式代码不会显示数字的小数部分。

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

答案 1 :(得分:1)

array=scaler将数组的所有元素设置为缩放器。试试a(i,j)=...

答案 2 :(得分:0)

除了修正@ M.S.B。和@Stefan指出,您还可以更有效地(在代码和容易出错的情况下)使用forall语句创建这样的矩阵:

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