我必须在 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 和 ur 变为负数时,就会发生这种情况。有人可以向我解释这个问题吗?