|
[ÇóÖú]
Matlab½âODE·½³Ì×é ³öÏÖsingular
Hi, ÎÒÐèÒªÇó½âÒ»¸öode·½³Ì×飬ĿǰÓõÄmatlabµÄode23s¡£µ«ÊÇÇó½â²»³öÀ´£¬Ëã³öµÚÒ»¸öÊýÖµºó£¬½â²»Á˵ڶþ²½£¬ÏÔʾ´íÎóÐÅÏ¢
"Unable to meet integration tolerances without reducing the step size below the smallest value allowed (3.552643e-19) at time t."
»òÕß
"Matrix is close to singular or badly scaled. Results may be inaccurate. Unable to meet integration tolerances without reducing the step size below the smallest value allowed (3.552643e-19) at time t."
ÄÜ·ñÂé·³´ó¼Ò°ïÎÒ¿´Ò»ÏÂÎÊÌâÔÚÄÄÀ·Ç³£¼«Æä¸Ðл£¡
Matlab³ÌÐòÈçÏ£º
global F R T e0 Z_Na Z_Cl Z_OH Z_H C_Na_A C_Cl_A C_OH_A C_H_A Cond_A i U_A E_A FixedCharge LA D_H D_OH e_r epsilon C_Na_A2 C_Cl_A2 C_H_A2 C_OH_A2
F=96485;
R=8.3144621;
T=25+273.15;
e0=8.85419/10^12;
Z_Na=1;
Z_Cl=-1;
Z_OH=-1;
Z_H=1;
%%% solution = 1 M NaCl + 0.1 M NaOH in the BULK
C_Na_A=1000+100;
C_Cl_A=1000+1e-10;
C_OH_A=100;
C_H_A=1e-10;
Cond_A=10.1;
i=1000;
U0=0;
E_A=i/Cond_A;
FixedCharge=2*1000;
LA=1E-4;
D_H=5.94/10^10;
D_OH=3.47/10^10;
e_r=20;
epsilon=e_r*e0;
U_A=-R*T/F*asinh(-FixedCharge/2/(C_Na_A+C_H_A))+U0;
C_Na_A2=C_Na_A*exp(-Z_Na*F/R/T*U_A);
C_Cl_A2=C_Cl_A*exp(-Z_Cl*F/R/T*U_A);
C_OH_A2=C_OH_A*exp(-Z_OH*F/R/T*U_A);
C_H_A2=C_H_A*exp(-Z_H*F/R/T*U_A);
%%%%%%%%%%%%%%%%%%%%
y0=[E_A;U_A;C_OH_A2];
[p Y]=ode23s(@odefun,linspace(-LA,0,10000),y0);
%%%%%%%%%%%%%%%%%%%%
·½³Ì×éfunctionÈçÏ£º
function [dydx]= odefun(x,y)
global F R T Z_Na Z_Cl Z_OH Z_H C_Na_A2 C_Cl_A2 i U_A FixedCharge D_OH epsilon D_H C_Na C_Cl
% y(1)=Electric field, y(2)=Electric potential, y(3)=OH- concentration
dydx=zeros(3,1);
C_Na=C_Na_A2*exp(-Z_Na*F/R/T.*(y(2)-U_A));
C_Cl=C_Cl_A2*exp(-Z_Cl*F/R/T.*(y(2)-U_A));
dydx(1)=(F/epsilon)*(C_Na-C_Cl+10^(-8)./y(3)-y(3)+FixedCharge);
dydx(2)=-y(1);
J_H=-D_H*(-10^(-8)./(y(3)^2)*dydx(3)+Z_H*F/R/T*10^(-8)./y(3).*dydx(2));
dydx(3)=-((i/F-Z_H*J_H)/Z_OH/D_OH)-Z_OH*F/R/T.*y(3).*dydx(2);
end |
|