当前位置:文档之家› 龙贝格积分的程序实现

龙贝格积分的程序实现

龙贝格积分的程序实现
龙贝格积分的程序实现

龙贝格积分-matlab通用程序

数值分析课程的大作业,教材《数值分析》李乃成.梅立泉 clear clc format long f=input('请输入原函数f=','s'); a=input('积分下限a='); b=input('积分上限b='); eps1=input('精度eps1='); T(1)=double((b-a)/2*(limit(sym(f),findsym(sym(f)),a)+limit(sym(f),findsym(sym(f)),b))); for k=2:4 sum1=0; for i=1:2^(k-2) sum1=sum1+subs(sym(f),findsym(sym(f)),(a+(2*i-1)*(b-a)/2^(k-1))); end T(k)=1/2*T(k-1)+(b-a)/(2^(k-1))*sum1; end for k=1:3 S(k)=T(k+1)+1/(4-1)*(T(k+1)-T(k)); end for k=1:2 C(k)=S(k+1)+1/(4^2-1)*(S(k+1)-S(k)); end R(1)=C(2)+1/(4^3-1)*(C(2)-C(1)); k=3; while 1 T(1)=T(2); T(2)=T(3); T(3)=T(4); sum2=0; for i=1:2^k sum2=sum2+subs(sym(f),findsym(sym(f)),(a+(2*i-1)*(b-a)/2^(k+1))); end T(4)=1/2*T(4)+(b-a)/2^(k+1)*sum2; S(1)=S(2); S(2)=S(3); S(3)=T(4)+1/(4-1)*(T(4)-T(3)); C(1)=C(2); C(2)=S(3)+1/(4^2-1)*(S(3)-S(2)); R(2)=C(2)+1/(4^3-1)*(C(2)-C(1)); if abs(R(2)-R(1))

数值分析—龙贝格算法

数值分析 实 验 报 告 专业:信息与计算科学 班级: 10***班 学号: 1008060**** 姓名: ******

实验目的: 用龙贝格积分算法进行积分计算。 算法要求: 龙贝格积分利用外推方法,提高了计算精度,加快了收敛速度。 1--4R R R R 1-j 1-j 1-k 1-j k 1-j k j k ,,,,+= ,k=2,3,… 对每一个k ,j 从2做到k ,一直做到|R R 1-k 1-k k k -,,| 小于给定控制精 度时停止计算。 其中: T R h k 1k =,(复化梯形求积公式),2h 1-k k a -b = 程序代码: #include #include #define M 10 static float a, b, T[M], S[M], C[M], R[M]; float f(float x) { float y; if(0.0 == x) { x = 0.0000001f; } y = (float)1/sqrt(1-x*x); return y; } int p(int n) { int i=0,t=1;

while(t!=n) { t*=2; ++i; } return i; } float t(int n) { float g,h,q=0; if(1==n) { h = (float)fabs(b-a); q = (f(a)+f(b))*h/2; } else { float x = a; g = 0; h = (float)fabs(b-a)*2/n; x = x+h/2; while(x

龙贝格求解积分

#include #include #define max 20 double a,b; double eps; double f(double x) { if(x==0) return 1; else return (sin(x)/x); } void romberg(double a,double b) { double t[max][4]={0},h=1.0,e=1.0+eps; double sum; int i,j,k=1,m; t[0][0]=h*(f(a)+f(b))/2.0; while((keps)) { sum=0; for(i=1;i<=(int)(pow(2,k-1));i++) sum=sum+f(a+(i-0.5)*h); //求f(x(i+0.5))的和 t[k][0]=(t[k-1][0]+h*sum)/2.0; //求T2n for(m=1;m<=k;m++) { if(m>4) break; t[k][m]=(pow(4,m)*t[k][m-1]-t[k-1][m-1])/(pow(4,m)-1); //求R } if(k>=4) e=fabs(t[k][3]-t[k-1][3]); k++; h=h/2.0; } if(k>max) printf("method failed.\n"); else { for(i=0;i

if(i>=j) printf("%10.8f\t",t[i][j]); printf("\n"); } } } void main() { printf("please input a= ,b= ,eps= \n"); scanf("%lf %lf %lf",&a,&b,&eps); romberg(a,b); } 运行结果: please input a= ,b= ,eps= 0.0 1.0 0.00000001 k=0 0.92073549 k=1 0.93979328 0.94614588 k=2 0.94451352 0.94608693 0.94608300 k=3 0.94569086 0.94608331 0.94608307 0.94608307 k=4 0.94598503 0.94608309 0.94608307 0.94608307 0.946083 07 Press any key to continue

龙贝格积分法C语言(西安交大)

