求助各位大神,用下面的程序做的参数拟合,拟合结果和图形都不对,希望大神们帮帮忙,金币全送。谢谢
function fit_nonl12
clear all;clc
format long
data=[ 2561.0000 10.0000
2560.0000 15.0000
2560.0000 25.0000
2558.0000 40.0000
2557.0000 60.0000
2556.0000 100.0000
2555.0000 160.0000
2554.0000 250.0000
2552.0000 400.0000
2551.0000 630.0000
2550.0000 1000.0000
];
xspan=data(:,2);
Texp=data(:,1);
k0=[2.0 30.0 6.0 0.5];
lb=[0.1 0.1 0.1 0.0];
ub=[10.0 100.0 20.0 1.0];
%
OPTIONS=optimset('MaxFunEvals',1000);
[k,resnorm,residual,exitflag,output,lambda,jacobian]=...
lsqnonlin(@ObjFunc,k0,lb,ub,OPTIONS,xspan,Texp);
ci=nlparci(k,residual,jacobian);
%residual;
fprintf('\n\n拟合结果;\n')
fprintf('\n\t参数 E1 = %.16f',k(1))
fprintf('\n\t参数 E2 = %.16f',k(2))
fprintf('\n\t参数 E3 = %.16f',k(3))
fprintf('\n\t参数 E4 = %.16f',k(4))
y=kineticsEqs(xspan,k);
R2=1-sum((Texp-y).^2)./sum((Texp-mean(y)).^2);
fprintf('\n\tR^2 = %.16f',R2);
figure
plot(xspan,kineticsEqs(xspan,k),'b',xspan,Texp,'or'),legend('计算值','实验值','Location','Best')
%
function f =ObjFunc(k,xspan,Texp)
f=kineticsEqs(xspan,k)-Texp;
function x1 =kineticsEqs(x,k)
E1=k(1);E2=k(2);E3=k(3);E4=k(4);
x1=E1+(((2.*pi.*E3).^(-E4)+x.^(E4).*cos(pi.*E4./2)).*E2.*(2.*pi.*E3).^(-E4))./(((2.*pi.*E3).^(-E4)+x.^(E4).*cos(pi.*E4./2)).^2+(x.*(E4).*sin(pi.*E4./2)).^2); |