将矩阵打印到文件中

时间:2019-01-30 10:16:44

标签: fortran

我需要在文件中打印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的实际值,因此我不知道哪个是正确的。如果有人可以帮助我,我将不胜感激。

2 个答案:

答案 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}}索引。

至于什么是“正确的”,这取决于您的代码。您只需要保持一致即可。