[心得] 關於副程式的使用
  因為有版友私下寫信給我.對於合併程式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
推
09/16 22:48, , 1F
09/16 22:48, 1F
→
09/16 22:48, , 2F
09/16 22:48, 2F
→
09/16 22:49, , 3F
09/16 22:49, 3F
→
09/16 22:49, , 4F
09/16 22:49, 4F
推
09/16 23:18, , 5F
09/16 23:18, 5F
→
09/16 23:18, , 6F
09/16 23:18, 6F
→
09/16 23:19, , 7F
09/16 23:19, 7F
→
09/16 23:20, , 8F
09/16 23:20, 8F
→
09/16 23:20, , 9F
09/16 23:20, 9F
→
09/16 23:21, , 10F
09/16 23:21, 10F
推
09/16 23:54, , 11F
09/16 23:54, 11F
推
09/16 23:56, , 12F
09/16 23:56, 12F
→
09/16 23:57, , 13F
09/16 23:57, 13F
推
09/18 23:14, , 14F
09/18 23:14, 14F
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章
                            12
                        
                            32