Romberg(龙贝格)求积公式求解数值积分时的注意事项

article/2025/10/1 21:32:58

《数值分析》第5版(李庆扬编著)的第四章课后习题第8-(2)题中,要求使用Romberg(龙贝格)求积公式求解f(x)=xsinx在区间[0,2pi]上的积分,要求误差小于10^(-5)。

针对此问题,套用计算公式求解即可。在第一步计算梯形公式时,出现了T0=pi*[f(0)+f(2pi)]。很显然,若按照sin(2pi)=sin(pi)=0计算,则Romberg(龙贝格)求积公式T0列前三个数值均会出现0,从而造成计算收敛速度较慢,需要迭代多次。(实际计算迭代次数大于10次时,依旧不能满足误差小于10^(-5)的条件)。

针对此问题,上述计算过程应对pi指定有效位数,化作有理数求解。本题中由于题目条件要求误差小于10^(-5),故pi可以取6位小数或大于等于6位小数。本文中取7位小数,以pi=3.1415927为例进行计算,此时计算只需迭代5次,即可满足题目条件。下面给出对应的matlab程序

m_pi=3.1415927;   %取7位小数
t0=m_pi*(2*m_pi*sin(2*m_pi));   % T00   k=0
t0=vpa(t0,8)N=2;    %k=1
j=1;
sum=0;
for i=1:1:Nsum=sum+((j*m_pi/N)*(sin(j*m_pi/N)));j=j+2;
end
sum=sum*m_pi/(N);
t1=t0/2+sum;
t1=vpa(t1,8)   %t01N=4;  %k=2
j=1;
sum=0;
for i=1:1:Nsum=sum+((j*m_pi/N)*(sin(j*m_pi/N)));j=j+2;
end
sum=sum*m_pi/(N);
t2=t1/2+sum;
t2=vpa(t2,8)    %t02N=8;  %k=3
j=1;
sum=0;
for i=1:1:Nsum=sum+((j*m_pi/N)*(sin(j*m_pi/N)));j=j+2;
end
sum=sum*m_pi/(N);
t3=t2/2+sum;
t3=vpa(t3,8)    %t03N=16;  %k=4
j=1;
sum=0;
for i=1:1:Nsum=sum+((j*m_pi/N)*(sin(j*m_pi/N)));j=j+2;
end
sum=sum*m_pi/(N);
t4=t3/2+sum;
t4=vpa(t4,8)    %t04N=32;  %k=5
j=1;
sum=0;
for i=1:1:Nsum=sum+((j*m_pi/N)*(sin(j*m_pi/N)));j=j+2;
end
sum=sum*m_pi/(N);
t5=t4/2+sum;
t5=vpa(t5,8)    %t05N=64;  %k=6
j=1;
sum=0;
for i=1:1:Nsum=sum+((j*m_pi/N)*(sin(j*m_pi/N)));j=j+2;
end
sum=sum*m_pi/(N);
t6=t5/2+sum;
t6=vpa(t6,8)    %t06%%  T1x
a0=(4/3)*(t1)-(1/3)*(t0);
a1=(4/3)*(t2)-(1/3)*(t1);
a2=(4/3)*(t3)-(1/3)*(t2);
a3=(4/3)*(t4)-(1/3)*(t3);
a4=(4/3)*(t5)-(1/3)*(t4);
a5=(4/3)*(t6)-(1/3)*(t5);
a0=vpa(a0,8)
a1=vpa(a1,8)
a2=vpa(a2,8)
a3=vpa(a3,8)
a4=vpa(a4,8)
a5=vpa(a5,8)%%  T2x
b0=(16/15)*(a1)-(1/15)*(a0);
b1=(16/15)*(a2)-(1/15)*(a1);
b2=(16/15)*(a3)-(1/15)*(a2);
b3=(16/15)*(a4)-(1/15)*(a3);
b4=(16/15)*(a5)-(1/15)*(a4);
b0=vpa(b0,8)
b1=vpa(b1,8)
b2=vpa(b2,8)
b3=vpa(b3,8)
b4=vpa(b4,8)%% T3x
c0=(64/63)*(b1)-(1/63)*(b0);
c1=(64/63)*(b2)-(1/63)*(b1);
c2=(64/63)*(b3)-(1/63)*(b2);
c3=(64/63)*(b4)-(1/63)*(b3);
c0=vpa(c0,8)
c1=vpa(c1,8)
c2=vpa(c2,8)
c3=vpa(c3,8)%% T4x
d0=(256/255)*(c1)-(1/255)*(c0);
d1=(256/255)*(c2)-(1/255)*(c1);
d2=(256/255)*(c3)-(1/255)*(c2);
d0=vpa(d0,8)
d1=vpa(d1,8)
d2=vpa(d2,8)%% T5x
e0=(1024/1023)*(d1)-(1/1023)*(d0);
e1=(1024/1023)*(d2)-(1/1023)*(d1);
e0=vpa(e0,8)
e1=vpa(e1,8)%% T6x
f0=(4096/4095)*(e1)-(1/4095)*(e0);
f0=vpa(f0,8)
运行上述程序,会发现只需迭代5次,即可满足误差要求,计算结果为-6.2831853,计算表格如下表所示。
khT0T1T2T3T4T5
02pi0.0000018322016     
1pi-4.9348014-6.5797359    
2pi/2-5.9568328-6.29751-6.2786949   
3pi/4-6.2022313-6.2840308-6.2831322-6.2832026  
4pi/8-6.2629859-6.2832374-6.2831845-6.2831853-6.2831852 
5pi/16-6.2781379-6.2831885-6.2831853-6.2831853-6.2831853-6.2831853

