[問題] 未知大小矩陣讀取的問題

看板Fortran作者 (疲憊...)時間15年前 (2009/08/09 03:16), 編輯推噓7(7015)
留言22則, 6人參與, 最新討論串1/4 (看更多)
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

08/09 12:27, , 1F
90的話可以之後再決定陣列大小,77的話就只能用副程式包…
08/09 12:27, 1F

08/09 14:20, , 2F
我已經定義a為allocatable未知大小的矩陣 然後用do while
08/09 14:20, 2F

08/09 14:20, , 3F
求出矩陣大小之後allocate (a(n,n))
08/09 14:20, 3F

08/09 14:21, , 4F
但是在讀取同一行的資料時在未知矩陣大小的狀況下不知道
08/09 14:21, 4F

08/09 14:21, , 5F
該怎麼寫才能把數值放進正確的arry位置@@
08/09 14:21, 5F

08/10 13:46, , 6F
再開另一個暫存的矩陣 read的時候先把值放進去
08/10 13:46, 6F

08/10 13:47, , 7F
等確定大小之後再放進原來的矩陣
08/10 13:47, 7F

08/10 13:47, , 8F
不知道有沒有更好的方法
08/10 13:47, 8F

08/10 13:52, , 9F
試試 "read(11,*) a(i,:)"?
08/10 13:52, 9F

08/12 02:41, , 10F
怎不用matlab?
08/12 02:41, 10F

08/12 02:42, , 11F
我們老闆只會用fortran所以也要我們用fortran寫 不然他沒
08/12 02:42, 11F

08/12 02:42, , 12F
辦法給我們意見= =
08/12 02:42, 12F

08/12 15:45, , 13F
第二個例子似乎是用空白分隔的? 那用matlab可以直接讀取阿
08/12 15:45, 13F

08/12 15:46, , 14F
用matlab你連一行code都不用寫耶 試看看吧
08/12 15:46, 14F

08/12 15:46, , 15F
後續的資料處理要用到fortran你可以再用mex把讀取的矩陣丟回
08/12 15:46, 15F

08/12 15:47, , 16F
去給fortran算 滿方便的
08/12 15:47, 16F

08/13 01:06, , 17F
我發現fortran的IMSL資料庫裡面有很完整的矩陣指令集可以
08/13 01:06, 17F

08/13 01:06, , 18F
用 完全部用自己寫了 囧
08/13 01:06, 18F

08/13 10:44, , 19F
拍手~ 恭喜你LV生等了....
08/13 10:44, 19F

08/13 10:53, , 20F
不過因該也沒有你要的這功能
08/13 10:53, 20F

08/13 12:56, , 21F
說實在的 用對工具比較重要..
08/13 12:56, 21F

08/13 12:59, , 22F
記得imsl以數值方法為主 你的問題應該不是這方面
08/13 12:59, 22F
文章代碼(AID): #1AVSyZ9W (Fortran)
文章代碼(AID): #1AVSyZ9W (Fortran)