Matrix 生成Hilbert矩阵Fortran
我刚开始用Fortran,我试图生成一个非常简单的4x4 Hilbert矩阵,但我的输出是一堆零,除了一开始的1。任何帮助都将不胜感激 代码如下: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)
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语句,这似乎是一个节省时间的好方法!