我必须在Matlab中用pdepe解决一些抛物线PDE系统。 是不可能和安全在这样的Pdepe求解器中调用边界条件函数内的Fzero函数?
function [pl,ql,pr,qr] = pdex5bc(~,ul,~,ur,~)
kappa = nref*Dref*q/L;
jcell0 = 0;
k0 = 0.1;
options = optimset('Display','iter'); % show iterations
jcell = fzero(@curOc,k0,options); % Call solver
pl = [jcell0 ; -1/(2*epsilonp)*jcell0/kappa ; 3/(2*epsilonp)*jcell0/kappa ;...
jcell ; -1/(2*epsilonp)*jcell/kappa ; 3/(2*epsilonp)*jcell/kappa];
ql = [kappa ; 1 ; 1 ; kappa ; 1 ; 1];
pr = [0 ; -1/(2*epsilonp)*jcell0/kappa ; 3/(2*epsilonp)*jcell0/kappa ;...
0 ; -1/(2*epsilonp)*jcell/kappa ; 3/(2*epsilonp)*jcell/kappa];
qr = [1 ; 1 ; 1 ; 1 ; 1 ; 1];
function F = curOc(z)
deltaVint = (Rtco+Rext)*(Rp/(Rext+Rtco+Rp))*A*z*J0;
Eta = Pot+Vt/2*log(ur(2)/ur(3)^3)+Vt*log(ul(4)/Ncb)- deltaVint ;
F = z - (ur(5)/ur(2)*exp(beta*Eta/Vt)- ur(6)/ur(3)*exp(-(1-beta)*Eta/Vt));
end
end
让我揭露我的问题:当我执行此代码时,会发生以下错误:
*使用fzero时出错(第289行) FZERO无法继续,因为用户提供的function_handle ==> pdeDSSC_new8bis / pdex5bc / curOc 因以下错误而失败。 用户函数'pdeDSSC_new8bis / pdex5bc / curOc'返回了一个复数值 在20时评估; * FZERO无法继续。
在某些时候pdepe的集成,fsolve会返回一个复杂的根。当ul和你成为负片时会发生这种情况。 有人可以向我解释这个问题吗?