- 1、本文档共3页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
两种算法求的三次最正确平方逼近多项式
摘要
对于一个较复杂的函数,往往需要求一个简单多项式来逼近。本文选取两种基函数,用两种算法计算一个函数在上的三次最正确平方逼近多项式及其逼近误差,然后应用matlab进行计算作图并比照两种方法的逼近结果。
关键字:三次最正确平方逼近两种算法
引言
多项式的一个重要应用就是可以用来逼近一个区间上的连续函数,往往许多复杂的函数需要用各种方法来进行多项式逼近。本文参考矩阵理论讲义对函数在上进行三次最正确平方逼近,求其逼近误差,并在matlab中编程计算和绘图以验证和比拟逼近结果的准确性。
求最正确平方逼近的多项式
,求三次的最正确平方逼近多项式〔内积中的权函数〕。用两种算法实现,一是设,二是设为,其中是勒让德多项式。
第一种算法:
,由矩阵形式
(1)根据上内积定义
(2)
其中权函数,在上计算得解得待定系数,,,。即
(4)
误差(5)
第二种算法:
,其中是勒让德多项式,其表达式为:
(6)
勒让德正交多项式有如下递推关系,,
可得,
求得结果,误差为0.3020。
算例分析
在matlab中编程计算〔程序见附录〕,第一种方法的结果为
f=@(x)exp(x).*sin(x);
[P,error]=polyappro(f,0,pi/2)
得到结果:
P=
-0.07081.57650.76580.0201
error=
0.0100
可以看到
A=
[pi^7/896,pi^6/384,pi^5/160,pi^4/64]
[pi^6/384,pi^5/160,pi^4/64,pi^3/24]
[pi^5/160,pi^4/64,pi^3/24,pi^2/8]
[pi^4/64,pi^3/24,pi^2/8,pi/2]
B=
(exp(pi/2)*(pi^3-12*pi+24))/16
(exp(pi/2)*(pi/2-1)*(pi/2+1))/2+1/2
(pi*exp(pi/2))/4-1/2
exp(pi/2)/2+1/2
第二种方法,勒让德多项式逼近
f=inline(exp(x).*sin(x));
[Y,error]=LegendreApproximation(f,4)
得到结果:
error=
0.3020
结论
两种方法逼近的效果比拟,第一种基函数逼近的整体效果好,误差小,但是从图上可以看出局部细节不是很准确;而第二种勒让德多项式逼近的结果在前半局部非常好,但后边误差较大,总体误差大。
参考文献
[1]矩阵理论讲义〔矩阵论第二章〕,19-20.
附录
方法一:求内积
f=inline(sin(x).*exp(x),x);
fy0=quad(f,0,pi/2)
fy0=
2.9052
f=inline(sin(x).*exp(x).*x,x);
fy1=quad(f,0,pi/2)
fy1=
3.2781
f=inline(x.^2.*sin(x).*exp(x),x);
fy2=quad(f,0,pi/2)
fy2=
4.0294
f=inline(x.^3.*sin(x).*exp(x),x);
fy3=quad(f,0,pi/2)
fy3=
5.2035
最正确平方逼近函数:
function[poly,error]=polyappro(f,a,b)
symsx
P=[1,x,x.^2,x.^3];
%P=[1,x,1.5*x.^2-0.5,2.5*x.^3-1.5];
m=length(P);
fori=1:m
forj=1:m
A(i,j)=int(P(m-i+1).*P(m-j+1),a,b);
end
B(i)=int(f*P(m-i+1),a,b);
end
poly=A\B;
poly=sym2poly(poly);
xx=a:0.01:b;
yy=feval(f,xx);
ypoly=polyval(poly,xx);
polysym=poly2sym(poly);
delta=f-polysym;
error=sqrt(int(delta.*delta,a,b));
error=sym2poly(error);
plot(xx,yy,xx,ypoly,r-)
end
方法二:勒让德多项式
Function[Y,error]=LegendreApproximation(f,n)
xx=0:0.01:0.5*pi;
fval=feval(f,xx);
fori=1:n+1
w(i)=(2*(i-1)+1)/2*
文档评论(0)