对已知数据点进行拟合,前面是主程序,后面是函数程序,使用lsqcurvefit函数运行后一直显示在忙,求解答
clear all;clc;
u = [0.01 0.01624 0.02637 0.04281 0.06952 0.11288 0.1833 0.29764 0.48329 0.78476 1.27427 2.06914 3.35982 5.45559 8.85867 14.3845 23.35721 37.9269 61.58482 100];
y = [13.58386 13.4539 13.25364 12.95355 12.52104 11.92882 11.16686 10.25189 9.22731 8.15198 7.08481 6.07291 5.14694 4.32206 3.6017 2.9818 2.45422 2.00915 1.63647 1.32654];
figure;
plot(u,y,'*');
hold on;
b=[5E-13 5E-16];
lb=[5E-21 6E-21];
ub=[2E-3 5E-3];
options = optimoptions('lsqcurvefit','TolFun',1e-9,'TolX',1e-12,'MaxFunEvals',400);
[p]=lsqcurvefit(@func2,b,u,y,lb,ub,options);
y_est=func2(p,u);
plot(u,y_est,'r','linewidth',2);
function nihe=func2(b,x)
k4=b(1);
k5=b(2);
syms n1 n2 n3 n4;
u_all=x;
for i=1:length(u_all)
syms n1 n2 n3 n4;
eq1=(3.2E7+3.1E7)*n1==5.6E3*n2-k4*n1*n2+0.25*k5*n2^2+u_all(i)/(4*(1.5E-3*1.6E-19));
eq2=3.1E7*n1==(5.6E3+8.2E2)*n2+1.25*k5*n2^2-3*u_all(i)/(4*1.5E-3*1.6E-19);
eq3=(3.2E7+3.1E7)*n3==5.6E3*n4+u_all(i)/(4*1.5E-3*1.6E-19);
eq4=3.1E7*n3==(5.6E3+8.2E2)*n4-3*u_all(i)/(4*1.5E-3*1.6E-19);
eqs1=[eq1,eq2];
eqs2=[eq3,eq4];
[n1,n2]=solve(eqs1);
[n3,n4]=solve(eqs2);
n1=double(n1);
n3=double(n3);
E(i)=13.804.*n1(1)./n3;
E1(i)=abs(E(i));
clear n1 n2 n3 n4
end
nihe=E1;