ode45达到MATLAB最大递归极限
以下代码将无法正常运行,因为ode45正在达到其最大递归限制。有人知道原因吗?我对matlab很陌生ode45达到MATLAB最大递归极限,matlab,recursion,Matlab,Recursion,以下代码将无法正常运行,因为ode45正在达到其最大递归限制。有人知道原因吗?我对matlab很陌生 function hw8 = HW8(~,t,x) x = [0,0] Tbar = [294.4266 429.9139 582.6765] CAbar = [.9422 .7661 .5675] DHp=-1000; k0tau=10.; Ep=1500; Chi=0.3; Tc=250; Cai=0; Ca=x(1); T=x(2); r=k0tau*exp(-Ep/T)*Ca; d
function hw8 = HW8(~,t,x)
x = [0,0]
Tbar = [294.4266 429.9139 582.6765]
CAbar = [.9422 .7661 .5675]
DHp=-1000;
k0tau=10.;
Ep=1500;
Chi=0.3;
Tc=250;
Cai=0;
Ca=x(1);
T=x(2);
r=k0tau*exp(-Ep/T)*Ca;
dCa = (Cai-Ca)-r;
dT = -(1+Chi)*(T-Tc)+DHp*r;
hw8 = [dCa;dT]
[t,x] = ode45(HW8,[0 1],[.1 250])
由于将
HW8
作为ode45
的参数之一,因此在执行ode45
之前调用该函数并创建无限递归:
HW8
ode45
的第一个参数是对HW8
HW8
ode45
的第一个参数是对HW8
HW8
ode45
的第一个参数。。。(无限)ode45
。但在这种情况下不是这样,因为它是一个无限递归,不会被检测到
解决方案是将调用ode45
的函数与计算赋予ode45
的右侧句柄的函数分开:
function [t,x] = HW8()
[t,x] = ode45(@(t,x) rhs(t,x),[0 1],[.1 250]);
end
function dxdt = rhs(~,x)
Tbar = [294.4266 429.9139 582.6765];
CAbar = [.9422 .7661 .5675];
DHp=-1000;
k0tau=10.;
Ep=1500;
Chi=0.3;
Tc=250;
Cai=0;
Ca=x(1);
T=x(2);
r=k0tau*exp(-Ep/T)*Ca;
dCa = (Cai-Ca)-r;
dT = -(1+Chi)*(T-Tc)+DHp*r;
dxdt = [dCa;dT];
end