作者zupo (帮回MATLAB问题囧>)
看板MATLAB
标题[心得] 关於副程式的使用
时间Sun Sep 16 22:38:50 2007
因为有版友私下写信给我.对於合并程式m-file的方法
做个解说.
私以为将自己的心得.作为抛砖引玉.
首先.为什麽小弟总是喜欢用副程式来撰写程式呢?
小弟是读化工的.研读部分属於化工中很特别的一种
程序控制与模拟.而我负责的部份为反应性蒸馏系统.
当我进行蒸馏塔模拟的时候.会有很恐怖的情形.
单板:微分方程式的数目与成分数同外.还得进行温度对气体蒸气压的影响
若果成分数达到4个.板数达到35个板.那麽方程式数目为
35*4 = 140 条微分方程式 = 变数的数目
三条微方+一条总组成 = DAE (微分代数方程式) 用 ode15s 解题器来解
(若果两者不相同.那麽解出来就不会是唯一解.在此不讨论多重稳态)
还不包含能量平衡方程式(有化学反应还得加入反应热)
这样大的程式是很恐怖的.有人说合并挺麻烦.太多看不清.
不过要是一个式子一个式子修改.反而是合并较为容易
而且还得计算热力学模组(NRTL,WILSON,UNIQUAC,UNIFAC等等).
又得增加一个叠代回路...那在修改时就很恐怖了....
因为要把数据拿出来画图.常用到 " global " (全域变数宣告)
变的很不好改变程式码
那麽我就想.将程式合并出来不就很好吗?不过一开始都弄不起来
(那时候很菜.看到 MATHWORK 的档案交换中心的人写的东西.都觉得他们是怪物
不知道是怎麽并的.还有人写成GUI.真是神 @@a.不过现在还是没改变对他们的
崇拜就是了)
後来成功了.有两点挺重要的.我就直接进入主题吧
1.使用 % ---------------------- 将副程式分出来
2.使用函数握把 @ .才可以顺利求解
范例:function pptex2
握把--> [T,X]=ode45(@test2,[0 10],[0;0])
D=5.2;
m=61;
a0=346.05;
L=10.6;
Po2=8;
Po1=1;
N=(1-0.2.*X(:,2)./a0).^(7)
M=(L-X(:,1)./L).^(-1.4)
xlswrite('T',T,'T')
xlswrite('X',X,'X')
xlswrite('M',M,'M')
xlswrite('N',N,'N')
分隔--> % ------------------------------------------------------------------
function dx=test2(t,x)
D=5.2;
m=61;
a0=346.05;
L=10.6;
Po2=8;
Po1=1;
dx=zeros(2,1);
dx(1)=x(2);
N=(1-0.2*x(2)/a0)^7;
M=(L-x(1)/L)^-1.4;
dx(2)=(pi*D^2/(4*m)*0.1)*((Po2*N)-(Po1*M));
一般利用MATLAB内建的函数使用时.大部分我们在使用的方式是如此的
(这边指使用数值解方面的解题器.非解析解的)
[OUTPUT,...]=FUNCTIONNAME( ' FILENAME ' ,CONDITION,FACTOR1,...)
^^^ ^^^
在MATLAB中有一个使用指令与上面标记起来的用法类似.但是却於使用副程式时
为必须条件.我个人使用时是发现.不使用函数握把时.无法使用副程式
(刚开始觉得自己很菜的原因竟然是不会打小老鼠 囧>)
所以请要使用的同好.使用函数握把吧.并且要将程式与程式之间隔开就是了.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.118.160.163
1F:推 zhewei:我的方法是一个副程式一个m-file用久了,觉得管理很方便 09/16 22:48
2F:→ zhewei:像未来如果这个function会被其他支程式call的话! 09/16 22:48
3F:→ zhewei:我就会把他放在同一个资料夹内!!(主要是我会到处demo) 09/16 22:49
4F:→ zhewei:这样也不用考虑path的问题!! 09/16 22:49
5F:推 leslielion:顺便问1F一个问题 09/16 23:18
6F:→ leslielion:我也是把副程式写成一个m档..然後在主程式call出来 09/16 23:18
7F:→ leslielion:但我的副程式m档是会自动建立.. 09/16 23:19
8F:→ leslielion:但每次call的时候MATLAB会说找不到m档 09/16 23:20
9F:→ leslielion:请问你有遇过这种情况吗? 09/16 23:20
10F:→ leslielion:7108篇有我之前问的问题 09/16 23:21
11F:推 zhewei:会不会是你的path没有设对? 09/16 23:54
12F:推 leslielion:path没问题..执行第一次会出现找不到的错误讯息 09/16 23:56
13F:→ leslielion:执行第二次就可以成功...很怪...=.= 09/16 23:57
14F:推 zhewei:我也觉得很怪!看看版上的先进们!!知不知道原因为何? 09/18 23:14