离散数据拟合模型
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
辽宁工程技术大学上机实验报告
>> title('拟合美国人口数据-指数增长型')
>> legend('拟合数据')
程序调用:
>> r r = 0.0212
>> sse sse = 1.7418e+004
(2)取定t0=1790,拟合待定参数x0和r;
程序代码:
>> p=(r,t)r(2).*exp(r(1).*(t-1790));
>> t=1790:10:2000;
>> c=[3.9,5.3,7.2,9.6,12.9,17.1,23.2,31.4,38.6,
50.2,62.9,76.0,92.0,106.5,123.2,131.7,150.7,179.3,204.0,226.5,251.4,281.4]; >> r0=[0.0359,3.9];
>> r=nlinfit(t,c,p,r0);
>> sse=sum((c-p(r,t)).^2);
>> plot(t,c,'b*',1790:1:2000,p(r,1790:1:2000),'b')
>> axis([1790,2000,0,290])
>> xlabel('年份'),ylabel('人口(单位:百万)')
>> title('拟合美国人口数据-指数增长型')
>> legend('拟合数据')
程序调用:
>> r r =0.0142 14.9940
>> sse sse = 2.2639e+003
(3)拟合待定参数t0,x0和r.要求写出程序,给出拟合参数和误差平方和的计算结果,并展示误差平方和最小的拟合效果图.
程序代码:
>> p=(r,t)r(2).*exp(r(1).*(t-1790+1.*r(3)));
>> t=1790:10:2000;
>> c=[3.9,5.3,7.2,9.6,12.9,17.1,23.2,31.4,38.6,
50.2,62.9,76.0,92.0,106.5,123.2,131.7,150.7,179.3,204.0,226.5,251.4,281.4]; >> r0=[0.0359,3.9,1];
>> [r,x]=nlinfit(t,c,p,r0);
>> sse=sum((c-p(r,t)).^2);
>> a=1790+1.*r(3);
>> subplot(2,1,1)
>> plot(t,c,'b*',1790:1:2000,p(r,1790:1:2000),'b')
>> axis([1790,2000,0,290])
>> xlabel('年份'),ylabel('人口(单位:百万)')
>> title('拟合美国人口数据-指数增长型')
>> legend('拟合数据')
>> subplot(2,1,2)
>> plot(t,x,'k+',[1790:2000],[0,0],'k')
>> axis([1790,2000,-20,20])
>> xlabel('年份'),ylabel('人口(单位:百万)')
>> title('拟合误差')
程序调用:
>> r r = 0.0142 7.3264 50.3522
>> x x =
Columns 1 through 5 -11.0940 -11.9857 -12.7277 -13.3735 -13.5848
Columns 6 through 10 -13.4328 -11.9995 -9.1795 -8.1818 -3.7321
Columns 11 through 15 0.7248 4.3218 9.3664 11.2364 13.3761
Columns 16 through 20 5.0903 4.7390 11.0299 10.0111 2.8613
Columns 21 through 22 -6.4202 -15.8260
>> sse sse = 2.2639e+003
>> a a = 1.8404e+003
2、通过变量替换,可以将属于非线性模型的指数增长模型转化成线性模型,并用Matlab函数polyfit进行计算,请说明转化成线性模型的详细过程,然后写出程序,给出拟合参数和误差平方和的计算结果,并展示拟合效果图.
非线性模型的指数增长模型转化成线性模型
程序代码:
>> t=1790:10:2000;
>>c=[3.9,5.3,7.2,9.6,12.9,17.1,23.2,31.4,38.6,50.2,62.9,76.0,92.0,106.5,123.2,131.7, 150.7,179.3,204.0,226.5,251.4,281.4];
>> [p,s]=polyfit(t-1790,log(c),1)
>>b1=p(1)
>>b2=exp(p(2))
>>subplot(2,1,1)
>>plot(t,c,'r*',t,exp(polyval(p,t-1790)),'r')
>>axis([1790,2000,0,290])
>>xlabel('年份'),ylabel('人口(单位:百万)')
>>title('拟合美国人口数据—指数增长型')
>>legend('拟合数据')
>>c1=(c-exp(polyval(p,t-1790))).^2
>>c2=sum(c1)
>>subplot(2,1,2)
>>plot(t,c1,'k+',[1790,2000],[0,0],'k')
>>axis([1790,2000,-20,20])
>>xlabel('年份'),ylabel('误差')
>>title('拟合误差')
程序调用:
p = 0.0202 1.7992
s = R: [2x2 double]
df: 20
normr: 1.1418