matlab中间函数

来源:百度知道 编辑:UC知道 时间:2024/06/23 03:51:36
请问大家,我的一阶微分方程中有中间量需要用常量和变量计算得到,为了避免代换错误,我想在m文件或matlab的命令中使用中间函数代换,不知道该如何写程序,是使用嵌套式函数还是子函数来实现?例子如下:其中a1,a2,a3....等为已知常量,y1,y2,y3.......等为要求的变量,qpr qrad qconv为中间量,因为是要用ode函数求解多元一阶微分方程组,其他的一阶微分方程也存在这个问题,有些中间量需要多次调用,还请各位帮忙看看!
dy1/dt=q1+q2-q3
其中q1=a1*m1, m1=a1*y32*y4
q2 =a2*y32
q3=a3*y43

%by dynamic
%see also http://www.matlabsky.com
%contact me matlabsky@gmail.com
%2009.2.
%

function matlabsky
clc
a=[7630 32805 1.1 17615 4.7628*10^(-8) 1273 0.05 1.5*10^7 1 3.95*10^4 ...
125000 8.314 1.3*10^9 3.21*10^4 1808 0.01 3.7*10^5 1.46*10^13 8899 30186];
tspan=[0 5];
x0=[300 300 7.5*10^(-5) 1250 1.183 0.23 0 0 6.2*10^(-7)];
options=odeset('RelTol',1e-3,'AbsTol',[1e-3],'OutputFcn',@odeplot,'OutputSel',[1]);
[t,y]=ode45(@odefun1,tspan,x0,options,a);

function f=odefun1(t,y,a)
%Vp
Vp=pi*y(3).^3/6;
%qpr
mc=pi*y(3)^2*y(4)*y(6)*a(1)*exp(-a(4)/y(1));
qpr=a(2)*mc;
%qrad
qrad=pi*y(3)^2*a(5)*(a(6)^4-y(1)^4);
%qconv
qconv=2*a(7)*pi*y(3)*(y(1)-y(2));
%N
Vc=pi*a(16)^3/6;
n0=6*a(15)*y(5)/(pi*y(4)*(y(3)^3+a(15)*a(16)^3)); <