数据拟合两道题
1.拟合多项式。载入文件randomData.mat,这个文件中包括x和y两个变量。编写脚本对其做第一、第二、第三、第四和第五次多项式拟合。仿照下图,用蓝色的点绘制x和y的散点图,然后在同一坐标系下,用不同颜色绘制多项式拟合曲线,并在合适的位置加入标注(xlabel,ylabel,legend)。要想达到比较好的拟合效果,你可能会用到polyfit的中心和缩放版本(能够返回3个变量,详见help),以及与之相匹配的polyval(能够接收中心和缩放的变量)。最终图像应如下图所示:
figure(1); hold on; plot(x,y,'.k'); %第一次 [p1,s1,mu1]=polyfit(x,y,1); y1=polyval(p1,x,[],mu1); plot(x,y1); %第二次 [p2,s2,mu2]=polyfit(x,y,2); y2=polyval(p2,x,[],mu2); plot(x,y2,'c'); %第三次 [p3,s3,mu3]=polyfit(x,y,3); y3=polyval(p3,x,[],mu3); plot(x,y3,'g'); %第四次 [p4,s4,mu4]=polyfit(x,y,4); y4=polyval(p4,x,[],mu4); plot(x,y4,'y'); %第五次 [p5,s5,mu5]=polyfit(x,y,5); y5=polyval(p5,x,[],mu5); plot(x,y5,'r'); %设置标签与标题 xlabel('X'); ylabel('Y'); legend('Data','Oder1','Oder2','Oder3','Oder4','Oder5','Location','southeast'); title('Polynomial fits to noisy data');
1.经济增长模型
增加生产、发展经济所依靠的主要因素有增加投资、增加劳动力以及技术革新等,在研究国民经济产值与这些因素的数量关系时,由于技术水平不像资金、劳动力那样容易定量化,作为初步的模型,可认为技术水平不变,只讨论产值和资金、劳动力之间的关系。在科学技术发展不快时,如资本主义经济发展的前期,这种模型是有意义的。
用Q,K,L分别表示产值、资金、劳动力,要寻求的数量关系Q(K,L)。经过简化假设与分析,在经济学中,推导出一个著名的Cobb-Douglas生产函数:
Q(K,L) = aKαLβ,0<α,β<1(*)
式中α,β,a要由经济统计数据确定。现有美国马萨诸塞州1900—1926年上述三个经济指数的统计数据,如下表,试用数据拟合的方法,求出式(*)中的参数α,β,a。
表1
t Q K L | t Q K L |
1900 1.05 1.04 1.05 1901 1.18 1.06 1.08 1902 1.29 1.16 1.18 1903 1.30 1.22 1.22 1904 1.30 1.27 1.17 1905 1.42 1.37 1.30 1906 1.50 1.44 1.39 1907 1.52 1.53 1.47 1908 1.46 1.57 1.31 1909 1.60 2.05 1.43 1910 1.69 2.51 1.58 1911 1.81 2.63 1.59 1912 1.93 2.74 1.66 1913 1.95 2.82 1.68 | 1914 2.01 3.24 1.65 1915 2.00 3.24 1.62 1916 2.09 3.61 1.86 1917 1.96 4.10 1.93 1918 2.20 4.36 1.96 1919 2.12 4.77 1.95 1920 2.16 4.75 1.90 1921 2.08 4.54 1.58 1922 2.24 4.54 1.67 1923 2.56 4.58 1.82 1924 2.34 4.58 1.60 1925 2.45 4.58 1.61 19262.58 4.54 1.64 |
提示:由于(*)式关于参数α,β,a是非线性的,因此,可以有两种方式进行拟合,一是直接使用MATLAB软件中的曲线或曲面拟合命令。另一个是将非线性函数转化成线性函数的形式,使用线性拟合。
Q=[1.05 ,1.18, 1.29, 1.30, 1.30, 1.42, 1.50, 1.52, 1.46, 1.60, 1.69, 1.81, 1.93, 1.95, 2.01, 2.00, 2.09, 1.96, 2.20, 2.12, 2.16, 2.08, 2.24, 2.56, 2.34 ,2.45, 2.58]; K=[1.04 ,1.06,1.16, 1.22, 1.27, 1.37, 1.44, 1.53, 1.57, 2.05, 2.51, 2.63, 2.74, 2.82, 3.24, 3.24, 3.61, 4.10, 4.36, 4.77, 4.75, 4.54, 4.54, 4.58, 4.58, 4.58 ,4.54]; L=[1.05 ,1.08, 1.18, 1.22, 1.17, 1.30, 1.39 ,1.47, 1.31, 1.43, 1.58, 1.59, 1.66, 1.68, 1.65, 1.62, 1.86, 1.93, 1.96, 1.95, 1.90, 1.58, 1.67, 1.82 ,1.60 ,1.61 ,1.64]; K1=log(K); L1=log(L); Q1=log(Q); x=[K;L]; x1=[K1;L1]; %fun=inline('a(1).*(x(1,:).^a(2)).*(x(2,:).^a(3))','a','x'); fun1=inline('log(a(1))+(x1(1,:).*a(2))+(x1(2,:).*a(3))','a','x1'); %a=lsqcurvefit(fun,[1.22,0.5,0.1],x,Q); a1=lsqcurvefit(fun1,[1.22,0.5,0.1],x1,Q1);
运行结果:
则α=1.1766 ;β=0.4153;a=0.0619。
为了使得拟合更加直观,我们绘制了拟合后的函数图形,以下是代码外加运行结果:
Q=[1.05 ,1.18, 1.29, 1.30, 1.30, 1.42, 1.50, 1.52, 1.46, 1.60, 1.69, 1.81, 1.93, 1.95, 2.01, 2.00, 2.09, 1.96, 2.20, 2.12, 2.16, 2.08, 2.24, 2.56, 2.34 ,2.45, 2.58]; K=[1.04 ,1.06,1.16, 1.22, 1.27, 1.37, 1.44, 1.53, 1.57, 2.05, 2.51, 2.63, 2.74, 2.82, 3.24, 3.24, 3.61, 4.10, 4.36, 4.77, 4.75, 4.54, 4.54, 4.58, 4.58, 4.58 ,4.54]; L=[1.05 ,1.08, 1.18, 1.22, 1.17, 1.30, 1.39 ,1.47, 1.31, 1.43, 1.58, 1.59, 1.66, 1.68, 1.65, 1.62, 1.86, 1.93, 1.96, 1.95, 1.90, 1.58, 1.67, 1.82 ,1.60 ,1.61 ,1.64]; k=0:0.1:3; l=k; [m,n]=meshgrid(k,l); q=a1(1)*(m.^a1(2)).*(n.^a1(3)); mesh(m,n,q);
运行图像: