[問題] 如何使用副程式計算過程中的變數存取、 …已回收

看板MATLAB作者 (這是有錢人的ID)時間14年前 (2010/04/04 18:31), 編輯推噓2(203)
留言5則, 4人參與, 最新討論串1/1
目前我寫的副程式是解微分方程, 副程式中應用到許多參數的計算, 請問是否有指令可以在主程式中, 直接存取副程式的計算參數繪圖?? 目前兩有個想法, 第一個是將計算結果存在.txt或.xls, 然後再讀取該數據畫圖。 另一個是在主程式中, 直接再寫一次參數計算。 第一個所遇到的問題, 因為是微分方程, 所以存檔會花費相當長的時間, Excel檔案開出來也是亂碼, 請問有比較好的方式嗎?? 最好是可以用某個指令直接將先前的計算結果取出繪圖, 如下列方程式之 VE VC PE PC , 感激不盡! 程式碼如下: 主程式: clear all clc x0=[300;300;0.0052;0.0025]; ts=0:0.005:250; tol=1e-4; options=odeset('RelTol',tol,'AbsTol',[tol,tol,tol,tol]); [t,x]=ode15s('CaseIII_20100326',ts,x0,options); 副程式: function dx = CaseIII_20100326(t,x) %global V0 V1 a Cv Cp VE VC dVE dVC hWE hWC AE AC QEd QCd PE PC thou_E thou_C a b Leng RF_E RF_C D_tube omg t dx=zeros(4,1); V0=402; V1=2010; Cv=0.717; Cp=1.004; omg=1; R=0.287; VE=V0+V1*(1+cos(omg*t)); VC=V0+V1*(1+cos(omg*t+pi/2)); dVE= -omg*V1*sin(omg*t); dVC= -omg*V1*sin(omg*t+pi/2); hWE=(56.54*((x(1)+120)/((VE)*(10^(-9)))/(x(1)^(1.5))))^(0.8); hWC=(56.54*((x(2)+120)/((VC)*(10^(-9)))/(x(2)^(1.5))))^(0.8); AE=(201+(402+2010*(1+cos(t)))*4/16)/(10^9); AC=(201+(402+2010*(1+cos(t+pi/2)))*4/16)/(10^9); QEd = hWE*AE*(523-x(1)); QCd = hWC*AC*(298-x(2)); thou_E = x(3)/VE; thou_C = x(4)/VC; a = 1.458*10^(-6); % kg/(m*s*K^0.5) b = 110.4 ; % K %Vis = a*(T^1.5)/(T+b); % 黏致係數 Viscosity (kg/(m*s)) % Sutherland correlation Vis_E = a*(x(1)^1.5)/(x(1)+b); Vis_C = a*(x(2)^1.5)/(x(2)+b); Leng=0.02; % m D_tube= 0.002; % m %RF=Vis*Leng/D_tube^4; % 流體阻力 RF_E=Vis_E.*Leng/D_tube^4; RF_C=Vis_C.*Leng/D_tube^4; PE = x(3).*R*x(1)/(VE.*1e-9); PC = x(4).*R*x(2)/(VC.*1e-9); if PC >= PE mEI= thou_C.*(PC-PE)./RF_C; mEO= 0; else mEI= 0; mEO= thou_E.*(PE-PC)./RF_E; end dx(1) = mEI.*(Cp.*x(2)-Cv.*x(1))./x(3)/Cv-mEO.*R*x(1)/x(3)./Cv-R*x(1).*dVE/Cv/VE+hWE.*AE*(523-x(1)) ; dx(2) = mEO.*(Cp.*x(1)-Cv.*x(2))./x(4)/Cv-mEI.*R*x(2)/x(4)./Cv-R*x(2).*dVC/Cv/VC+hWC.*AC*(298-x(2)) ; dx(3) = mEI-mEO; dx(4) =(mEO-mEI) ; -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.118.7.184 ※ 編輯: YangJimmy 來自: 122.118.7.184 (04/04 18:34)

04/04 21:25, , 1F
可能的方法1. 設為global (須在主程式先宣告)
04/04 21:25, 1F

04/04 21:26, , 2F
2. 或用argument傳回主程式
04/04 21:26, 2F

04/04 21:39, , 3F
直接存成.mat呢?
04/04 21:39, 3F

04/04 23:00, , 4F
設為 global 不行,這樣VE會顯示向量不符,不能畫圖@@"
04/04 23:00, 4F

04/05 00:20, , 5F
function [xx yy]=f(xx,yy,zz) 多一個變數去接
04/05 00:20, 5F
文章代碼(AID): #1Bk6gQuR (MATLAB)