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(...))的计算。