%
matlab 非线性曲线拟合,polyfit & nlinfit &
lsqcurvefit & lsqnonlin;
%x0 初始向量
%p 表达式参数变量
xdata = [0.25 0.5 0.75 1 1.5 2 2.5 3 3.5 4 4.5 5 6 7 8 9 10 11 12
13 14 15 16];
ydata = [30 68 75 82 82 77 68 68 58 51 50 41 38 35 28 25 18 15 12
10 7 7 4];
figure(1);plot(xdata,ydata,'o');
%%
%(1):
polyfit(xdata,ydata,n);
%(2):
f=inline('函数表达式','p','xdata');
p=nlinfit(xdata,ydata,f,x0);
%(3)
M-file;
function f=fun(p,xdata)
f=g(p,xdata)
end
p=lsqcurvefit('fun', x0, xdata, ydata)
%(4)
M-file;
function f=fun(p,xdata,ydata)
xdata=[];
ydata=[];
f=g(p,xdata)-ydata
end
p= lsqnonlin('fun', x0)
%%
%@@@@@@@
%(1):
f1=inline('p1(1)*(exp(-p1(2)*xdata)-exp(-p1(3)*xdata))','p1','xdata');
x0=[114 0.18 2.01];
p1=nlinfit(xdata,ydata,f1,x0);
figure(1);hold
on;plot(xdata,p1(1)*(exp(-p1(2)*xdata)-exp(-p1(3)*xdata)),'r');
%%(1):
p2=lsqcurvefit('fun1',x0, xdata, ydata) ;
figure(1);hold
on;plot(xdata,p2(1)*(exp(-p2(2)*xdata)-exp(-p2(3)*xdata)),'g')
%%(2):
p3=lsqnonlin('fun2',x0) ;
figure(1);hold
on;plot(xdata,p3(1)*(exp(-p3(2)*xdata)-exp(-p3(3)*xdata)),'m')
%%
%总结,效果基本一致;inlinfit对初值很敏感!
%@@@@@@
function f1=fun1(p2,xdata)
f1=p2(1)*(exp(-p2(2)*xdata)-exp(-p2(3)*xdata))
end
%@@@@@
function f=fun2(p3,xdata,ydata)
xdata = [0.25 0.5 0.75 1 1.5 2 2.5 3 3.5 4 4.5 5 6 7 8 9 10 11 12
13 14 15 16];
ydata = [30 68 75 82 82 77 68 68 58 51 50 41 38 35 28 25 18 15 12
10 7 7 4];
f=p3(1)*(exp(-p3(2)*xdata)-exp(-p3(3)*xdata))-ydata
end