作者mystea (mystea)
看板Fortran
标题[问题] 科学计算--把结果建成资料库的实用性及可行性?
时间Mon Oct 6 15:35:02 2008
我看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
1F:推 xhole:用Matlab应该可以作到 配合eval和num2str指令 10/06 16:31
2F:推 noonee:我想到一个克难的办法 先做一个读取档名的程式(open) 10/24 10:40
3F:→ noonee:档名命名必须有固定格式和栏位 读进来的档名必为character 10/24 10:41
4F:→ noonee:然後产生一个temp的text file把把档名中数字的部份放进去 10/24 10:42
5F:→ noonee:然後重新以数字读 temp档的各数字栏位 10/24 10:43
6F:→ noonee:简单说就是另外建一个所有档名的lib text file 10/24 10:43