最小二乘法的二次数据拟合
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
最小二乘法的二次数据拟合
专业班级: 信计061 姓名:袁金龙 学号:156206012 一 实验目的
1.熟悉Mablab 编程;
2.学习最小二乘法及程序设计算法
二 实验题目:
最小二乘法求拟合数据的二次多项式
三 实验原理与理论基础
算法设计:
Ⅰ 由题意决定span(1,x,x^2,…),即决定拟合多项式.
Ⅱ 分别计算1
(,)(,)
n
i j i j m k k k k ==
∑
,1
(,)(,)
n
i i j m k y k y -
==
∑
.
Ⅲ 用(,)i j k k 组成方阵A,用(,)i k y -
组成矩阵B.
Ⅳ 利用A/B 求出该多项式的系数,再利用1
(())^2n
i i i f x y =-∑求出平方误差.
四 实验内容 (一)问题重述
给定数据点
(,)i j x y 如表所示。
(二)用matlab 编写M 文件如下:
function []=zuixiaoercinihe2(x,y) n=length(x); k00=0; for i=1:n
k00=k00+1; end k01=0; for i=1:n
k01=k01+x(i);
end
k02=0;
for i=1:n
k02=k02+x(i)*x(i);
end
k11=0;
for i=1:n
k11=k11+x(i)*x(i);
end
k12=0;
for i=1:n
k12=k12+x(i)*x(i)*x(i);
end
k22=0;
for i=1:n
k22=k22+x(i)*x(i)*x(i)*x(i);
end
k0y=0;
for i=1:n
k0y=k0y+y(i);
end
k1y=0;
for i=1:n
k1y=k1y+x(i)*y(i);
end
k2y=0;
for i=1:n
k2y=k2y+x(i)*x(i)*y(i);
end
A=[k00 k01 k02;k01 k11 k12;k02 k12 k22];
B=[k0y;k1y;k2y];
C=A\B;
p=C(1);
q=C(2);
r=C(3);
syms m;
'拟合的二次函数为:'
f=p+q*m+r*m*m
l=0;
for i=1:n
l=l+((p+q*x(i)+r*x(i)*x(i))-y(i))*((p+q*x(i)+r*x(i)*x(i))-y(i)); end
'该拟合函数的平方误差为:'
l
五实验结果
>> zuixiaoercinihe2(x,y)
ans =
拟合的二次函数为:
f =
1+m+9007199254740963/9007199254740992*m^2
ans =
该拟合函数的平方误差为:
l =
5.8178e-030
六实验结果分析与小结:
优点:该种算法对于节点增加的情况同样实用。
缺点:本实验仅对二次多项式有效,而对于其他次数的多项式要在一定程度上改变程序。