我需要在文件中打印DFGRD1(矩阵)。我已经写了这些行
open(105,file='C:\temp17\FM.mtx')
WRITE(105,*) DFGRD1
close(105)
c To check in .dat file
DO i=1,3
WRITE (7,*) (DFGRD1(i,j),j=1,3)
END DO
但是,答案并不相同。它们是彼此的换位。由于无法访问DFGRD1的实际值,因此我不知道哪个是正确的。如果有人可以帮助我,我将不胜感激。
答案 0 :(得分:1)
Fortran是Column专业的,因此请将DO循环更改为J而不是I。这应该是这样的:
DO j=1,3
WRITE (7,*) (DFGRD1(i,j),i=1,3)
END DO
请注意,最佳的Fortran代码应具有在列上迭代的外循环。
将一些矩阵打印到文件中以检查其值不是一个好主意。您需要通过基础教程来学习如何使用调试器(我建议使用GDB),您可以设置断点并打印值。
答案 1 :(得分:1)
所有数组都存储在1d中,这只是内存的布局方式。
问题是它的存储方式。 Fortran将其存储为“主要列”,即:
A(1, 1) -> A(2, 1) -> A(3, 1) -> A(1, 2) -> ... -> A(3, 3)
大多数其他语言存储的行主要数组,即
A(1, 1) -> A(1, 2) -> A(1, 3) -> A(2, 1) -> ... -> A(3, 3)
(实际上,大多数语言默认都从0开始索引。)
因此,与通过循环{{}专门以行为主的方式编写它相比,一次性写入它(Fortran会以它在内存中放置的方式存储它)得到不同的输出也就不足为奇了。 1}}索引。
至于什么是“正确的”,这取决于您的代码。您只需要保持一致即可。