matlab人口预测及数据曲线拟合
数据插值 例如 4 用matlab软件进行数据拟合 (1)lsqcurvefit命令最小二乘拟合 a= lsqcurvefit(fun,x0,xdata,ydata) [a,resnorm]=lsqcurvefit(fun,x0,xdata,ydata) 是根据给定的数据xdata,ydata,按照函数文件fun给定的函数,以x0为初值做最小二乘拟合,返回函数中的系数向量a和残差平方和resnorm。 例 首先编写函数文件 function y=f(a,x) f=a(1)*exp(x)+a(2)*x.^2+a(3)*x.^3 保存为f.m,其次调用该函数 x=0:0.1:1; y=[3.1,3.27,3.81,4.5,5.18,6,7.05,8.56,9.69,11.25,13.17]; a0=[0 0 0]; [x,resnorm]=lsqcurvefit(@f,a0,x,y) 也可以用inline命令定义函数 x=0:0.1:1; y=[3.1,3.27,3.81,4.5,5.18,6,7.05,8.56,9.69,11.25,13.17]; f=inline('a(1)*exp(x)+a(2)*x.^2+a(3)*x.^3','a','x'); a0=[0 0 0]; [a,resnorm]=lsqcurvefit(f,a0,x,y) plot(x,y,'*') hold on g=a(1)*exp(x)+a(2)*x.^2+a(3)*x.^3; plot(x,g,'r-') 例如 clear;clc; x=0:0.1:1; y=[-0.447 1.978 3.28 6.16 7.08 7.34 7.66,9.56,9.48,9.3,11.2]; plot(x,y,'k.','markersize',25); axis([0 1.3 -2 16]); p3=polyfit(x,y,3) p6=polyfit(x,y,6) t=0:0.01:1.2; s=polyval(p3,t); s1=polyval(p6,t); hold on plot(t,s,'r-','linewidth',2); plot(t,s1,'b--','linewidth',2); grid 编写程序调用matlab命令 x=1949:5:1994; y=[541.67,602.66,672.09,704.99,806.71,908.59,975.42,1034.75,1106.76,1176.74]; plot(x,y,'r*','linewidth',2) grid f=inline('a(1)+a(2)*x','a','x'); a0=[0 5]; [a,resnorm]=lsqcurvefit(f,a0,x,y) hold on g=a(1)+a(2)*x; plot(x,g,'b-','linewidth',2) 或者调用M函数 function f=nihe(a,x) f=a(1)+a(2)*x; 保存成nihe.m,在新窗口编写程序 x=1949:5:1994; y=[541.67,602.66,672.09,704.99,806.71,908.59,975.42,1034.75,1106.76,1176.74]; a0=[10 10]; [a,resnorm]=lsqcurvefit(@nihe,a0,x,y) 也可以直接编写程序如下: clc;clf; x=1949:5:1994; y=[541.67,602.66,672.09,704.99,806.71,908.59,975.42,1034.75,1106.76,1176.74]; plot(x,y,'r*','linewidth',2) grid a11=10;a12=sum(x); a21=a12;a22=sum(x.^2); d1=sum(y);d2=sum(x.*y); A=[a11,a12;a21,a22]; D=[d1;d2]; ab=inv(A)*D plot(x,g,'b-','linewidth',2) t=1949:5:2010; g=ab(1)+ab(2)*t; hold on plot(t,g,'b-','linewidth',2) y2000=ab(1)+ab(2)*2000 y2005=ab(1)+ab(2)*2005 y2010=ab(1)+ab(2)*2010 axis([1945 2012 500 1450]) plot(2000,1295.3,'g*','linewidth',2) plot(2005,1306.28,'g*','linewidth',2) plot(2010,1370.5,'g*','linewidth'