#include #include void main() { int i; float a,b,fa,fb; double T,T1,S,S1,C,C1,R,R1,e; double fx1(double x); printf("请输入积分下界a=\n"); /*输入X的下界*/ scanf("%f",&a); printf("请输入积分下界b=\n"); /*输入X的上界*/ scanf("%f",&b); printf("请输入计算精度e=\n"); scanf("%lf",&e); fa=fx1(a); /*计算fx函数上下界的值*/ fb=fx1(b); printf("a=%3.7f\nb=%3.7f\nfa=%3.7f\nfb=%3.7f\ne=%3.10f",a,b,fa,fb,e); /*输出上、下界值,上下界fx函数值,计算精度e*/ printf("\n"); /*程序开始*/ T1=(b-a)*(fa+fb)/2; for(i=0;;i++) { double fx2(double i,double a,double b); double Tkk; Tkk=fx2(i,a,b); /*调用fx函数*/ T=T1/2+Tkk; T1=T; S=T+(T-T1)/(pow(4,1)-1); S1=S; if(i>=1) { C=S+(S-S1)/(pow(4,2)-1);

C1=C; } if(i>=2) R=C+(C-C1)/(pow(4,3)-1); if(abs(R-R1)<0.0000001) /*判断是否满足计算精度,满足则退出迭代,不满足则继续*/ break; R1=R; } printf("积分计算数值为\n"); /*输出计算结果*/ printf("%2.7f\n",T); } double fx1(double x) /*编写一个被积函数fx*/ { double fx; fx=1/(1+x); return(fx); } double fx2(double i,double a,double b) /*编写T的高次迭代函数*/ { //double fx1(double z); double m,l; double Tk,Tkk,z; m=pow(2,i); Tk=0; for(l=1;l<=m;l++) { z=a+(2*l-1)*(b-a)/(2*m); Tk+=fx1(z); } Tkk=(b-a)*Tk/(m*2); return(Tkk);

龙贝格算法

龙贝格算法 一、问题分析 1.1龙贝格积分题目 要求学生运用龙贝格算法解决实际问题(塑料雨篷曲线满足函数y(x)=l sin(tx),则给定雨篷的长度后,求所需要平板材料的长度)。 二、方法原理 2.1龙贝格积分原理 龙贝格算法是由递推算法得来的。由梯形公式得出辛普生公式得出柯特斯公式最后得到龙贝格公式。 在变步长的过程中探讨梯形法的计算规律。设将求积区间[a ,b]分为n 个等 分,则一共有n+1个等分点,k x a kh =+,0,1,b a h k n -== ,n 。这里用n T 表示复化梯形法求得的积分值,其下标n 表示等分数。 先考察下一个字段[1,k k x x +],其中点()1 12 1 2 k k k x x x ++= +,在该子段上二分前后两个积分值 ()()112 k k h T f x f x += +???? ()()21124k k k h T f x f x f x ++? ??? = ++?? ??????? 显然有下列关系 2112122 k h T T f x +?? =+ ??? 将这一关系式关于k 从0到n-1累加求和,即可导出下列递推公式

12102122n n n k k h T T f x -+=? ?=+ ??? ∑ 需要强调指出的是,上式中的b a h n -= 代表二分前的步长,而 12 12k x a k h + ? ?=++ ?? ? 梯形法的算法简单,但精度低,收敛速度缓慢,如何提高收敛速度以节省计 算量,自然式人们极为关心的。 根据梯形法的误差公式,积分值n T 的截断误差大致与2h 成正比,因此步长减半后误差将减至四分之一,既有 211 14 n n T T -≈- 将上式移项整理,知 221 1()3 n n n T T T -≈- 由此可见,只要二分前后两个积分值n T 和2n T 相当接近,就可以保证计算保证结果计算结果2n T 的误差很小,这种直接用计算结果来估计误差的方法称作误差的事后估计 法。 按上式,积分值2n T 的误差大致等于21()3 n n T T -,如果用这个误差值作为2n T 的一种 补偿,可以期望,所得的 ()222141333 n n n n n T T T T T T =+ -=- 应当是更好的结果。 按上式,组合得到的近似值T 直接验证,用梯形二分前后的两个积分值n T 和2n T 按 式组合,结果得到辛普生法的积分值n S 。 24133 n n n S T T =- 再考察辛普生法。其截断误差与4h 成正比。因此,若将步长折半,则误差相 应的减至十六分之一。既有 21 16 n n I S I S -≈- 由此得

龙贝格算法的matlab实现

作业三——龙贝格算法的matlab实现程序流程图:

程序源代码: 文件f.m function fx = f(x) if x == 0 fx = 1; else fx = sin(x) / x; end end 文件longbeige.m clc clear all; format long a=input('请输入你要求得积分的下限:'); b=input('请输入你要求得积分的上限:'); e=input('请输入你要求得积分的结束精度:'); k=input('请输入你要求得积分的最大次数:'); fx=@(x)sin(x)/x; lbg(@f,a,b,k,e) 文件lbg.m function lbg(fx,a,b,k,e) T=zeros(k,k); T(1,1)=(b-a)*(1+fx(b))/2; for i=1:k m=0; for j=1:2^(i-1) m=m+fx(a+(2*j-1)*(b-a)/(2^i)); end T(i+1,1)=0.5*T(i,1)+(b-a)*m/2^i; for n=1:i T(i+1,n+1)=(4^n*T(i+1,n)-T(i,n))/(4^n-1); end if abs(T(i+1,i+1)-T(i,i))<=e & i>=4 break; else ; end end for i=1:k

if T(i,1)==0 j=i; break; else ; end end if j==k error('所求次数不够或不可积') else ; end T=T(1:j-1,1:j-1) disp('所求的积分值为:') disp(T(j-1,1))

多种数值积分的分析比较(Gauss 抛物线 龙贝格)

多种数值积分求积公式的分析比较 吴春晖 (中国海洋大学海洋环境学院山东青岛 266100) 摘要: 对于运用牛顿-莱布尼茨积分公式不能较好解决的定义在区间[a,b]上的可积函数,原函数并不能简单地用初等函数来表达,故需要构造定积分的近似计算公式。在本文中,主要构建了抛物线求积公式及其复化抛物线公式。在对抛物线类的求积公式进行应用检验后,再运用Gauss求积公式,构建Gauss-Laguerre求积公式,对相同的问题进行运用,并比较截断误差。之后再对求积过程进行优化,在限定误差范围的情况下,利用龙贝格算法,对求积加速收敛。 关键词:抛物线求积复化求积Gauss-Laguerre加速收敛 引言: 对于一些较为复杂的函数,在一定的误差要求下,需要通过构造的方式求给定函数的定积分。基本的替代法主要有梯形面积及抛物线近似代替曲边梯形。并通过划分更小的区间,减少截断误差从而提出了复化梯形及抛物线公式。为了提高运算效率,有加速收敛的Richardson外推法和Romberg求积公式。之后,针对节点数固定情况下,提出了Gauss公式,使其获得最大的精度。本文主要研究的是抛物线求积法与Gauss-Laguerre公式。

目录 第一章抛物线求积公式及应用 (3) 1.1抛物线求积公式的算法 (3) 1.2抛物线求积公式的matlab程序 (3) 1.3复化抛物线求积公式的应用 (4) 第二章Gauss-Laguerre求积公式及应用 (5) 2.1 Gauss-Laguerre的算法 (5) 2.2Gauss-Laguerre公式的matlab程序 (5) 2.3 Gauss-Laguerre求积公式的应用 (6) 第三章龙贝格算法与算法优化 (7) 3.1龙贝格算法及程序 (7) 3.2利用龙贝格算法优化求积 (7) 3.3 龙贝格算法的应用 (8) 第四章数值积分的分析总结 (9)

龙贝格公式和辛普森公式和复合梯形公式

实验八数值积分 信息与计算科学金融崔振威201002034031 一、实验目的: 1、掌握数据积分算法设计及程序实现 二、实验内容: 1、p290-1、p301-2 三、实验要求: 主程序: 复合梯形公式: function [I,step,h2] = CombineTraprl(f,a,b,eps) %f 被积函数 %a,b 积分上下限 %eps 精度 %I 积分结果 %step 积分的子区间数 if(nargin ==3) eps=1.0e-4; end n=1; h=(b-a)/2; I1=0; I2=(subs(sym(f),findsym(sym(f)),a)+subs(sym(f),findsym(sym(f)),b))/h; while abs(I2-I1)>eps n=n+1; h=(b-a)/n; I1=I2; I2=0; for i=0:n-1 x=a+h*i; x1=x+h; I2=I2+(h/2)*(subs(sym(f),findsym(sym(f)),x)+subs(sym(f),findsym(sym(f)),x1)); end end I=I2; step=n; h2=(b-a)/n;

function [I,step,h] = IntSimpson(f,a,b,type,eps) %type = 1 辛普森公式 %type = 2 辛普森3/8公式 %type = 3 复合辛普森公式 if(type==3 && nargin==4) eps=1.0e-4; %精度为0.0001 end I=0; switch type case 1, I=((b-a)/6)*(subs(sym(f),findsym(sym(f)),a)+... 4*subs(sym(f),findsym(sym(f)),(a+b)/2)+... subs(sym(f),findsym(sym(f)),b)); step=1; case 2, I=((b-a)/8)*(subs(sym(f),findsym(sym(f)),a)+... 3*subs(sym(f),findsym(sym(f)),(2*a+b)/3)+ ... 3*subs(sym(f),findsym(sym(f)),(a+2*b)/3)+subs(sym(f),findsym(sym(f)),b)); step=1; case 3, n=2; h=(b-a)/2; I1=0; I2=(subs(sym(f),findsym(sym(f)),a)+subs(sym(f),findsym(sym(f)),b))/h; while abs(I2-I1)>eps n=n+1; h=(b-a)/n; I1=I2; I2=0; for i=0:n-1 x=a+h*i; x1=x+h; I2=I2+(h/6)*(subs(sym(f),findsym(sym(f)),x)+... 4*subs(sym(f),findsym(sym(f)),(x+x1)/2)+... subs(sym(f),findsym(sym(f)),x1)); end end I=I2; step=n; end

[2]龙贝格积分[数据]

1.(1) a = 0 b = 1 n = 100 i = 1 h = 1 T1 = 1.3591 i = 2 h = 0.50000 T2 = 0.99734 S1 = 0.87674 i = 3 h = 0.25000 T2 = 0.84726 S2 = 0.79723 C1 = 0.79193 i = 4 T2 = 0.78012 S2 = 0.75774 C2 = 0.75511 R1 = 0.75452 h = 0.062500 T2 = 0.74854 S2 = 0.73801 C2 = 0.73669 R2 = 0.73640 h = 0.031250 T2 = 0.73324 S2 = 0.72815 C2 = 0.72749 R2 = 0.72734 h = 0.015625 T2 = 0.72572 S2 = 0.72321 C2 = 0.72289 R2 = 0.72281 h = 0.0078125 T2 = 0.72199 S2 = 0.72075 C2 = 0.72058 R2 = 0.72055 h = 0.0039062 T2 = 0.72013 S2 = 0.71951 C2 = 0.71943 R2 = 0.71941 h = 0.0019531 T2 = 0.71921 S2 = 0.71890 C2 = 0.71886 R2 = 0.71885 h = 9.7656e-04 T2 = 0.71874 S2 = 0.71859 C2 = 0.71857 R2 = 0.71856 h = 4.8828e-04 T2 = 0.71851 S2 = 0.71844 C2 = 0.71843 R2 = 0.71842 h = 2.4414e-04 T2 = 0.71840 S2 = 0.71836 C2 = 0.71835 R2 = 0.71835 h = 1.2207e-04 T2 = 0.71834 S2 = 0.71832 C2 = 0.71832 R2 = 0.71832 h = 6.1035e-05 T2 = 0.71831 S2 = 0.71830 C2 = 0.71830 R2 = 0.71830 h = 3.0518e-05 T2 = 0.71830 S2 = 0.71829 C2 = 0.71829 R2 = 0.71829 h = 1.5259e-05 T2 = 0.71829 S2 = 0.71829 C2 = 0.71829 R2 = 0.71829 h = 7.6294e-06 T2 = 0.71829 S2 = 0.71828 C2 = 0.71828 R2 = 0.71828 tol = 0.036239 h = 3.8147e-06 T2 = 0.71828 S2 = 0.71828 C2 = 0.71828 R2 = 0.71828 tol = 0.036241 h = 1.9073e-06 T2 = 0.71828 S2 = 0.71828 C2 = 0.71828 R2 = 0.71828 tol = 0.036241 h = 9.5367e-07 T2 = 0.71828 S2 = 0.71828 C2 = 0.71828 R2 = 0.71828 tol = 0.036241 h = 4.7684e-07 T2 = 0.71828 S2 = 0.71828 C2 = 0.71828 R2 = 0.71828 tol = 0.036242 h = 2.3842e-07 T2 = 0.71828 S2 = 0.71828 C2 = 0.71828 R2 = 0.71828 tol = 0.036242 h = 1.1921e-07 T2 = 0.71828 S2 = 0.71828 C2 = 0.71828 R2 = 0.71828 tol = 0.036242

数值分析与实验复化辛卜生公式龙贝格算法

数值分析与实验课程设计 班级: 姓名: 学号:

08级应用数学《数值分析与实验(实践)》任务书 一、设计目的 通过《数值分析与实验(实践)》实践环节,掌握本门课程的众多数值解法和原理,并通过编写C语言或matlab程序,掌握各种基本算法在计算机中的具体表达方法,并逐一了解它们的优劣、稳定性以及收敛性。在熟练掌握C语言或matlab语言编程的基础上,编写算法和稳定性均佳、通用性强、可读性好,输入输出方便的程序,以解决实际中的一些科学计算问题。 二、设计教学内容 1、数值方法的稳定性; 2、禾U用牛顿法和割线法程序求出非线性方程的解,并比较它们之间的优 劣; 3、高斯消去法和列主元高斯消去法求解线性方程组; 雅克比法和高斯-赛德尔迭代法解方程组; 4、利用Lagrange插值多项式求未知点的近似值; 5、利用所给数据进行数据的多项式和可转化成多项式形式的函数拟合; 6、编写复化辛卜生公式和龙贝格算法,通过实际计算体会各种方法的精确 \ 度; 7、利用改进Euler方法和四阶Runge-Kutta方法求解初值问题的微分方程组; &利用幕法求矩阵按模最大的特征值及对应特征向量; \ (8个中选取1个) 二、设计时间 2011 —2012学年第1学期:第16周共计一周 教师签名: 2011年12月12日

、八 刖 数值计算方法是一种利用计算机解决数学 .言 问题的数值近似解方法, 特别是无法用人工过计算器计算的数学问题。数值计算方法常用于矩阵高次代数方程矩阵特征值与特征向量的数值解法,插值法,线性方程组迭代法,函数逼近,数值积分与微分,常微分方程初值问题数值解等。 作为数学与计算机之间的一条通道,数值计算的应用范围已十分广泛,作为用计算机解决实际问题的纽带,数值算法在求解线性方程组,曲线拟合、数值积分、数值微分,迭代方法、插值法、拟合法、最小二乘法等应用广泛。 数值计算方法是和计算机紧密相连的,现代计算机的出现为大规模的数值计 算创造了条件,集中而系统的研究适用于计算机的数值方法是十分必要的。数值计算方法是在数值计算实践和理论分析的基础上发展起来的。 通过数值计算方法与实验将有助于我们理解和掌握数值计算方法基本理论和相关软件的掌握,熟练求解一些数学模和运算,并提高我们的编程能力来解决实际问题。

龙贝格积分实验报告

二、R o m b e r g 积分法 1.变步长Romberg 积分法的原理 复化求积方法对于提高精度是行之有效的方法,但复化公式的一个主要缺点在于要事先估计出部长。若步长过大,则精度难于保证;若步长过小,则计算量又不会太大。而用复化公式的截断误差来估计步长,其结果是步长往往过小,而且''()f x 和(4)()f x 在区间[,]a b 上的上界M 的估计是较为困难的。在实际计算中通常采用变步长的方法,即把步长逐次分半(也就是把步长二等分),直到达到某种精度为止,这种方法就是Romberg 积分法的思想。 在步长的逐步分半过程中,要解决两个问题: 1. 在计算出N T 后,如何计算2N T ,即导出2N T 和N T 之间的递推公式; 2. 在计算出N T 后,如何估计其误差,即算法的终止的准则是什么。 首先推导梯形值的递推公式,在计算N T 时,需要计算1N +个点处的函数值在计算出N T 后,在计算2N T 时,需将每个子区间再做二等分,共新增N 个节点。为了避免重复计算,计算2N T 时,将已计算的1N +个点的数值保留下来,只计算新增N 个节点处的值。为此,把2N T 表示成两部分之和,即 由此得到梯形值递推公式 因此 由复化梯形公式的截断误差有 若''()f x 变化不大时,即''''12()()f f ηη≈,则有 式(2)表明,用2N T 作为定积分I 的近似值,其误差大致为21 ()3 N N T T -,因 此其终止条件为

其中ε是预先给定的精度。 积分公式 将上述方法不断推广下去,可以得到一个求积分的序列,而且这个序列很快收敛到所求的定积分。记 (0)N N T T =,将区间N 等分的梯形值。(1)N N T S =,将区间N 等分的Simpson (2)N N T C =,将区间N 等分的Cotes 。(3)N N T R =,将区间N 等分的Romberg 。 由其可构造一个序列(){}k N T ,次序列称为Romberg 序列,并满足如下递推关系: 以上递推公式就是Romberg 积分递推公式。 积分程序 1. 置1N =,精度要求ε,1h b a =-; 2. 计算(0)1[()()]2 b a T f a f b -=+; 3. 置22 N N h h =,并计算(0) (0)211((21))222N N N k b a b a T T f a k N N =--=++-∑; 4. 置,2,1;M N N N K === 5. 计算(1)(1) 2441 k k k k M M M k T T T ---=-; 6. 若 1M =,则转(7);否则置2 M M = ,1k k =+转(5); 7. 若()(1)11k k T T ε--≤,则停止计算(输出()1k T ),否则转(3)。 积分法的应用 function [T,n] = romb(f,a,b,eps) double R ;

龙贝格算法

龙贝格算法 一、问题分析 1、1龙贝格积分题目 要求学生运用龙贝格算法解决实际问题(塑料雨篷曲线满足函数y(x)=l sin (tx),则给定雨篷得长度后,求所需要平板材料得长度). 二、方法原理 2、1龙贝格积分原理 龙贝格算法就是由递推算法得来得。由梯形公式得出辛普生公式得出柯特斯公式最后得到龙贝格公式. 在变步长得过程中探讨梯形法得计算规律.设将求积区间[a,b]分为n个等分,则一共有n+1个等分点,n.这里用表示复化梯形法求得得积分值,其下标n 表示等分数。 先考察下一个字段[],其中点,在该子段上二分前后两个积分值 显然有下列关系 将这一关系式关于k从0到n-1累加求与,即可导出下列递推公式 需要强调指出得就是,上式中得代表二分前得步长,而 梯形法得算法简单,但精度低,收敛速度缓慢,如何提高收敛速度以节省计算量,自然式人们极为关心得. 根据梯形法得误差公式,积分值得截断误差大致与成正比,因此步长减半后误差将减至四分之一,既有 将上式移项整理,知

由此可见,只要二分前后两个积分值与相当接近,就可以保证计算保证结果计算结果得误差很小,这种直接用计算结果来估计误差得方法称作误差得事后估计法。 ?按上式,积分值得误差大致等于,如果用这个误差值作为得一种补偿,可以期望,所得得 应当就是更好得结果。 ?按上式,组合得到得近似值直接验证,用梯形二分前后得两个积分值与按式组合,结果得到辛普生法得积分值。 再考察辛普生法。其截断误差与成正比.因此,若将步长折半,则误差相应得减至十六分之一。既有 由此得 不难验证,上式右端得值其实就等于,就就是说,用辛普生法二分前后得两个积分值与,在按上式再做线性组合,结果得到柯特斯法得积分值,既有 重复同样得手续,依据斯科特法得误差公式可进一步导出龙贝格公式 应当注意龙贝格公式已经不属于牛顿—柯特斯公式得范畴. 在步长二分得过程中运用公式加工三次,就能将粗糙得积分值逐步加工成精度较高得龙贝格,或者说,将收敛缓慢得梯形值序列加工成熟练迅速得龙贝格值序列,这种加速方法称龙贝格算法。 三、算法设计 3、1龙贝格积分算法 就就是求出,再走一遍求出,根据求出,再走一遍求出,根据求出,根据求出,再走一遍程序求出,根据得出,根据得出,再根据得出,再走一边程序,得出,根据得出,根据得出,再由得出。再根据相减得绝对值小于其精度。那其中为求出得值.

龙贝格积分

一.介绍 龙贝格求积公式也称为逐次分半加速法。它是在梯形公式、辛普森公式和柯特斯公式之间的关系的基础上,构造出一种加速计算积分的方法。作为一种外推算法, 它在不增加

开始 计算步长h 计算初值 f(a)、f(b)、 R(1,1) R矩阵迭代计算 No 误差达到精度要 求 Yes 输出R(j+1,j+1) 结束三.源码 1. f=inline('1/(x+1)');%输入函数 a=0;b=1;%取值边界 eps=10^(-7); h=b-a;

R(1,1)=h*(f(a)+f(b))/2; j=0; err=1; m=1; while err>eps j=j+1; h=h/2; S=0; for i=1:m x=a+h*(2*i-1); S=S+f(x); end m=2*m; R(j+1,1)=R(j,1)/2+h*S; for i=1:j R(j+1,i+1)=R(j+1,i)+(R(j+1,i)-R(j,i))/(4^i-1); end err=abs(R(j+1,j)-R(j+1,j+1)); end ans=vpa(R(j+1,j+1),7) 2. f=inline('log(x+1)/(x^2+1)');%输入函数 a=0;b=1;%取值边界 eps=10^(-7); h=b-a; R(1,1)=h*(f(a)+f(b))/2; j=0;

err=1; m=1; while err>eps j=j+1; h=h/2; S=0; for i=1:m x=a+h*(2*i-1); S=S+f(x); end m=2*m; R(j+1,1)=R(j,1)/2+h*S; for i=1:j R(j+1,i+1)=R(j+1,i)+(R(j+1,i)-R(j,i))/(4^i-1); end err=abs(R(j+1,j)-R(j+1,j+1)); end ans=vpa(R(j+1,j+1),7) 3. f=inline('log(x+1)/x');%输入函数 a=0;b=1;%取值边界 eps=10^(-7); h=b-a; R(1,1)=h*(1+log(2))/2; j=0; err=1; m=1;

龙贝格算法

龙贝格算法 一、问题分析 1.1龙贝格积分题目 要求学生运用龙贝格算法解决实际问题(塑料雨篷曲线满足函数y(x)=lsin(tx),则给定雨篷的长度后,求所需要平板材料的长度)。 二、方法原理 2.1龙贝格积分原理 龙贝格算法是由递推算法得来的。由梯形公式得出辛普生公式得出柯特斯公式最后得到龙贝格公式。 在变步长的过程中探讨梯形法的计算规律。设将求积区间[a,b]分为n个等 ba,分,则一共有n+1个等分点,n。这里用表示复化xakh,,,hk,,,0,1,Tnkn 梯形法求得的积分值,其下标n表示等分数。 1xxx,,先考察下一个字段[],其中点,在该子段上二分前后xx,,,11kk,kk,1k,22 两个积分值 h ,,,,Tfxfx,,,,11kk,,,2 ,,,,hTfxfxfx,,,,,,,,,,,211kk,k,4,,2,,,, 显然有下列关系 ,,1h TTfx,,,,211k,222,, 将这一关系式关于k从0到n-1累加求和,即可导出下列递推公式 n,1,,1h TTfx,,,,,21nnk,22k,02,, ba,需要强调指出的是,上式中的代表二分前的步长,而 h,n

1,,xakh,,, 1,,k,2,,2 梯形法的算法简单,但精度低,收敛速度缓慢,如何提高收敛速度以节省计算量,自然式人们极为关心的。 2根据梯形法的误差公式,积分值的截断误差大致与成正比,因此步长减Thn 半后误差将减至四分之一,既有 1,T12n, 14,Tn将上式移项整理,知 1 ,,,TTT1()22nnn3由此可见,只要二分前后两个积分值和相当接近,就可以保证计算保证结TTn2n果计算结果的误差很小,这种直接用计算结果来估计误差的方法称作误差的事后估计T2n 法。 1 按上式,积分值的误差大致等于,如果用这个误差值作为的一种 TTT,T()2n2nn2n3补偿,可以期望,所得的 141 TTTTTT,,,,,,,222nnnnn333应当是更好的结果。 按上式,组合得到的近似值直接验证,用梯形二分前后的两个积分值和按TTTn2n 式组合,结果得到辛普生法的积分值。 Sn 41 STT,,nnn233 4 再考察辛普生法。其截断误差与成正比。因此,若将步长折半,则误差相h 应的减至十六分之一。既有 IS,12n, IS,16n由此得 161 ISS,,2nn1515 不难验证,上式右端的值其实就等于,就是说,用辛普生法二分前后的两个积分值Cn 和,在按上式再做线性组合,结果得到柯特斯法的积分值,既有 SCS2nnn

龙贝格求 积分

龙贝格(Romberg )求积法 1.算法理论 Romberg 求积方法是以复化梯形公式为基础,应用Richardson 外推法导出的数值求积方法。 由复化梯形公式 )]()(2)([2 222b f h a f a f h T +++= 可以化为 )]()]()([2 [212112h a f h b f a f h T +++= =)]([21 211h a f h T ++ 一般地,把区间[a,b]逐次分半k -1次,(k =1,2,……,n )区间长度(步 长)为k k m a b h -=,其中mk =2k -1。 记k T =) 1(k T 由)1(k T =] ))12(([212 11) 1(1∑=---++k m j k k k h j a f h T 从而 ? b a dx x f )(= ) 1(k T -)(''122 k f h a b ξ- (1) 按Richardson 外推思想,可将(1)看成关于k h ,误差为)(2k h O 的一个近似公式,因而,复化梯形公式的误差公式为 ? b a dx x f )(- ) 1(k T =......4221++k k h K h K =∑∞ =1 2i i k i h K (2) 取1+k h =k h 2 1有 ?b a dx x f )(-)1(1 +k T =∑∞ =+1 21 221i i k i i h K (3) 误差为)(2j h O 的误差公式 )(j k T =)1(-j k T +1 41)1(1)1(------j j k j k T T 2.误差及收敛性分析 (1)误差,对复化梯形公式误差估计时,是估计出每个子区间上的误差,然后将n 个子区间上的误差相加作为整个积分区间上的误差。

龙贝格公式及实现

龙贝格公式就是逐次对分积分区间的方法,可以把前面计算的结果作为一个整体带入对分后的计算公式中,只需要增加新的分点的函数值。 以)(0 k T 表示],[b a 二分k 次后的梯 形值, )(k m T 表示 )(0 k T 的m 次加速值, 则有 ) ,2,1(,1 411 4 4)(1 4 )1(1 )( =-- -= -+-k T T T k m k m m m k m 龙贝格算法: 步 1 初始化:计算 )] ()([2 )0(0 b f a f a b T +-= ,置1:=k (k 记录区间],[b a 的二分次数),

a b h -=; 步2(二分) 计算积分值: ∑ -=+---+ = 1 2 2/11 )1(0 )(0 1 ) (2 2 1k j j k k k x f h T T ; 步3(加速) 求加速值:计算 )(1 )1(1 )(1 411 44 j k j j j k j j j j k j T T T --+----- -= , ),,2,1(k j =; 步4 精度检验:对指定的精度 ε,若 ε <--)0(1 )0(k k T T ,则终止计算,并取) 0(k T 作为所求的结果;否则置1:+=k k , h h 21:= ,转步2。

计算次序: (0)0 T 第1次循环 二分:(1)0 T 加速:(0) 1T 第2次循环 二分:(2) 1 T 加速:(1) (0)12 ,T T 第3次循环 二分:(3)2 T 加速:(2) (1)(0)12 3 ,,T T T 第4次循环 二分:(4)3 T

龙贝格方法

实验三 龙贝格方法 【实验内容】1. 理解龙贝格方法的基本思路 2. 用龙贝格方法设计算法,编程求解一个数值积分的问题。 【实验方法与步骤】(对于必须编写计算机程序的实验,要附上学生自己编写的程序) 1. 龙贝格方法的基本思路 龙贝格方法是在积分区间逐次二分的过程中,通过对梯形之值进行加速处理, 从而获得高精度的积分值。 2. 龙贝格方法的算法 步骤1 准备初值()f a 和()f b ,用梯形计算公式计算出积分近似值 ()()12 b a T f a f b -=+???? 步骤2 按区间逐次分半计算梯形公式的积分近似值 令 2i b a h -= ,0,1,2,...i = 计算 1 2102122n n n i i h T T f x -+=??=+ ??? ∑,2i n = 步骤3 按下面的公式积分(为便于编程,写下列形式) 梯形公式:()223 n n n n T T S T -=+ 辛普生公式:()2215 n n n n S S C S -=+ 龙贝格公式:()2263 n n n n C C R C -=+ 步骤4 精度控制 当2n n R R ε-<,(ε为精度)时,终止计算,并取2n R 为近似值,否则,将

步长折半,转步骤2。 #include #include float f(float ) { return 4/(1+x*x); } float Romberg(float a,float b,float( * f)(float),float eps) { int n=1,k; float h=b-a,y,temp; float T1,T2,S1,S2,C1,C2,R1,R2; T1=(b-a)/2*(( * f)(a)+( * f)(b)); while(1) { temp=0; for(k=0;k<=n-1;k++) { y=a+k*h+h/2; temp+=( * f)(y); } T2=(T1+temp*h)/2;

龙贝格积分matlab代码

1、 题目:使用Romberg 积分,对于? +4802)cos (1dx x 计算下列各近似值。 a.确定1,51,41,31,21,1,,,,R R R R R b.确定5,54,43,32,2,,,R R R R c.6,65,64,63,62,61,6,,,,,R R R R R R d.确定10,109,98,87,7,,,R R R R n=5; a=0; b=48; h(1,1)=b-a; disp('-------求R11,R21,R31,R41,R51-----------'); fa=sqrt(1+(cos(a))^2); fb=sqrt(1+(cos(b))^2); r(1,1)=h(1,1)/2*(fa+fb); disp('R11,R21,R31,R41,R51分别为'); disp(r(1,1)); for i=2:n h(i,1)=(b-a)/(2^(i-1)); sum=0; for k=1:2^(i-2) x=a+(2*k-1)*h(i,1); sum=sum+sqrt(1+(cos(x)).^2); end r(i,1)=0.5*(r(i-1,1)+h(i-1,1)*sum); disp(r(i,1)); end disp('-----求R22,R33,R44,R55---------'); disp('R22,R33,R44,R55分别为'); for k=2:n for j=2:k r(k,j)=r(k,j-1)+(r(k,j-1)-r(k-1,j-1))/(4^(j-1)-1); end disp(r(k,k)); end disp('-----R61,R62,R63,R64,R65,R66-----'); disp('R61,R62,R63,R64,R65,R66分别为'); n=6; for i=2:n h(i,1)=(b-a)/(2^(i-1)); sum=0;

相关主题
文本预览
相关文档 最新文档