我刚刚开始使用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
答案 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
i
和j
的初始化不是必需的,因为循环会自动执行此操作。
a(i,4) = 0
的初始化应为a(i,j) = 0
,但这不是必需的。根据M.S.B。的建议,您可以在a = 0
开头进行初始化,但在这种情况下不需要这样做。
非常重要的一点:您的格式代码不会显示数字的小数部分。
并且:根据更新的标准,循环变量(在这种情况下为i
和j
)必须是整数,因为实数的行为是不明确的。
答案 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