实验题目用正交多项式做小二乘曲线拟合.docx
- 文档编号:26105687
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:17
- 大小:97.40KB
实验题目用正交多项式做小二乘曲线拟合.docx
《实验题目用正交多项式做小二乘曲线拟合.docx》由会员分享,可在线阅读,更多相关《实验题目用正交多项式做小二乘曲线拟合.docx(17页珍藏版)》请在冰豆网上搜索。
实验题目用正交多项式做小二乘曲线拟合
实验题目:
用正交多项式做小二乘曲线拟合
学生组号:
_6_完成日期:
2011/11/27
1实验目的
针对给定数据的煤自燃监测数据中煤温与O2,之间的非线性关系,用正交多项式做最小二乘曲线拟合。
2实验步骤
2.1算法原理
设给定n+l个数据点:
(血,)[),k=0,l,・・・,ii,则根据这些节点作一个m次的最
小二乘拟合多项式化(x)=偽+卧+0才+・・・+6?
』”=工°/‘①
7=0
其中,—般远小于n.。
若要构造一组次数不超过m的在给定点上正交的多项式函数系{。
‘切(j=0,
1,...,m)},则可以首先利用{g(a)(j=0,1m)}作为基函数作最小二乘
曲线的拟合,即p(X)=Qo(x)+q^Q(x)+...+qQ(x)②根据②式,其中的系数q.(j=o,1,...,m)为
f儿0(儿)
j=0,1八・・,m
k=OJ
将④代入③后展开就成一般的多项式。
构造给定点上的正交多项式2(X)(j=0,
1m)的递推公式如下:
0。
(归
迄⑴弋-久)④
0+1(x)=(x~a)Ql(x)-p.(x),j=1,2,•••,用-1
其中
刃2
—k=0J
d,
m—1
ar
d广丈2(Q'j=0‘I,…’m—l
k=0J
则实际计算过程中,根据⑤式逐步求出个正交多项式Q\x),并用公式④计算出q,并将每次计算展开后累加到拟合多项式①中。
2.2算法步骤
用三个向量B,T,s,存放多项式0,T(x),0,3,2,+1W的系数。
(1)构造Qq(x),设°o(x)=bo,根据④式,得bo=1。
再根据⑦®⑤式,计算:
do=n+1
n
Sy,
~d7
k=O
a°~~d7
最后将^020W项展开后累加到拟合多项式中,则q°bo=a。
(2)构造Q(x),设Q(Q=/o+/\x,根据递推公式④,则可知,仏=一Q。
,t=
io由公式⑦③⑤⑥求得,
d产丈03)
20
tykQSxk)
k=0
最后将展开累加到拟合多项式①中,有
Qo+qi。
*a。
⑶对于j=2,3,逐步递推Q(x)
根据递推公式④有
0(X)=(X-%T)0鬥(X)-0鬥Q,-2(X)
=(X■図J(匚tx~'+…•+Ax+?
o>0j_AbH£2+•+bm+bo)
Qj(x)=SjX+Sj-lXJ+……+51X+So
则可以得到计算5;(k=O,l,…J)的公式:
S产-OCj-W卩厂\bik=j-2,….,2,1
然后分别根据⑦式③式⑤式与⑥式计算卜•列屋:
d广丈05)
q厂土几Q'xjdj
“=工尢3)0(竝)a
再将q,QSx)项展开后累加到拟合多项式①中,即有
ak+QjSk=>QjJ,…•丄°
QjSj^aj
最后,,为了便于循坏使用向量BT,与S,应将向量T传递给E,向量S传递送给T,即tk=>bk»k=j-l,…,1,0
mk=j,…,1,0
在实际计算中,为了防止运算溢出,将兀,用Xk~X来代替,其中
Jt=o
在这种情况下,拟合多项式的形式为
_2/w
pmM=a0+al(x-x)+a2(x—兀)+…+am(x—兀)
2.3程序流程图
灼卜二>
c=t/d2;p=g/d2;q=d2/dlL;
dl=d2;3[j]=c-s[j];1[J]=4jl;
d2+=q*qx-»-=v[i]*q;
2[k]4=c"(町;t>[k]=t[k];t[k]=s[k];
K=j-l;k>=O;k-
dt(O)=O.O;dt[l]=a.O;dt[2]=0.0
q=q*(x[i]-zl*s[k]
i=0;i q=a[ml] K=m-2;k>=0;k- q=ak]+q*(xil-z); p=q-vi'i; 3实验结果分析 温度数据: 51.1 52.8 54.8 57.258.3 62.7 65.2 67.7 70.673.575.77&6 80.8 84.8 87.8 89.592.1 96.4 103.1 112.5 120.8134.7 152.4159.1 氧气数据: 20.13 19.9 19.61 18.9819.61 19.32 19.73 19.5919.38 20.1819.9819.58 19.74 19.26 ;19.5918.77 18.66 17.47 17.01 16.3315.95 13.765.915.43 氮气数据: 79.579.6779.5980.248080.3179.3580.180.3779.779.7880.15 8080.4680.0980.980.9982.0682.3383.0283.3184.8490.8593.96 实验结果: 1- ■正交多项式拟合 输出温度数据: 51.100000 52・800000 54.800000 5? ・200000 58・300000 62.700000 65.200000 67.700000 70.600000 73.500000 75.700000 78.600000 80.800000 84.800000 87.800000 89.500000 92.100000 96.400000 103.100000 112.500000 120.800000 输出氧气数据: 134.700000 152.400000 159.100000 20.130000 仅900000 19.610000 18・980000 19.610000 19.320000 19.730000 19.590000 19.380000 20.180000 19.980000 19.580000 19.740000 19.260000 19.590000 18.770000 18.660000 17.470000 17.010000 16.330000 15.950060 a<0>=19.060178a 13・760000 5.910000 5.430000 3>=-0.000010 dt dt<1>=10.859434dt<2>=1.385219 输出氧气与温度拟合的正交多项式: 输岀温度数据: 51.100000 52.800000 54.800000 57.200000 58.300000 62.700000 65.200000 6? ・700000 70.600000 73.500000 75.700000 78.600000 80.800000 84.S00000 87.S00000 89.500000 92.100000 96・400000 103.100000 112.500000 120.800000 134・700000 152.400000 159.100000 输出氮气数据, 79.500000 79・670000 79.590000 80.240000 80・000000 80.310000 79.350000 80.130000 80.370000 79.700000 79.780000 80.150000 80・000000 80.460000 80・090000 80.900000 80.990000 82.060000 82.330000 83.020000 83.310008 a<0>=80.628611a<1)=0.038346 a<2>=0・000776 a<3>=0・0000丄6 84.840008 90.850008 93.960008 dtC0>=5.624939 dt<1>=9.117542dt<2>=1 .167073 输出氮气与温度拟合的正交多项式: y 76>* Pressanykeytocontinue 注: dt(0)为误差的平方和,dt⑴为误差的绝对值之和,dt (2)误差绝对值最人值。 氧气与温度的拟合曲线: 20 *拟合点 ——三次拟合- 18 16 14 12 10 8 6 440 60 80 氮气与温度的拟合曲线: 1 100 120 140 160 实验结论 这次实验我们的拟合曲线是选择三次拟合曲线,虽说更高次的拟合曲线可以达到更好的效果,但是由于在计算机计算的过程中舍入误差的存在,使得次数高的项系数为零。 由于数据是观测得来,而我们的误差最人不超过1.4,所以误差在允许范閑内,故从误差以及各方面的考虑,我们最终选择三次来拟合曲线。 为了能够达到视觉上的效果,我们在实验结果处附上了用matlab所拟合得到的曲线,从图中可以看出,随着温度的不断增加氧气的含屋在降低,且降低率随温度的增加而增加,但是对于氮气却是随着温度的增加而增加,且增加率随温度的增加而增加。 由于温度的不断增加,经过一定的化学变换,放出氮气,同时消耗氧气,而且在温度相对高时(在一定的温度范围内),其化学反应的速率快,这就是对上述结果的一个解释。 5问题归纳与总结 在本次试验中,组员在分析问题的过程中主要遇到了一下几方面的问题,下面一一表述并给出解决办法。 问题一: 0,分别Q,(x)之间的关系 解决办法: 观察公式,找出关系,将公式分解,分步求出分子分母,将分母用d广丈0(竝) 表示。 问题2: Q(X)的迭代问题 解决办法: 分别用三个向量E,T,S分别存在0/t⑴,QSX),0鬥⑴的系数,用 tk=>brsk=>tr依次迭代 问题3: 系数拟合问题 解决办法: 将上一次正交多项式次数相等的对应系数加到卞一次的系数, 即: 久+乞$=>久,k=j-l,….,1,0 问题4: Q(x)的算法 解决方法: Q(Xk)是一个j次多项式,从j次到1次,递减乘x来增加次数,再加上 s[k]. Qj(兀)=(($/+$」+$』 Qj(兀)=((工X+5;-1X+Sj-2)x+57-3) Qj(x)=SjX^Sj-,X'+……+S1X+So 问题5: 溢出问题 解决方法: 由于给定温度数据过犬,次数大时会出现溢出,所以采用平移思想用X-X 来表示X,图像不变。 参考文献 李庆扬,王能超,易大义.数值分析.北京: 清华大学岀版社.200S 附录(源代码) #include"stdio.h" #include”math.h" doublespu(doublex[].doublev[].mtn.doublea[],iiitm.doubledt[]) intij,k; doublez,p,c,g,q,d1,d2,s[20],t[20],b[20];for(i=0;i<=m-l;i++)//系数的初始化a[i]=0.0; m=n; if m=20; z=0.0; for(i=0;i<=n-l;i++) z=z+x[i]/(1.0*n);//温度平均值 b[0]=1.0y/Q0(x)多项式系数dl=1.0*n; P=0.0; c=0.0; for(i=0;i<=n-l;i++) p=p+(x[i]-z);c=c+v[i]; } c=c/dl; p=p/dl; a[0]=c*b[0]; 〃构造Ql(x) t[l]=l・O; t[O]=-p; d2=0.0; c=0.0; g=0.0; for(i=0;i<=n-l;i++) { q=x[i]-z-p;d2=d2+q*q;c=c+y[i]*q; g=g+(x[i]-z)*q*q; }c=c/d2; p=g/d2; q=d2/dl; dl=d2; a[l]=c*t[l];a[O]=c*t[O]+a[O]; }for(j=2j<=m-l;j++)〃构造Qj(x) { s[j]=t|j-l];s[j-l]=-p*t[j-l]4-t[j-2];珂>=3) fbr(k=j-2;k>=l;k-) s[k]=-p*t[k]+t[k-l]-q*b[k]; s[O]=-p*t[O]-q*b[O];d2=0.0;c=0.0;g=0.0;fbr(i=O;i<=n-l;i++) { q=s[j]; fbr(k=j-l;k>=O;k-) q=q*(x[i]-z)+s[k]; d2=d2+q*q;c=c+y[i]*q;g=g+(x[i]-z)*q*q; } c=c/d2: p=g/d2;q=d2/d1; dl=d2; a[j]=c*s[j]; fbr(k=j-l;k>=O;k-) { a[k]=c*s[k]+a[k]; b[k]=t[k]; t[k]=s[k]; } 〃计算误差的平方和、误差的绝对值之和与误差绝对值的最人值 dt[O]=O.O; dt[l]=0.0;dt[2]=0.0; fbr(i=O;i<=n-l;i++) { q=a[m-l]; for(k=m-2;k>=0;k-) q=a[k]+q*(x[i]-z); p=q-yW; if(fabs(p)>dt[2]) dt[2]=fabs(p); dt[O]=dt[O]+p*p; dt[l]=dt[l]+fabs(p); } returnz; } voidmain() { inti; doublea[8],dt[3],z; doublex[24]={51.1,52.8,54.8,57.2,58.3,62.7,65.2,67.7,70.6,73.5,75.7,78.6,80.8//温度数据84・&87・8,89・乂92丄96・4」03丄112・5」20・&134・7,152・4,159・1}; doubleyl[24]={20.13J9.9J9.61J8.98,19.614932,19.73,19.59,1938,20.18,19.98//氧气数据 I9・58,19・74,19・26」9・59,18・77,18・66」7・47,17・0I」6・33」5・95,13・76,5・91,5・43}; doubley2[24]={79.5,79.67,79.59,80.24.80.80.31,79.35.80.13,80.37,79.7,79.78,80.15,80,80.46,80・09,80・9、80・99,82・06,82・33,83・02,83・31,84・84,90・85、93・96};//氮/[数据 pnntf("正交多项式拟合\n”); pmitf(”输出温度数据: \n”); fbr(i=0;i<=23;i++) pimtf("\n输出氧气数据: \n”); fbr(i=0;i<=23;i++) z=spir(x,vl,24,a,4,dt);〃函数的调用来求拟合函数系数、误差 pnntf(H\nM); for(i=0;i<=3;i-H-) pnntf(H\nM); for(i=0;i<=2;i-H-) prmtf(ndt(%2d)=%lff\i,dt[i]);//误差的输出 pmitf(”输出氧气与温度拟合的正交多项式: \n\n”);pnntf(Mp(x)=%lf\a[O]); for(i=l;i<=3;i-H-) pnntf(”+(%lf)*(x・%lf)A%d”Q[i],z,i); pnntf(H\n\QM); printf(”输出温度数据: \n“); for(i=0;i<=23;i++) pimtf("\n输出氮气数据: \n”); for(i=0;i<=23;i++) pnntff%lf\L,y2[i]); z=spir(x,v2,24,a,4,dt);//函数的调用来求拟合函数系数、误差pnntf(H\nM); for(i=0;i<=3;i-H-)pimtf("a(%2d)=%lfn",i,a[i])y/函数系数的输出pnntf(H\nM); for(i=0;i<=2;i-H-) prmtf("dt(%2d)=%lf”,i,dt[i]);〃误差的输出 pnntf(”输出氮气与温度拟合的正交多项式: \n\n");piintf(Mv(x)=%lf\a[O]); for(i=l;i<=3;i-H-) pnntf(”+(%lf)*(x・%lf)A%d”Q[i],z,i); pnntf(H\nM);=8.06955?
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 题目 正交多项式 做小二乘 曲线拟合