最小二乘法的二次数据拟合
最小二乘法的二次数据拟合
专业班级: 信计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
六实验结果分析与小结:
优点:该种算法对于节点增加的情况同样实用。
缺点:本实验仅对二次多项式有效,而对于其他次数的多项式要在一定程度上改变程序。