9. 拟合形如
f(x)
a bx1 cx
的函数的一种快速的方法是将最小二乘法用于下列问题:
f(x)(1 cx) a bx
,使用这种方法拟合下表给出的人口数据
function [err,a,b,c]=nlfit(x,y)
if nargin<3 %判断输入变量个数
x=[1953 1964 1982 1990 2000]'; %输入数据 y=[5.82 6.95 10.08 11.34 12.66]'; end
c=fminsearch(@fitfun1,[0;0;0],optimset,x,y); %a,b,c都从0开始搜索 fprintf('The nonlinear least square fitting y=(a+bx)/(1+cx) for data\n\n'); fprintf('%6.1f ',x);
fprintf('\n'); %换行
fprintf('%6.1f ',y); %6位浮点数表示保留1位小数 fprintf('\n\n is\n\t y=(%7.4f +%7.4f x)/(1+%7.4f x) \n\n',c(1),c(2),c(3));
z=linspace(x(1),x(end),100); %x(1)至x(end)分隔100份,为了画出曲线 p=(c(1)+c(2)*z)./(1+c(3)*z); plot(x,y,'r+',z, p,'b-.');
function err=fitfun1(d,x,y) a=d(1); b=d(2); c=d(3);
err=y.*(1+c*x)-a-b*x; err=err'*err;