矩阵理论作业6:两种算法求三次最佳平方逼近多项式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
两种算法求()f x 的三次最佳平方逼近多项式
摘 要
对于一个较复杂的函数,往往需要求一个简单多项式来逼近。本文选取两种基函数,用两种算法计算一个函数()=exp()sin()f x x x ⋅在[0,]2x π∈上的三次最佳平方逼近多项式及其逼近误差,然后应
用matlab 进行计算作图并对比两种方法的逼近结果。
关键字:三次 最佳平方 逼近 两种算法
引言
多项式的一个重要应用就是可以用来逼近一个区间上的连续函数,往往许多复杂的函数需要用各种方法来进行多项式逼近。本文参考矩阵理论讲义
[1]
对函数()=e x p
()s i n (f x x x ⋅在[0,]2
x π
∈上进行三次最佳平方逼近,求其逼近
误差,并在matlab 中编程计算和绘图以验证和比较逼近结果的准确性。
求最佳平方逼近的多项式
()=exp()sin()f x x x ⋅,[0,]2
x π
∈求三次的
最佳平方逼近多项式(内积中的权函数()=1x ρ)。
用两种算法实现,一是设{}
23
=1,,,span x x x Φ,
二是设为{}0123=(),(),(),()L x L x L x L x Φ,其中
(),0,1,2,3i L x i =是勒让德多项式。
第一种算法:
{}23=1,,,span x x x Φ,由矩阵形式
(1)
根据[,]C a b 上内积定义
((),())()()()b
a
f x
g x x f x g x dx
ρ=⎰
(2)
其中权函数
()=1x ρ,在[0,]2
x π
∈上计算得
23402345
1345624567
3 2.9052/2/8/24/6
4 3.2781/8/24/64/160 4.0294/24/64/160/384 5.2035/64/160/384/896a a a a ππππππππππππππππ⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦
⎣⎦⎣⎦(3)解得待定系数00.0201a =,10.7658a =,
2 1.5765a =,20.0708a =-。即
23()0.02010.7658 1.57650.0708x x x x ϕ=++- (4)
误差2()0.0100x δ (5)
第二种算法:
{}0123=(),(),(),()L x L x L x L x Φ,其中
(),0,1,i L x i
=是勒让德多项式,其表达式为:
21()[(1)],0,1,2,,2!i
i i i i
d L x x i n i dx
=-= (6) 勒让德正交多项式有如下递推关系
0()1L x =,1()L x x =,
()
1121()()(),1,,,111
72i i i i i
L x xL x L x i n i i +-+=-=-++ 可得2231()22L x x =
-,3353
()22
L x x x =- 求得结果,误差为0.3020。
算例分析
在matlab 中编程计算(程序见附录),第一种方法的结果为 >>f=@(x)exp(x).*sin(x); >> [P,error]=polyappro(f,0,pi/2) 得到结果: P =
-0.0708 1.5765 0.7658 0.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) syms x
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); for i=1:m
for j=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); for i=1:n+1
w(i)=(2*(i-1)+1)/2*quad(@(x)f(x).*
mfun('p',i-1,x),-1,1);
YY(i,:)=w(i).*mfun('p',i-1,xx); Y=sum(YY);
error=norm(fval-Y,'inf'); plot(xx,fval,xx,Y,'r'); end end