此外,本文给出计算Romberg(龙贝格)求积公式的C++程序,如下所示【标注:该程序数据类型需进一步完善--modified 2015-11-22】。

#include<iostream>
#include<math.h>
using namespace std;# define Precision 0.00001//积分精度要求
# define e         2.71828183
#define  MAXRepeat 100  //最大允许重复double function(double x)//被积函数
{double s;s = x* sin(x);return s;
}double Romberg(double a, double b, double f(double x))
{int m, n, k;double 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 = Precision + 1;int num = 0;while ((ep >= Precision) && (m<MAXRepeat)){p = 0.0;for (k = 0; k<n; k++){xk = a + (k + 0.5)*h; //   n-1p = p + f(xk);      //计算∑f(xk+h/2),T}                   //   k=0p = (y[0] + h*p) / 2.0;  //T`m`(h/2),变步长梯形求积公式s = 1.0;for (k = 1; k <= m; k++){s = 4.0*s;// pow(4,m)q = (s*p - y[k - 1]) / (s - 1.0);//[pow(4,m)T`m`(h/2)-T`m`(h)]/[pow(4,m)-1],2m阶牛顿柯斯特公式,即龙贝格公式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;//二倍分割区间num++;}cout <<"迭代次数为"<< num <<"次"<< endl;return q;
}
int   main()
{double a, b, Result;cout << "请输入积分下限:" << endl;cin >> a;cout << "请输入积分上限:" << endl;cin >> b;Result = Romberg(a, b, function);cout << "龙贝格积分结果:" << Result << endl;system("pause");return 0;
}
程序运行结果如下图所示。




      


http://chatgpt.dhexx.cn/article/CSCAwPVs.shtml

相关文章

勒贝格测度(转)

数学上&#xff0c;勒贝格测度是赋予欧几里得空间的子集一个长度、面积、或者体积的标准方法。它广泛应用于实分析&#xff0c;特别是用于定义勒贝格积分。可以赋予一个体积的集合被称为勒贝格可测&#xff1b;勒贝格可测集A的体积或者说测度记作λ(A)。一个值为∞的勒贝格测度…

利用Matlab编写龙贝格算法(romberg)求函数积分

这次是我初次接触matlab&#xff0c;源于数学老师布置的一个作业&#xff1a;用龙贝格算法来计算函数的积分。 具体的计算原理&#xff0c;由于是数学的东西&#xff0c;不好打印&#xff0c;就不写了。主要把自己的代码贴下来慢慢理解。 一共写了两个文件。一个是romberg.m主要…

数值计算笔记之数值积分(二)龙贝格算法

龙贝格求积公式也称为逐次分半加速法。它是在梯形公式、辛普森公式和柯特斯公式之间的关系的基础上&#xff0c;构造出一种加速计算积分的方法。 作为一种外推算法&#xff0c;它在不增加计算量的前提下提高了误差的精度。 在等距基点的情况下&#xff0c;用计算机计算积分值通…

高斯-勒让德积分学习

高斯-勒让德积分求解函数积分 前言高斯-勒让德积分一般积分区间的归一化Exponential Integral实验参考 前言 梯度和辛普森是经典的几何求积分方法&#xff0c;简单易懂&#xff0c;那如果要更加高档&#xff08;复杂难懂&#xff09;的求积分方法找哪家了&#xff1f;高斯-勒让…

数值积分公式及龙贝格(Romberg)算法实现matlab

一、数值积分方法得基本思想 二、复化求积公式 三、基于复化梯形求积公式的高精度求积算法——Richardson外推法和Romberg算法 四、Romberg算法的matlab程序&#xff1a; function Romberg % 龙贝格(Romberg数值求解公式) % inputs: % -fun&#xff1a;积分函数句柄 % -a/…

数值积分:龙贝格求积

一、数学原理 在变步长的复化梯形计算过程中运用&#xff1a; 就能将粗糙的梯形值Tn逐步加工成精度较高的辛普森值Sn、柯特斯值Cn和龙贝格值Rn。或者说&#xff0c;将收敛缓慢的梯形值序列Tn加工成收敛迅速的龙贝格值序列Rn&#xff0c;这种线性外推的加速方法称为龙贝格算法&…

数值积分之龙贝格积分

除了复化求积外&#xff0c;这里用龙贝格积分法进行近似求积&#xff0c;其原理与埃特金插值有些类似&#xff0c;进行线性整合后使结果具有高精度的求积效果。在实际过程中&#xff0c;由于对于评判合理步长的困难&#xff0c;我们常采取变步长的办法进行计算&#xff0c;使结…

积分极限定理+勒贝格控制收敛定理+高数

在处理积分与极限的交换顺序问题上&#xff0c;勒贝格积分比黎曼积分要求的条件要弱的多&#xff08;并且条件更易于验证&#xff09; 积分与极限交换顺序的定理&#xff1a; 控制收敛定理 { f n ( x ) } 为 E 上 的 一 列 可 测 函 数 \{ f_n(x)\}为E上的一列可测函数 {fn​(…

[转]勒贝格积分的框架与通俗理解

为什么会出现勒贝格积分 这个问题等价于勒贝格积分和黎曼积分有什么区别。其实这个区别没有那么玄&#xff0c;反而很好解释。问题的根源在于黎曼积分的定义上。黎曼积分&#xff1a;.黎曼积分是在轴上做的分割&#xff0c;虽然可以分割得很细&#xff0c;但只要被积函数在这个…

实变函数自制笔记9:勒贝格积分的极限定理

1、非负可测函数积分的极限&#xff1a; 背景&#xff1a;在数学分析里&#xff0c;函数列极限函数黎曼可积性有这样的表述&#xff1a;&#xff0c;且每个均在上可积函数列的极限函数也在上可积&#xff1b;从而有这样的公式&#xff1a;&#xff1b;那我们会想&#xff0c;勒…

实变函数自制笔记8:初识勒贝格积分

1、勒贝格&#xff08;Lebesgue&#xff09;积分&#xff1a; 背景&#xff1a;勒贝格积分是在勒贝格测度论的基础上建立起来的&#xff0c;这一理论可以统一处理函数有界、无界的情形&#xff0c;且函数也可以定义在更一般的点集&#xff08;不一定是&#xff09;上&#xff…

python三阶魔方_三阶魔方还原公式

1. 第二层棱块归位&#xff1a; 2. 顶层十字 3. 顶层棱中间块归位 这一步的目的是使顶层的4个棱中间块全部归位。 转动顶层(U)&#xff0c;若可以使一个棱中间块归位(如下图左&#xff0c;这里以[红-黄]块为例)&#xff0c;而其他3个都不能归位&#xff0c;则将[红-黄]所在这一…

QA和QC到底是什么区别?

QA和QC到底是什么区别? 发现迄今为止,仍然有很多工程师,甚至很多的企业对QA和QC的概念仍然非常的模糊不清.两个概念也经常性的混淆,特别是在互联网公司,那么今天小编这里就对QA和QC到底有什么区别,展开一下讨论. 在讲到软件工程体系中的时候,我们不仅要延伸到从最早通过简单…

生产追溯系统-IQC来料检验

相信大家都知道&#xff0c;任何一家工厂都有自己的仓库&#xff0c;用来存储采购回来的物料&#xff0c;那么在供应商将我们采购的物料送到工厂之后&#xff0c;我们都需要一个检验动作&#xff0c;也就是>IQC来料检验&#xff0c;这个检验动作是非常重要的一个环节&#x…

质量控制之室内质控(IQC)和室间质评(EQA)

检验医学——中华检验医学网旗下微信公众平台。您的随身微杂志。 很多人都有过这样的经历&#xff1a;拿着做过的医疗检查单换一家医院看病&#xff0c;所有的检查还得重做。对患者来说&#xff0c;过多的医疗检查也是造成看病难、看病贵的因素之一。为贯彻落实国务院办公厅《关…

ERP的IQC检验

ERP IQC检验是一种全面的物料质量控制机制&#xff0c;旨在保证入库前货物都能够符合质量要求。它涉及及时检验物料的质量以及根据检验的结果判断是否需要发货或回退。 ERP中的IQC检验内容 IQC模块使企业能够进行质量检查&#xff0c;确保产品质量&#xff0c;以满足客户的需…

工厂里常说的QC, IQC, IPQC, QA 简介

一、QC与QA QC&#xff1a;Quality Control&#xff0c;品质控制&#xff0c;产品的质量检验&#xff0c;发现质量问题后的分析、改善和不合格品控制相关人员的总称。 IQC&#xff1a;意思是来料的质量控制 IPQC&#xff1a;过程质量控制。 FQC&#xff1a;成品质量检验 O…

【spring】Spring是什么?

一.Spring的简介 Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。 然而&#xff0c;Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言&#xff0c;绝大部分Java应用都可以从Spring中…

Spring是什么意思?

Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。 Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序…

Java之Spring

目录 创建spring项目存储bean对象到容器&#xff08;spring&#xff09;中从spring中将bean取出更简单的读取存储对象存储bean对象前置准备添加注解存储 Bean 对象 获取bean对象 bean作用域和生命周期定义bean的6种作用域bean生命周期 IOC优点&#xff1a;实现代码的解耦&#…