| 
				 【求助】超越方程组的fsolve解法 
 
			
			我用matlab的fsolve函数求解三元超越方程组,但是得到的解和文献上不同,困扰几个月了,在其他的论坛也求助了,但是一直都找不到解决的办法,现在课题全卡住了,现将代码和公式附上,请高手帮忙看看,万分感谢!sx1,sx2,tc是未知数,在程序运行时部分解输出的exitflag<0。%%%%%%%%%%主程序%%%%%%%%%%%%%%%%%%%%%%
 clear all;clc;close all;
 global js;
 global q;
 Tc =[];
 Sx1=[];
 Sx2=[];
 %q_par  = [0.9];
 %q_par  = [1.065];
 q_par  = [2.0];
 js_par = 2.0:-0.1:0;
 n0= [ unifrnd(0,0.4)  unifrnd(0,0.4)  1.5];
 for q = q_par
 js = js_par(1);
 options=optimset('display','on');
 [n(1,:),fval,exitflag]=fsolve(@myfun,n0,options)
 for i = 2:length(js_par)
 js = js_par(i);
 [n(i,:),fval,exitflag]=fsolve(@myfun,n(i-1,:),options)
 end
 Tc = [Tc n(:,3)]
 Sx1=[Sx1 n(:,1)]
 Sx2=[Sx2 n(:,2)]
 end
 plot(Tc,js_par)
 str =[];
 for i=1:length(q_par)
 str = strvcat(str,num2str(q_par(i)));
 end
 legend(str,4);
 xlabel('Tc/Ja')
 ylabel('Js/Ja')
 %%%%%%%%%%%%%函数%%%%%%%%%%%%%%%%%%%
 function y=myfun(n)
 global js
 global q
 syms tc sx1 sx2
 je=1.0;
 qs=2.0;
 k=1.0;
 sx1=n(1);
 sx2=n(2);
 tc=n(3);
 w31=sqrt(qs^2+4*js*qs*sx1+je*q*sx2);
 w32=sqrt(q^2+4*q*sx2+je*qs*sx1+je*qs*sx1);
 y(1)=qs/(2*w31)*tanh(w31/(2*k*tc))-sx1;
 y(2)=q/(2*w32)*tanh(w32/(2*k*tc))-sx2;
 N=[2*w31*coth(w31/(2*k*tc))-4*js, -je, 0;
 -je, 2*w32*coth(w32/(2*k*tc))-4, -je;
 0, -je, 2*w31*coth(w31/(2*k*tc))-4*js];
 y(3)=det(N);
 |