[心得] 關於副程式的使用

看板MATLAB作者 (幫回MATLAB問題囧>)時間17年前 (2007/09/16 22:38), 編輯推噓5(509)
留言14則, 2人參與, 最新討論串1/1
因為有版友私下寫信給我.對於合併程式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
我的方法是一個副程式一個m-file用久了,覺得管理很方便
09/16 22:48, 1F

09/16 22:48, , 2F
像未來如果這個function會被其他支程式call的話!
09/16 22:48, 2F

09/16 22:49, , 3F
我就會把他放在同一個資料夾內!!(主要是我會到處demo)
09/16 22:49, 3F

09/16 22:49, , 4F
這樣也不用考慮path的問題!!
09/16 22:49, 4F

09/16 23:18, , 5F
順便問1F一個問題
09/16 23:18, 5F

09/16 23:18, , 6F
我也是把副程式寫成一個m檔..然後在主程式call出來
09/16 23:18, 6F

09/16 23:19, , 7F
但我的副程式m檔是會自動建立..
09/16 23:19, 7F

09/16 23:20, , 8F
但每次call的時候MATLAB會說找不到m檔
09/16 23:20, 8F

09/16 23:20, , 9F
請問你有遇過這種情況嗎?
09/16 23:20, 9F

09/16 23:21, , 10F
7108篇有我之前問的問題
09/16 23:21, 10F

09/16 23:54, , 11F
會不會是你的path沒有設對?
09/16 23:54, 11F

09/16 23:56, , 12F
path沒問題..執行第一次會出現找不到的錯誤訊息
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
文章代碼(AID): #16xJ_xRB (MATLAB)
文章代碼(AID): #16xJ_xRB (MATLAB)