[問題] ode求助 跑不動?
初始值超過10e6就會出現錯誤
Warning: Failure at t=1.875546e+000. Unable to meet integration tolerances
withoutreducing the step size below the smallest value allowed (3.552714e-015)
at time t.
請問是在設定上有問題嗎? 或是需要調整那些地方呢?
感謝
========code==========================================================
function odeM0i
a0in=1.9908;
b0in=-0.3497;
c0in=-0.0148;
d0in=0.0253;
e0in=0.0191;
f0in=-0.0289;
%===================================
a0if=7.9594;
b0if=-0.9274;
c0if=0.6189;
d0if=0.0175;
e0if=0.0258;
f0if=-0.0362;
%============================
T=298; % K
%N=; %
aDp=-5.4926;
bDp=-163.7729;
cDp=0.0488;
thop=1.2e-3; % kg.m^-3
KB=1.38e-23; % J.K^-1
na=1.83e-5; % kg.s-1.m-1 (293K)
%sigma=2.463e19; % (298K)
%landaa=((2^(0.5))*pi*N*(sigma^2))^-1; % m
landaa=8e-8; % m
%M0i=1.35e5; % total #
M0j=3.12337e11; % total #
M2i=1.32e-5; % nm^3.cm^-3
M2j=3.92e-3; %
%m2i=M2i/M0i; % # of i
m2j=M2j/M0j; % # of j
ri=5.73e-9; % m
rj=5.94e-8; % m
%===================================================================
y0=[1.35e7 1.35e7 1.35e7];
tspan = [0:0.05:5];
[t,M] = ode45(@co,tspan,y0);
save coa_M_20.mat t M
function dMdt = co(t,M)
dMdt = zeros(3,1);
dMdt(1) = 4*pi*KB*T/6/pi/na*exp(aDp+(bDp/log(landaa)))*M(1)*M0j*ri*rj*...
exp(a0in+b0in*log(M2i/M(1))+c0in*log(m2j)+...
d0in*((log(M2i/M(1)))^2)+e0in*((log(m2j))^2)+f0in*log(M2i/M(1))*log(m2j));
dMdt(2) = ((6*KB*T/thop)^(1/2))*exp(aDp+(bDp/log(landaa)))*M(2)*M0j*ri*rj*...
exp(a0if+(b0if*log(M2i/M(2)))+c0if*(log(m2j))+d0if*(log(M2i/M(2)))^2+...
e0if*(log(m2j))^2+f0if*log(M2i/M(2))*log(m2j));
dMdt(3) = -(dMdt(1).*dMdt(2))./(dMdt(1)+dMdt(2));
end
end
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.66.253