数值分析 高斯勒让德积分公式文档格式.docx

上传人:b****5 文档编号:19016882 上传时间:2023-01-03 格式:DOCX 页数:15 大小:104.73KB
下载 相关 举报
数值分析 高斯勒让德积分公式文档格式.docx_第1页
第1页 / 共15页
数值分析 高斯勒让德积分公式文档格式.docx_第2页
第2页 / 共15页
数值分析 高斯勒让德积分公式文档格式.docx_第3页
第3页 / 共15页
数值分析 高斯勒让德积分公式文档格式.docx_第4页
第4页 / 共15页
数值分析 高斯勒让德积分公式文档格式.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

数值分析 高斯勒让德积分公式文档格式.docx

《数值分析 高斯勒让德积分公式文档格式.docx》由会员分享,可在线阅读,更多相关《数值分析 高斯勒让德积分公式文档格式.docx(15页珍藏版)》请在冰豆网上搜索。

数值分析 高斯勒让德积分公式文档格式.docx

令它对

准确成立,即可定出

.这样构造出的一点高斯-勒让德求积公式是中矩形公式.再取

的两个零点

构造求积公式

都准确成立,有

由此解出

,从而得到两点高斯-勒让德求积公式

三点高斯-勒让德求积公式的形式是

如表列出高斯-勒让德求积公式的节点和系数.

0.0000000

2.0000000

1

0.5773503

1.0000000

2

0.7745967

0.5555556

0.8888889

3

0.8611363

0.3399810

0.3478548

0.6521452

4

0.9061798

0.5384693

0.2369269

0.4786287

0.5688889

公式(4.5.9)的余项由(4.5.8)得

这里

是最高项系数为1的勒让德多项式,由(3.2.6)及(3.2.7)得

.   

时,有

它比辛普森公式余项

还小,且比辛普森公式少算一个函数值.

当积分区间不是[-1,1],而是一般的区间

时,只要做变换

可将

化为[-1,1],这时

. 

对等式右端的积分即可使用高斯-勒让德求积公式.

1.2复化Gauss-Legendre求积公式

将被积区间m等分,记

作变换

在每个小区间上应用Gauss-Legendre公式,累加即得复化Gauss-Legendre求积公式

不妨设

则有:

Gauss点个数

时,

总结复化Gauss-Legendre求积过程如下:

1.分割区间,记录区间端点值;

2.通过查表或求解非线性方程组,在所有小区间上,将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);

Resultof3Nodes:

disp(mysum2);

1.3龙贝格,三点,五点以及变步长高斯勒让德求积法

以下是关于龙贝格,三点,五点以及变步长高斯勒让德之间精度的相互比较

#include 

<

iostream.h>

math.h>

iomanip.h>

#define 

Precision1 

0.000000000001

define 

2.71828183

MAXRepeat 

10 

double 

function 

(double 

x)

{

s;

s=1/x;

return 

}

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.0;

for(k=1;

=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;

16 

h=h/2.0;

//二倍分割区间

q;

ThreePointGaussLegendre(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.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 

X[5]={-0.9061798459,-0.5384693101,0,0.5384693101,0.9061798459};

L[5]={0.2369268851,0.4786286705,0.5688888889,0.4786286705,0.2369268851};

5;

//每一次小区间利用勒让德公式计算的结果

FivePointPrecisionGaussLegendre(double 

m,i,j;

s,p,ep,h,aa,bb,w,x,g;

 

s=fabs(0.001*h);

p=1.0e+35;

(fabs(h)>

s))

g=0.0;

for(i=0;

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.0;

ep=fabs(g-p)/(1.0+fabs(g));

//计算精度

p=g;

h=(b-a)/m;

//分割区间

g;

main()

a,b,s;

cout<

"

请输入积分下限:

;

cin>

>

a;

请输入积分上限:

b;

㏑的真值为:

endl;

1.098612289"

/*龙贝格求积*/

s=Romberg( 

a, 

b, 

function);

龙贝格求积公式:

setiosflags(ios:

:

fixed)<

setprecision(14)<

s<

/*三点求积公式*/

s=ThreePointGaussLegendre( 

三点求积公式:

/*五点求积公式*/

s=FivePointGaussLegendre( 

五点求积公式"

s=FivePointPrecisionGaussLegendre(a, 

b,function);

控制精度五点求积公式"

0;

}

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)

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;

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的节点及系数值可求得

.

(准确值

3.2用

的高斯-勒让德公式计算积分

,则

的高斯—勒让德公式计算积分

3.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期

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 工作总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1