马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
我用fsolve函数求解超越方程组,可以求解出数值解,但是得到的结果和文献上的结果是有一定差别的,不知道问题出现在那里,请高手帮忙看看,万分感谢!下附我的程序。
%%%%%%%%%%%%下面是mainprogram%%%%%%%%%%%%%%%%%%%%%%
clear all;clc;close all;
%load ('m1.dat')
global js;
global q;
Tc =[];
q_par = [0.9 1.28 2];
js_par = 2:-0.01:0.0;
n0 = [0.1 0.1 5.5];
for q = q_par
js = js_par(1);
n(1,:)=fsolve(@myfun1,n0,optimset('Display','off'));
for i = 2:length(js_par)
js = js_par(i);
n(i,:)=fsolve(@myfun,n(i-1,:),optimset('Display','off'));
end
Tc = [Tc n(:,3)]
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')
figure;
plot(Tc,js_par);
legend(str,4);
xlabel('Tc/Ja')
ylabel('Js/Ja')
%axis([0.08 2 0 2]);
%%%%%%%%%%%%以下是求解的超越方程组%%%%%%%%%%%%%%%%%%%%
function y=myfun(n)
global js
global q
syms t sx1 sx2
je=1.0;
qs=2.0;
k=1.0;
sx1=n(1);
sx2=n(2);
t=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*t))-sx1;
y(2)=q/(2*w32)*tanh(w32/(2*k*t))-sx2;
N=[2*w31*coth(w31/(2*k*t))-4*js, -je, 0;
-je, 2*w32*coth(w32/(2*k*t))-4, -je;
0, -je, 2*w31*coth(w31/(2*k*t))-4*js];
y(3)=det(N);
[ 本帖最后由 eight 于 2007-8-15 20:47 编辑 ] |