完整word版数值分析高斯勒让德积分公式Word文件下载.docx
- 文档编号:18377305
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:15
- 大小:107.03KB
完整word版数值分析高斯勒让德积分公式Word文件下载.docx
《完整word版数值分析高斯勒让德积分公式Word文件下载.docx》由会员分享,可在线阅读,更多相关《完整word版数值分析高斯勒让德积分公式Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
的两个零点
构造求积公式
都准确成立,有
.
由此解出
,从而得到两点高斯-勒让德求积公式
三点高斯-勒让德求积公式的形式是
如表列出高斯-勒让德求积公式的节点和系数.
0.0000000
2。
0000000
1
0。
5773503
2
0.7745967
0.5555556
8888889
3
0.8611363
3399810
3478548
0.6521452
4
0.9061798
0.5384693
2369269
0.4786287
0.5688889
公式(4.5.9)的余项由(4。
5.8)得
,
这里
是最高项系数为1的勒让德多项式,由(3。
6)及(3.2。
7)得
.
当
时,有
它比辛普森公式余项
还小,且比辛普森公式少算一个函数值.
当积分区间不是[-1,1],而是一般的区间
时,只要做变换
可将
化为[-1,1],这时
.
对等式右端的积分即可使用高斯-勒让德求积公式.
2复化Gauss-Legendre求积公式
将被积区间m等分,记
作变换
在每个小区间上应用Gauss—Legendre公式,累加即得复化Gauss—Legendre求积公式
不妨设
则有:
Gauss点个数
时,
时,
总结复化Gauss-Legendre求积过程如下:
分割区间,记录区间端点值;
通过查表或求解非线性方程组,在所有小区间上,将Gauss系数和Gauss点的值代入变量替换后的公式;
3.将所有区间的结果累加,即得到整个区间上的积分近似值。
针对Gauss点个数
和
的复化Gauss—Legendre求积公式编写的一个简单的MATLAB函数compgauss()如下:
function[]=compgauss(a,b,n)
%CompositeGaussIntegration
%EquationType:
n=2,n=3
%CodedbyNan.Xiao2010-05—25
%Step。
1DivideInterval
%Step.2Calculate
%Step.3SumResults
formatlong
f=@(x)exp(x).*sin(x);
h=(b—a)/n;
xk=zeros(n+1,1);
xk(1,1)=a;
xk(n+1,1)=b;
fk1=zeros(n,1);
fk2=zeros(n,1);
fori=1:
n—1
xk(i+1,1)=a+h*i;
end
forj=1:
n
fk1(j)=f((xk(j)+xk(j+1))/2+(h/2)*(—1/sqrt(3)))+。
..
f((xk(j)+xk(j+1))/2+(h/2)*(1/sqrt(3)));
forr=1:
fk2(r)=(5/9)*f((xk(r)+xk(r+1))/2+(h/2)*(—sqrt(15)/5))+。
(8/9)*f((xk(r)+xk(r+1))/2+(h/2)*(0))+。
.。
(5/9)*f((xk(r)+xk(r+1))/2+(h/2)*(sqrt(15)/5));
mysum1=h*sum(fk1)/2;
mysum2=h*sum(fk2)/2;
disp('
Resultof2Nodes:
'
)
disp(mysum1);
disp(’Resultof3Nodes:
disp(mysum2);
1.3龙贝格,三点,五点以及变步长高斯勒让德求积法
以下是关于龙贝格,三点,五点以及变步长高斯勒让德之间精度的相互比较
#include
〈iostream.h>
#include
<
math。
h>
〈iomanip.h〉
#define
Precision1
000000000001
#
define
e
2.71828183
MAXRepeat
10
double
function
(double
x)
{
s;
s=1/x;
return
s;
}
Romberg(double
a,double
b,double
f(double
x))
int
m,n,k;
y[MAXRepeat],h,ep,p,xk,s,q;
h=b—a;
y[0]=h*(f(a)+f(b))/2.0;
//计算T`1`(h)=1/2(b—a)(f(a)+f(b));
m=1;
n=1;
ep=Precision1+1;
while((ep〉=Precision1)&&(m〈MAXRepeat))
{
p=0。
0;
for(k=0;
k〈n;
k++)
xk=a+(k+0.5)*h;
p=p+f(xk);
}
p=(y[0]+h*p)/2。
0;
//T`m`(h/2),变步长梯形求积公式
s=1。
for(k=1;
k<
=m;
s=4。
0*s;
//
pow(4,m)
q=(s*p-y[k-1])/(s—1.0);
y[k—1]=p;
p=q;
}
ep=fabs(q-y[m-1]);
m=m+1;
y[m—1]=q;
n=n+n;
2
4
8
16
h=h/2.0;
//二倍分割区间
q;
ThreePointGaussLegendre(double
b,double
x,w;
static
X[3]={—sqrt(15)/5。
0,0,sqrt(15)/5。
0};
L[3]={5/9。
0,8/9.0,5/9.0};
w=0。
for(int
i=0;
i〈3;
i++)
x=((b-a)*X[i]+(b+a))/2.0;
w=w+f(x)*L[i];
w;
FivePointGaussLegendre(double
a,double
X[5]={—0。
9061798459,-0。
5384693101,0,0。
5384693101,0.9061798459};
L[5]={0。
2369268851,0。
4786286705,0。
5688888889,0。
2369268851};
w=0.0;
i〈5;
x=((b—a)*X[i]+(b+a))/2。
w=w+f(x)*L[i];
//每一次小区间利用勒让德公式计算的结果
w;
FivePointPrecisionGaussLegendre(double
m,i,j;
s,p,ep,h,aa,bb,w,x,g;
X[5]={—0.9061798459,—0.5384693101,0,0。
5384693101,0.9061798459};
h=b-a;
s=fabs(0。
001*h);
p=1.0e+35;
ep=Precision1+1;
while((ep〉=Precision1)&&(fabs(h)>
s))
g=0.0;
for(i=0;
i〈m;
aa=a+i*h;
bb=aa+h;
for(j=0;
j<
=4;
j++)
x=((bb-aa)*X[j]+(bb+aa))/2.0;
w=w+f(x)*L[j];
g=g+w;
//各个区间计算结果之和相加
g=g*h/2。
ep=fabs(g—p)/(1。
0+fabs(g));
//计算精度
p=g;
m=m+1;
h=(b-a)/m;
//分割区间
g;
main()
a,b,s;
cout<
"
请输入积分下限:
;
cin〉>
a;
请输入积分上限:
”;
cin>
〉b;
cout〈<
”㏑的真值为:
〈〈endl;
”1。
098612289"
〈<
endl;
/*龙贝格求积*/
s=Romberg(
a,
b,
function);
龙贝格求积公式:
”<
〈setiosflags(ios:
:
fixed)〈<
setprecision(14)<
〈s<
endl;
/*三点求积公式*/
s=ThreePointGaussLegendre(
a,
function);
”三点求积公式:
s<
/*五点求积公式*/
s=FivePointGaussLegendre(
b,
五点求积公式"
setiosflags(ios:
setprecision(14)〈<
s=FivePointPrecisionGaussLegendre(a,
b,function);
”控制精度五点求积公式”<
〈endl;
cout〈〈setiosflags(ios:
:
fixed)<
〈setprecision(14)<
〈s〈〈endl;
}
2.高斯-勒让德求积的程序
2.1三点高斯勒让德公式的代码
functiongl=f(str,a,b)
x=zeros(3,1);
y=zeros(3,1);
x
(1)=—sqrt(15)/5;
x
(2)=0;
x(3)=sqrt(15)/5;
t=(b—a)/2*x(i)+(a+b)/2;
y(i)=eval(str);
%exp(t)*sin(t);
%此处为求积的函数,t为自变量
gl=5/9*y
(1)+8/9*y
(2)+5/9*y(3);
上面的代码保存为f。
m文件,调用的时候如下
f(’t*2’,—1,1)
f(’exp(t)*sin(t)’,1,3)
其中第一个参数为求积分的表达式,第二三个参数分别为
积分的上下限。
2.2高斯-勒让德数值积分Matlab代码
function[ql,Ak,xk]=guasslegendre(fun,a,b,n,tol)
ifnargin==1
a=—1;
b=1;
n=7;
tol=1e—8;
elseifnargin==3
n=7;
tol=1e-8;
elseifnargin==4
tol=1e—8;
elseifnargin==2|nargin>
5
error(’TheNumberofInputArgumentsIsWrong!
);
symsx
p=sym2poly(diff((x^2—1)^(n+1),n+1))/(2^n*factorial(n));
tk=roots(p);
Ak=zeros(n+1,1);
n+1
xkt=tk;
xkt(i)=[];
pn=poly(xkt);
fp=@(x)polyval(pn,x)/polyval(pn,tk(i));
Ak(i)=quadl(fp,—1,1,tol);
%求积系数
xk=(b-a)/2*tk+(b+a)/2;
fun=fcnchk(fun,'
vectorize'
);
fx=fun(xk)*(b-a)/2;
ql=sum(Ak。
*fx);
3。
数值实验
3.1用4点(n=3)的高斯--勒让德求积公式计算
.
解:
先将区间
化为
由
(1)
。
(1)
有
根据表4-7中n=3的节点及系数值可求得
.
(准确值
)
2用
的高斯—勒让德公式计算积分
解:
令
则
用
的高斯-勒让德公式计算积分
2用四个节点的高斯―勒让德求积公式计算定积分
,计算过程保留4位小数.
解:
高斯-勒让德求积公式只求积分区间为[-1,1]上的积分问题.需作变换,令
,当x=1时,u=1;
当x=0时,u=-1.于是,
=
3.总结
高斯―勒让德求积公式对定积分的计算拥有高精度的特点,但是这只存在于积分区间在[—1,1]上,区间的变大会导致精度的降低.因此,寻找精度更高,加速更快的算法是必要的。
《参考文献》
[1]《数值计算》张军、林瑛、钟竞辉清华大学出版社2008617
[2]《数值分析》陈晓江、黄樟灿·
科学出版社2010710
[3]《数值分析原理》吴勃英科学出版社2009723
[4]复化两点Gauss-Legendre求积公式的外推算法《桂林航天工业高等专科学校学报》2007年03期
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 word 数值 分析 高斯勒让德 积分 公式