使用Matlab在pdepe的BC函数中使用Fzero

时间:2013-10-23 21:37:07

标签: matlab

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

0 个答案:

没有答案