精華區beta Fortran 關於我們 聯絡資訊
我看ptt好像沒有科學計算版, 所以再度借此處一問囉. :P 各位做計算的朋友會不會常常遇到這種問題, 那就是通常我們 會用同一個code跑很多組不同的parameter, 然後想去觀察結果 怎麼隨parameter改變. 舉個最簡單的例子, 假設我想觀察行星繞恆星的運動, 怎麼隨 能量(E), 角動量(l)和恆星質量(M)改變. 也就是說程式的 input有E, L, M. Output可能是一個包含了x(t), y(t), z(t) 的文字檔. 我們為了想看output隨不同input的變化, 每次換了參數得了結果 之後, 應該會想存起來留著以後看, 是吧? 很合理的狀況(我目前 的作法)就是把output依照input來取檔名存起來. 所以就有了一堆叫做E0.003_L0.2_M2.txt 之類的檔案. E1e-5_L2e-1_M0.5.txt 這種辦法當然是可行的, 但是跑過的model一多, 實在是看不大順眼. 小的問題是當parameter的範圍一大, 檔名很難consistently命名. 大的問題是比方說我想要觀察定角動量定恆星質量下, 軌道外型對 能量的變化, 我能做的只有慢慢的 plot E0.003_L0.2_M2.txt plot E0.001_L0.2_M2.txt plot E1e-6_L0.2_M2.txt 一個一個來. 會遇到這種問題的癥結其實在, 檔名中的0.003, 0.2等等, 都只是 字串而已, 不是數字, 所以當我想觀察E=0.002時, 沒有辦法叫電腦告訴我 "可以參考一下E=0.001和E=0.003" 也沒有辦法叫電腦慢慢展示E<0.001的解. 我想問的是, 有沒有辦法真的用"數字", 可以比較大小加減乘除的數字, 替 output做標籤? 也就是說建立一個標籤是double E, double L, double M的 database, 但是data是一個一個不同的檔案. 像這樣, 我可以要求電腦: list file E<=0.001 然後電腦就列出 E0.001_L0.2_M2.txt E1e-6_L0.2_M2.txt 我如果要求: for name in $(list file E<=0.001); plot $name; done 電腦就照順序幫我作圖. 這樣的想法(夢想) 各位大大認為算是個合理的要求嗎? 是不是已經有 implementation了? (檔名裡的1e-6是我故意弄的, 這樣就不能用ASCII碼來sort了:P 但我不是找碴, 實際上真的會遇到這類情形) 希望這篇文符合本版討論範圍. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 76.170.235.113
xhole:用Matlab應該可以作到 配合eval和num2str指令 10/06 16:31
noonee:我想到一個克難的辦法 先做一個讀取檔名的程式(open) 10/24 10:40
noonee:檔名命名必須有固定格式和欄位 讀進來的檔名必為character 10/24 10:41
noonee:然後產生一個temp的text file把把檔名中數字的部份放進去 10/24 10:42
noonee:然後重新以數字讀 temp檔的各數字欄位 10/24 10:43
noonee:簡單說就是另外建一個所有檔名的lib text file 10/24 10:43