作者openfire (疲惫...)
看板Fortran
标题[问题] 未知大小矩阵读取的问题
时间Sun Aug 9 03:16:48 2009
fortran在放置或读取arry的顺序为先从最左边的一行
把同一行下的列值都读完之後,再往右一行继续读
写值的顺序也是一样
所以要在不指定的状况下让fortran把读值放进你想要的位置就必须遵从以下方式
以3X3矩阵为例
11.dat内容:
aa
ba
ca
ab
bb
cb
ac
bc
cc
read 11.dat进入a(3,3)
fortran的放置方式:
aa ab ac
ba bb bc
ca cb cc
不过如果今天11.dat的内容变更为
aa ab ac
ba bb bc
ca cb cc
然後在不知道矩阵大小的状况下该怎麽写才能正确的定义每个值到相对应的矩阵位置呢?
使用
do while(.not. eof(11))
read(11,*)row
n=n+1
enddo
allocate (a(n,n))
定出a的大小之後我就卡关了@@
fortran读档案一次都是读一整行
所以在read(11,*)的後面必须要清楚的告诉他每个值的意义
在知道矩阵大小的状况下可以用read(11,*)a(i,1),a(i,1),a(i,1)
然後配合上do i=1,3 就可以达到目的
可是现在矩阵大小未知的话到底该怎麽处理会比较好呢
想了一整个晚上都没有想出好方法
还麻烦高手赐教
--
正妹!!! 干!跟你说过要先看看你自己的脸...
\ /
○
︵ \○ ╱/|
. . ﹎ ﹍﹍ ╱ ̄﹚╱>
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.227.148.239
1F:推 blc:90的话可以之後再决定阵列大小,77的话就只能用副程式包… 08/09 12:27
2F:→ openfire:我已经定义a为allocatable未知大小的矩阵 然後用do while 08/09 14:20
3F:→ openfire:求出矩阵大小之後allocate (a(n,n)) 08/09 14:20
4F:→ openfire:但是在读取同一行的资料时在未知矩阵大小的状况下不知道 08/09 14:21
5F:→ openfire:该怎麽写才能把数值放进正确的arry位置@@ 08/09 14:21
6F:推 jyhchyunlu:再开另一个暂存的矩阵 read的时候先把值放进去 08/10 13:46
7F:→ jyhchyunlu:等确定大小之後再放进原来的矩阵 08/10 13:47
8F:→ jyhchyunlu:不知道有没有更好的方法 08/10 13:47
9F:推 terryys:试试 "read(11,*) a(i,:)"? 08/10 13:52
10F:推 xhole:怎不用matlab? 08/12 02:41
11F:→ openfire:我们老板只会用fortran所以也要我们用fortran写 不然他没 08/12 02:42
12F:→ openfire:办法给我们意见= = 08/12 02:42
13F:推 xhole:第二个例子似乎是用空白分隔的? 那用matlab可以直接读取阿 08/12 15:45
14F:→ xhole:用matlab你连一行code都不用写耶 试看看吧 08/12 15:46
15F:→ xhole:後续的资料处理要用到fortran你可以再用mex把读取的矩阵丢回 08/12 15:46
16F:→ xhole:去给fortran算 满方便的 08/12 15:47
17F:→ openfire:我发现fortran的IMSL资料库里面有很完整的矩阵指令集可以 08/13 01:06
18F:→ openfire:用 完全部用自己写了 囧 08/13 01:06
19F:→ UDP:拍手~ 恭喜你LV生等了.... 08/13 10:44
20F:→ UDP:不过因该也没有你要的这功能 08/13 10:53
21F:推 xhole:说实在的 用对工具比较重要.. 08/13 12:56
22F:推 xhole:记得imsl以数值方法为主 你的问题应该不是这方面 08/13 12:59