Matlab fslove 求解非线性方程组 带参数 运行很慢 是什么原因呐还有超出迭代次数的问题

global  T A_k dk A_costheta dcostheta  askF 
T=1e-4;
dk=0.0001;
k=0:dk:60;
dcostheta=0.02;
costheta=-1:dcostheta:1;
A_k=kron(k,ones(length(costheta),1));
A_costheta=transpose(kron(costheta,ones(length(k),1)));


i_as=-0.5:0.1:2;

x0=[0.6746,0.3207];
for j=1:length(i_as)
    j
    askF=i_as(j);
    tic
    options=optimset('MaxFunEvals',1e4,'TolFun',1e-7,'MaxIter',1e4);
    [x,feval,ex]=fsolve(@myfc,x0,options);%fsolve(@myfc,250*ones(1,15));%fsolve(@myfc,x0,options);
    toc
    Delta(j)=abs(x(1));
    mu(j)=x(2);
    x0=x;
end
subplot(121)
   plot(i_as,Delta)
   hold on
   subplot(122)
   plot(i_as,mu)
   hold on
   
function Eqs=myfc(x)
global  T A_k dk A_costheta dcostheta   askF 
Delta=x(1);
mu=x(2);
g=0.5;
k_r=0;
epsilonk=(A_k.^2-mu).^2;
A=g^2;

B=(2*k_r*A_k.*A_costheta).^2;
D=Delta^2;
gamma=sqrt( epsilonk.*B+A.*epsilonk+A.*D )+1e-30;

Ek_positive=sqrt( epsilonk+B+A+D+2*gamma );
Ek_negative=sqrt( epsilonk+B+A+D-2*gamma );

ths1=tanh( Ek_positive/(2*T) );
ths2=tanh( Ek_negative/(2*T) );

hs2=(1+A./gamma).*ths1./Ek_positive+(1-A./gamma).*ths2./Ek_negative;
hs3=(1+(B+A)./gamma).*ths1./Ek_positive+(1-(B+A)./gamma).*ths2./Ek_negative;

Eq2=1/pi*sum(sum( 1-A_k.^2.*hs2./2 ))*dk*dcostheta+askF;
Eq3=(3/4)*sum(sum( A_k.^2.*( 1-(A_k.^2-mu).*hs3./2 ) ))*dk*dcostheta-1;

Eqs=100*T*[Eq2*Delta Eq3];

end

1、循环迭代次数过多:在每个参数i_as的循环中,您使用了默认的最大迭代次数1e4,这可能导致迭代过多,尤其是当方程组解收敛较慢时。可以尝试减少最大迭代次数,以加快代码运行速度。例如,将options中的MaxIter设置为较小的值,比如1000。2、问题的数值稳定性:由于方程中存在一些较小的数值,如1e-30,这可能会导致数值稳定性的问题。当使用sqrt函数时,较小的数值可能会引入误差。您可以尝试增加这些小数值的大小,例如将1e-30更改为较大的值,如1e-10。3、函数调用次数过多:在myfc函数中,您使用了嵌套循环来计算sum(sum(...)),这会导致函数调用次数过多,进而影响代码的运行速度。您可以尝试优化计算方式,避免多次调用sum函数。例如,可以使用矩阵运算来替代sum(sum(...))的计算。