function [err,a,b,c]=nlfit(x,y)
if nargin<3 %判断输入变量个数 x=10*[190:199];
x=x'; %输入数据
y=[76.0 92.0 106.5 123.2 131.7 150.7 179.3 204.0 226.5 251.4]'; end
c=fminsearch(@fitfun2,[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); subplot(121)
plot(x,y,'r+',z, p,'b-.');
title('拟合的函数与原始数据二位坐标图像'); legend('原始数据','拟合函数图像'); %********************二点公式 for i=1:length(x)-1;
df1(i)=(y(i+1)-y(i))/(x(i+1)-x(i)) ; df1(i+1)=(y(i+1)-y(i))/(x(i+1)-x(i)) ; end
%********************三点公式
for j=1:length(x)-2;
df2(j)=(-3*y(j)+4*y(j+1)-y(j+2))/(2*10); df2(j+1)=(-y(j)+y(j+2))/(2*10);