作者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