昆明理工数值分析大作业最小二乘法.docx
《昆明理工数值分析大作业最小二乘法.docx》由会员分享,可在线阅读,更多相关《昆明理工数值分析大作业最小二乘法.docx(8页珍藏版)》请在冰豆网上搜索。
昆明理工数值分析大作业最小二乘法
数值分析实验报告
课题八曲线拟合的最小二乘法
一、问题提出
从随机的数据中找出其规律性,给出其近似表达式的问题,在生产实践和科学实验中大量存在,通常利用数据的最小二乘法求得拟合曲线。
在某冶炼过程中,根据统计数据的含碳量与时间关系,试求含碳量y与时间t的拟合曲线。
二、实验要求
t(分)
0
5
10
15
20
25
30
35
40
45
50
55
y(×10-4)
0
1.27
2.16
2.86
3.44
3.87
4.15
4.37
4.51
4.58
4.02
4.64
1、用最小二乘法进行曲线拟合;
2、近似解析表达式为ϕ(t)=a1t+a2t2+a3t3;
3、打印出拟合函数ϕ(t),并打印出ϕ(tj)与y(tj)的误差,j=1,2,",12;
4、另外选取一个近似表达式,尝试拟合效果的比较;
5、*绘制出曲线拟合图﹡。
三、实验目的
1、掌握曲线拟合的最小二乘法;
2、最小二乘法亦可用于解超定线代数方程组;
3、探索拟合函数的选择与拟合精度间的关系。
四、实验原理——最小二乘法拟合
在函数的最佳平方逼近中f(x)∈[a,b],对已知函数f(x)的一组离散数据{(xi,yi),i=0,1,…m},yi=f(xi),求函数拟合S*(x),记误差δi=S*(xi)-yi
要求一个函数
与所给数据
的曲线拟合,这里
,要求一个函数
与所给数据
拟合,若记误差
,设
是
上线性无关函数族,在
中找一函数
使误差平方和
,(4.1)
这里
.(4.2)
这就是一般的最小二乘逼近,用几何语言说,就称为曲线拟合的最小二乘法。
用最小二乘法求拟合曲线时,首先要确定
的形式。
这不单纯是数学问题,还与所研究问题的运动规律及所得观测数据
有关;通常要从问题的运动规律或给定数据描图,确定
的形式,并通过实际计算选出较好的结果—这点将从下面的例题得到说明。
的一般表达式为(4.2)式表示的线性形式。
若
是
次多项式,
就是
次多项式。
为了使问题的提法更有一般性,通常在最小二乘法中
都考虑为加权平方和
(4.3)
这里
是
上的权函数,它表示不同点
处的数据比重不同,例如,
可表示在点
处重复观测的次数,用最小二乘法求拟合曲线的问题时,就是在形如(4.2)式的
中求一函数
,使(4.3)式取得最小。
它转化为求多元函数
(4.4)
的极小点
的问题。
由求多元函数极值的必要条件,有
五、实验设计和实验步骤
本实验利用最小二乘法和题目所给函数形式对所给数据进行拟合。
而后选用不同函数形式对所给数据进行拟合得到拟合数据和所给数据的相对误差。
而后在正交多项式函数组的基础上建立相对最佳基函数选择指标P并且记录了相对最佳拟合函数。
现将实验步骤陈述如下:
(1)建立正交多项式函数族建立的程序思路和拟合函数系数求解。
(2)编辑程序进行计算记录实验结果。
(3)对所得结果进行总结和分析,找出存在的问题,探索拟合函数的选择与拟合精度间的关系。
评价本次实验的结果。
六、编程思路
实验使用matlab工具编写了计算使用正交函数族φ=span(φ0(x),φ1(x)……φn(x))进行最小二乘法拟合的拟合函数各项系数的函数程序。
这是比较简单的。
并计算了其误差。
现将编程思路陈述如下:
一,按照不同和拟合多项式求拟合函数及其误差:
(1)利用已知条件生成相应正交多项式函数族φ=span(φ0(x),φ1(x)……φn(x))。
(2)求格拉姆矩阵(即求其对角线元素)
G=
(3)求(φk(x),f(x))
(4)对应除以相应格拉姆矩阵对角线元素得到拟合函数系数向量a.
(5)生成拟合函数绘图并且计算原来拟合数据中对应x点的函数值,求其误差。
(6)改变所选择拟合函数的类型进行拟合如上过程求其拟合函数误差及相应图像。
(4)探索拟合函数的选择与拟合精度间的关系。
利用已经建立的最小二乘法拟合函数来建立相应的最佳拟合函数寻找函数,是一个比价复杂的过程,这里我们仅仅使用上面的正交多项式生成的函数族φ=span(φ0(x),φ1(x)……φn(x))来寻找适宜的基函数值个数,通过误差是否达到某一个极值来反应其适宜度的变化情况,现将该程序的建立思路简述如下:
(1)利用拟合数据和拟合函数值的相对误差建立判断指标P,
(2)利用判断指标P随着基函数个数的变化找出拟合数据范围内的最大值,最小值和峰值。
(3)记录峰值处的拟合函数个数。
(4)在一定范围内画出判断指标P随基函数个数变化的函数图。
七、程序建立及实验结果
利用正交多项式求最小二乘法拟合函数:
functionw=zjdxsnh(n,x,y);
m=length(x);
mf=zeros(1,n);
mp=zeros(1,n);
P=ones(n,m);
aw=0;
af=zeros(1,n-2);
bf=zeros(1,n-2);
fori=1:
m;
aw=x(i)+aw;
end
af
(1)=aw/m;
fori=1:
m
P(2,i)=x(i)-af
(1);
end
fori=3:
n;
d=i-2;
sump1=sum(P(i-1,:
).^2);
sump2=sum(P(i-2,:
).^2);
sump3=sum((P(i-1).^2).*x);
af(i-1)=sump3/sump1;
bf(i-2)=sump1/sump2;
P(i,:
)=x.*P(i-1,:
)-af(i-1)*P(i-1,:
)-bf(i-2)*P(i-2,:
);
end
forj=1:
n;
fork=1:
m;
mf(j)=mf(j)+P(j,k)^2;
mp(j)=mp(j)+P(j,k)*y(k);
end
end
%正交多项式的系数计算
A=zeros(n,n+2);
A(:
3)=1;
A(2,4)=af
(1);
A(:
1)=zeros();
A(:
2)=zeros();
fori=3:
n;
d=i-1;
forj=4:
(n+2);
A(i,j)=A(i-1,j-1)-af(i-2)*A(i-1,j)-bf(i-2)*A(i-2,j-2);
end
end
%最终系数计算
AY=zeros(1,n);
a=mp./mf;
AX=zeros(n,n+2);
forz=1:
n
AX(z,:
)=a(z)*A(z,:
);
end
forb=1:
n;
fort=1:
b;
AY(b)=AX(n-t+1,b+3-t)+AY(b);
end
end
w=AY;
由于使用的是课本上的正交多项式进行拟合,其系数的计算会带来巨大的误差,故最终的拟合多项式和原来的拟合数据发生了很大误差,这说明利用以上这一思路和实验设计来求解题目是不适合的。
即:
采用生成多项式的方法和思路去寻找最小二乘法拟合是不合理的。
至于后面探索精度和拟合多项式类型之间关系的工作至此无法做起!
由此本实验转换思路利用matlab强大的拟合功能来进行:
所使用的代码如下:
x=[0510152025303540455055];
y=[01.272.162.863.443.874.154.374.514.58
4.024.64];
plot(x,y,'*');
holdon
p=polyfit(x,y,n);
xx=0:
1:
55;
yy=polyval(p,xx);
plot(xx,yy);
分别采用5次多项式,4次多项式和3次多项式所得拟合曲线如下:
5次,
4次,
3次,
下面是误差反应的图形:
五次:
四次:
三次:
对比拟合曲线得知采用五次多项式来拟合曲线其趋势相对较符合。
七、实验结果分析
本次实验尝试采用自编程序的方法来进行相应的最小二乘法拟合及探索工作,但是由于选取的方法不当带来了巨大误差导致了实验的失败,最终采用已经有的成熟技术得到了实验结果。