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

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

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

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

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

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

的两个零点

构造求积公式

都准确成立,有

由此解出

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

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

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

0。

0000000

2.0000000

1

0.5773503

2

7745967

0.0000000

5555556

8888889

3

8611363

3399810

3478548

6521452

4

0.9061798

0.5384693

0.2369269

4786287

5688889

公式(4.5。

9)的余项由(4.5。

8)得

这里

是最高项系数为1的勒让德多项式,由(3。

2。

6)及(3。

7)得

.   

时,有

它比辛普森公式余项

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

当积分区间不是[-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

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

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

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

#include 

<

iostream。

h>

#include 

math.h>

〈iomanip。

h〉

#define 

Precision1 

0.000000000001

# 

define 

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。

//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 

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

for(int 

i=0;

i<

3;

i++)

x=((b-a)*X[i]+(b+a))/2。

w=w+f(x)*L[i];

w;

FivePointGaussLegendre(double 

x,w;

X[5]={-0。

9061798459,—0。

5384693101,0,0.5384693101,0。

9061798459};

L[5]={0.2369268851,0.4786286705,0。

5688888889,0.4786286705,0。

2369268851};

i〈5;

x=((b-a)*X[i]+(b+a))/2.0;

w=w+f(x)*L[i];

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

w;

FivePointPrecisionGaussLegendre(double 

m,i,j;

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

X[5]={-0。

5384693101,0,0。

5384693101,0.9061798459};

 

m=1;

s=fabs(0。

001*h);

p=1。

0e+35;

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

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;

cout<

〈”请输入积分上限:

”;

cin>

>

b;

cout〈〈”㏑的真值为:

”〈<

endl;

cout〈<

”1.098612289"

〈<

endl;

/*龙贝格求积*/

s=Romberg( 

a, 

b, 

function);

"

龙贝格求积公式:

cout〈〈setiosflags(ios:

fixed)<

〈setprecision(14)<

〈s<

/*三点求积公式*/

s=ThreePointGaussLegendre( 

b, 

”三点求积公式:

setiosflags(ios:

:

fixed)〈〈setprecision(14)<

〈s〈〈endl;

/*五点求积公式*/

s=FivePointGaussLegendre( 

a, 

”五点求积公式”〈<

setprecision(14)<

s<

〈endl;

s=FivePointPrecisionGaussLegendre(a, 

b,function);

cout〈〈”控制精度五点求积公式”〈<

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高斯—勒让德数值积分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);

fori=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.数值实验

1用4点(n=3)的高斯——勒让德求积公式计算

.

解:

先将区间

化为

,由

(1)

(1)

根据表4-7中n=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