龙贝格积分法及其应用编程
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2 集成龙贝格积分法的抽象类设计
这个类的设计非常简单。其类的声明和实现代 码如下:
class CRomberg { public:
CRomberg();
·98·
virtual  ̄CRomberg(); double GetRombergintegral (double a, double b, double eps=1.0e- 6); virtual double integral_funcation(double x) = 0;//纯虚函数 }; 在 类 CRomberg 中 , 被 积 函 数 integral_funcation (double x)设置为一个纯虚函数 , 因 此 , 类 CRomberg 是一个抽象类。使用时必须根据被积函数派生新的 求积分类。这个类没有数据成员, 成员函数 double GetRombergintegral (double a, double b, double eps= 1.0e - 6) 的 实 现 代 码 见 前 面 函 数 double Romberg (double a, double b, double eps)。 尽管从类的定义中看非常简单, 但具体使用中 仍然麻烦, 因为需要根据不同的被积函数, 重载函数 virtual double integral_funcation (double x); 否 则 这 个 类是不能用于声明对象。我们建议, 根据强调积分过 程或强调积分结果决定类的派生方法。
参考文献 [1]沈 剑 华 .数 值 计 算 基 础 [M].上 海 :同 济 大 学 出 版 社 ,1999. [2]徐 士 良 .常 用 算 法 程 序 集 [M].北 京 :清 华 大 学 出 版 社 ,2004.
On R om b e r g I n t e gr a l M e t h od a n d I t s Ap p lica t ion
龙贝格积分函数, 函数的形式参数 double a 为积分
的下限, double b 为积分上限, double eps 为积分的
精度要求, 返回积分值。
double Romberg(double a, double b, double eps)
{
int m, n, i, k;
double y[11], h, ep, p, x, s, q;
以
q= 1 2
取序列
Tm+1(h)=
4m·Tm(
h 2
4m-
)- 1
Tn(h)
,
(
m=1,
2,
…)
(4)
用 Tm+1(h)来逼近 I 的误差为 O(h2(m+1)), 这种算法就是 龙贝格算法。
1.2 龙贝格积分算法 C 语言代码分析
下 面 的 实 型 函 数 Romberg 是 用 C 语 言 编 写 的
的截断误差是
I- T1(h)=a1h2+a2h4+…+akh2k+…
(2)
其中 ak 是与 h 无关的常数。
按李查逊外推法
$&&F1(h)=F(h)
&
& %
&&Fm+1(h)=
& & ’
Fm(qh)- 1-
qpm
pm
q
Fm(h)
, m=1, 2, …
(3)
其中, q 为满足 1- qpm≠0(m=1, 2, …)的适当正数。
LIU YU- juan CHEN Ying- zu LU Ke- gong (Chongqing University of Science and Technology,Chongqing 400042) Abstr act:This paper analyzes arithmetic method of Romberg Integral,and designs an adstract class to accomplish it. At last it introduces how to use the adstract class with 2 instances. Key wor ds:Richardson Extrapolation;Romberg Integral;abstract class
参考文献 [ 1] 弗雷德里克·S·希利尔等著.数据、模型与决策[M].北京:
中国财政经济出版社, 2004.
An Example of Auxiliary Management with Software EXCEL
SUN Jian- hua ( Huaiyin Normal University, Huaian 223001) Abstr act: Combined with the practical situation of campus relocation, this paper builds data model with saftware EXCEL and optimizes management on campus relocation. Key wor ds: EXCEL; auxiliary management; mathematical model
3 应用举例
!1
求 f(x)= x2dx 的积分。 0
方法一: 强调积分过程的派生类的声明。 //根据被积函数派生一个积分类 Cyz1 class Cyz1: public CRomberg { public:
virtual double integral_funcation(double x) {
·97·
刘玉娟, 陈应祖, 卢克功: 龙贝格积分法及其应用编程
{ p=0.0;
for (i=0; i<=n- 1; i++) {
x=a+(i+0.5)*h; p=p+integral funcation(x); } p=(y[0]+h*p)/2.0; s=1.0; for (k=1; k<=m; k++) {
刘玉娟, 陈应祖, 卢克功: 龙贝格积分法及其应用编程
//根据被积函数派生一个积分类 Cyz2 class Cyz2: public CRomberg {
virtual double integral_funcation(double x) {
return x*x; } }; Cyz2 Obj; double y=Obj.GetRombergintegral(1, 3); cout<<y<<endl; return 0; }
积分必须针对具体的被积函数。面向工程问题, 被积函数的形式是复杂多样的, 数值积分程序代码 只能针对已知的被积函数一一进行编写。就龙贝格 积分法而言, 除了被积函数不同, 积分过程是相同 的。用面向对象程序设计方法, 能够把龙贝格数值积 分过程封装在一个类中, 应用时针对不同的被积函 数进行类的派生, 重载被积函数, 提高龙贝格积分过 程的代码重用。我们在东部 — 凝析气井数据分析 课题中进行了这种尝试, 效果良好。
摘 要:分析龙贝格数值积分算法, 设计实现龙贝格数值积分的抽象类, 并用 2 个实例介绍了抽象类的使用。
关键词: 李查逊外推法; 龙贝格积分法; 抽象类
中图分类号: O241
文献标识码: A
文章编号: 1673- 1980( 2007) 01- 0097- 03
典型的数值积分方法有牛顿- 柯 斯 特 (Newto- Cotes)、龙贝格( Romberg) 和高斯( Gauss) 法。非周期 函数的积分, 一般使用牛顿- 柯斯特法或龙贝格法。 龙贝格积分法精度比牛顿- 柯斯特法高, 收敛速度 快, 且易于编程。工程上一般首选龙贝格积分法。
结语通过对管理工作的分析并建立数学模型运用excel的规划求解工具管理部门清楚地观察到搬迁工作的计划运营情况找出了搬迁工作的关键所在使本来难以预见的问题变得清晰明了从而给管理工作提供了强大支持
第9卷 第1期
重庆科技学院学报( 自然科学版)
2007 年 3 月
龙贝格积分法及其应用编程
刘玉娟 陈应祖 卢克功 (重庆科技学院, 重庆 400042)
h=b- a;
y[0]=h*(integral funcation(a)+integral funcation(b))/
2.0;
m=1;
n=1;
ep=eps+1.0;
while ((ep>=eps)&&(m<=10))
收稿日期: 2005- 11- 04 作者简介: 刘玉娟( 1962- ) , 女, 四川荣县人, 重庆科技学院石油工程学院实验师。
( 上接第 96 页)
束。点击选项, 确认“采用线性模型”和假定非负, 确 定即可点击求解, 得出在计划日期范围内各搬迁日 安排的车次数。从表 3 可以看出, 为了在规定的时 间内搬迁完毕, 在未安排搬迁的时间设置了一个很 大 的 值 ( 9 999) ; 但 经 求 解 , 搬 迁 总 费 用 为 127 198 元, 在搬迁模型 1 中法律系在 7 月 15 日安排了搬 迁, 超出了计划日期, 这说明在目前的时间和资源条 件下, 无法完成搬迁任务。
1 龙贝格积分法及程序代码分析
1.1 龙贝格积分算法
!b
设用复合梯形计算积分 I= f (x)dx 的近似值, a
取步长 h= b- a n
, 并记 T1(h)=Tn, 则有
n- 1
# I≈T1(h)=
h 2
[f(a)+2 f(xi)+f(b)]
i=1
(1)
当 f(x)在[a, b]上充分光滑时, 可证用 T1(h)逼近 I
s=4.0*s; 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; h=h/2.0; } return(q); } 在 函 数 Romberg 中 三 处 调 用 了 被 函 数 inte- gral_funcation(x)。被函数 integral_funcation 的定义格 式 为 double integral_funcation(double x),实 现 代 码 根 据具体的被函数编写。 针对不同的被积函数, 要提高上述代码的重用 率, 需要向函数 Romberg 引入被函数 integral_funca- tion(x), 方法有两种: 一是修改函数 Romberg 的定义 格式为 double Romberg (double ( *pF_integral_funca- tion) (double x),double a, double b, double eps), 其 中 double ( * pF_integral_funcation) (double x) 中 的 pF_integral_funcation 为被积函数指针; 二是使用面 向对象的程序设计方法, 把龙贝格积分算法封装在 类中, 并把 double integral_funcation(double x)被积函 数声明为一个纯虚函数, 构成一个抽象类, 根据具体 的被积函数, 重载被积函数。
return x*x; //被积函数 y=x*x; } }; int main() { Cyz1 Obj; double y=Obj.GetRombergintegral(0, 1); cout<<y<<endl; return 0; } 方法二: 强调积分结果的派生类 ( 临时类的声 明) 。 出使用简单, 且灵活。
4 结论
龙贝格数值积分法收剑速度快, 积分精度高, 编 程实现容易;使用面向对象程序设计方法, 回避了函 数指针的使用, 降低了编程调试的难度, 增加了使用 龙贝格积分法的灵活性。值得一提的是应用实例 2 的方法, 类 Cyz2 的生存期在函数 main 中, 仅仅函数 main 执行时类 Cyz2 存在, 其它函数执行时类 Cyz2 不存在, 这样减少了应用程序对内存的占用时间。
·99·
4 结语
通过对管理工作的分析并建立数学模型, 运用
EXCEL 的规划求解工具, 管理部门清楚地观察到搬 迁工作的计划运营情况, 找出了搬迁工作的关键所 在, 使本来难以预见的问题变得清晰明了, 从而给管 理工作提供了强大支持。这正是 EXCEL 软件在辅 助管理工作的魅力所在, 随着管理学对 EXCEL 软 件认识的不断深入, 它也必将在各行各业的管理工 作中得到越来越广泛的应用。
这个类的设计非常简单。其类的声明和实现代 码如下:
class CRomberg { public:
CRomberg();
·98·
virtual  ̄CRomberg(); double GetRombergintegral (double a, double b, double eps=1.0e- 6); virtual double integral_funcation(double x) = 0;//纯虚函数 }; 在 类 CRomberg 中 , 被 积 函 数 integral_funcation (double x)设置为一个纯虚函数 , 因 此 , 类 CRomberg 是一个抽象类。使用时必须根据被积函数派生新的 求积分类。这个类没有数据成员, 成员函数 double GetRombergintegral (double a, double b, double eps= 1.0e - 6) 的 实 现 代 码 见 前 面 函 数 double Romberg (double a, double b, double eps)。 尽管从类的定义中看非常简单, 但具体使用中 仍然麻烦, 因为需要根据不同的被积函数, 重载函数 virtual double integral_funcation (double x); 否 则 这 个 类是不能用于声明对象。我们建议, 根据强调积分过 程或强调积分结果决定类的派生方法。
参考文献 [1]沈 剑 华 .数 值 计 算 基 础 [M].上 海 :同 济 大 学 出 版 社 ,1999. [2]徐 士 良 .常 用 算 法 程 序 集 [M].北 京 :清 华 大 学 出 版 社 ,2004.
On R om b e r g I n t e gr a l M e t h od a n d I t s Ap p lica t ion
龙贝格积分函数, 函数的形式参数 double a 为积分
的下限, double b 为积分上限, double eps 为积分的
精度要求, 返回积分值。
double Romberg(double a, double b, double eps)
{
int m, n, i, k;
double y[11], h, ep, p, x, s, q;
以
q= 1 2
取序列
Tm+1(h)=
4m·Tm(
h 2
4m-
)- 1
Tn(h)
,
(
m=1,
2,
…)
(4)
用 Tm+1(h)来逼近 I 的误差为 O(h2(m+1)), 这种算法就是 龙贝格算法。
1.2 龙贝格积分算法 C 语言代码分析
下 面 的 实 型 函 数 Romberg 是 用 C 语 言 编 写 的
的截断误差是
I- T1(h)=a1h2+a2h4+…+akh2k+…
(2)
其中 ak 是与 h 无关的常数。
按李查逊外推法
$&&F1(h)=F(h)
&
& %
&&Fm+1(h)=
& & ’
Fm(qh)- 1-
qpm
pm
q
Fm(h)
, m=1, 2, …
(3)
其中, q 为满足 1- qpm≠0(m=1, 2, …)的适当正数。
LIU YU- juan CHEN Ying- zu LU Ke- gong (Chongqing University of Science and Technology,Chongqing 400042) Abstr act:This paper analyzes arithmetic method of Romberg Integral,and designs an adstract class to accomplish it. At last it introduces how to use the adstract class with 2 instances. Key wor ds:Richardson Extrapolation;Romberg Integral;abstract class
参考文献 [ 1] 弗雷德里克·S·希利尔等著.数据、模型与决策[M].北京:
中国财政经济出版社, 2004.
An Example of Auxiliary Management with Software EXCEL
SUN Jian- hua ( Huaiyin Normal University, Huaian 223001) Abstr act: Combined with the practical situation of campus relocation, this paper builds data model with saftware EXCEL and optimizes management on campus relocation. Key wor ds: EXCEL; auxiliary management; mathematical model
3 应用举例
!1
求 f(x)= x2dx 的积分。 0
方法一: 强调积分过程的派生类的声明。 //根据被积函数派生一个积分类 Cyz1 class Cyz1: public CRomberg { public:
virtual double integral_funcation(double x) {
·97·
刘玉娟, 陈应祖, 卢克功: 龙贝格积分法及其应用编程
{ p=0.0;
for (i=0; i<=n- 1; i++) {
x=a+(i+0.5)*h; p=p+integral funcation(x); } p=(y[0]+h*p)/2.0; s=1.0; for (k=1; k<=m; k++) {
刘玉娟, 陈应祖, 卢克功: 龙贝格积分法及其应用编程
//根据被积函数派生一个积分类 Cyz2 class Cyz2: public CRomberg {
virtual double integral_funcation(double x) {
return x*x; } }; Cyz2 Obj; double y=Obj.GetRombergintegral(1, 3); cout<<y<<endl; return 0; }
积分必须针对具体的被积函数。面向工程问题, 被积函数的形式是复杂多样的, 数值积分程序代码 只能针对已知的被积函数一一进行编写。就龙贝格 积分法而言, 除了被积函数不同, 积分过程是相同 的。用面向对象程序设计方法, 能够把龙贝格数值积 分过程封装在一个类中, 应用时针对不同的被积函 数进行类的派生, 重载被积函数, 提高龙贝格积分过 程的代码重用。我们在东部 — 凝析气井数据分析 课题中进行了这种尝试, 效果良好。
摘 要:分析龙贝格数值积分算法, 设计实现龙贝格数值积分的抽象类, 并用 2 个实例介绍了抽象类的使用。
关键词: 李查逊外推法; 龙贝格积分法; 抽象类
中图分类号: O241
文献标识码: A
文章编号: 1673- 1980( 2007) 01- 0097- 03
典型的数值积分方法有牛顿- 柯 斯 特 (Newto- Cotes)、龙贝格( Romberg) 和高斯( Gauss) 法。非周期 函数的积分, 一般使用牛顿- 柯斯特法或龙贝格法。 龙贝格积分法精度比牛顿- 柯斯特法高, 收敛速度 快, 且易于编程。工程上一般首选龙贝格积分法。
结语通过对管理工作的分析并建立数学模型运用excel的规划求解工具管理部门清楚地观察到搬迁工作的计划运营情况找出了搬迁工作的关键所在使本来难以预见的问题变得清晰明了从而给管理工作提供了强大支持
第9卷 第1期
重庆科技学院学报( 自然科学版)
2007 年 3 月
龙贝格积分法及其应用编程
刘玉娟 陈应祖 卢克功 (重庆科技学院, 重庆 400042)
h=b- a;
y[0]=h*(integral funcation(a)+integral funcation(b))/
2.0;
m=1;
n=1;
ep=eps+1.0;
while ((ep>=eps)&&(m<=10))
收稿日期: 2005- 11- 04 作者简介: 刘玉娟( 1962- ) , 女, 四川荣县人, 重庆科技学院石油工程学院实验师。
( 上接第 96 页)
束。点击选项, 确认“采用线性模型”和假定非负, 确 定即可点击求解, 得出在计划日期范围内各搬迁日 安排的车次数。从表 3 可以看出, 为了在规定的时 间内搬迁完毕, 在未安排搬迁的时间设置了一个很 大 的 值 ( 9 999) ; 但 经 求 解 , 搬 迁 总 费 用 为 127 198 元, 在搬迁模型 1 中法律系在 7 月 15 日安排了搬 迁, 超出了计划日期, 这说明在目前的时间和资源条 件下, 无法完成搬迁任务。
1 龙贝格积分法及程序代码分析
1.1 龙贝格积分算法
!b
设用复合梯形计算积分 I= f (x)dx 的近似值, a
取步长 h= b- a n
, 并记 T1(h)=Tn, 则有
n- 1
# I≈T1(h)=
h 2
[f(a)+2 f(xi)+f(b)]
i=1
(1)
当 f(x)在[a, b]上充分光滑时, 可证用 T1(h)逼近 I
s=4.0*s; 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; h=h/2.0; } return(q); } 在 函 数 Romberg 中 三 处 调 用 了 被 函 数 inte- gral_funcation(x)。被函数 integral_funcation 的定义格 式 为 double integral_funcation(double x),实 现 代 码 根 据具体的被函数编写。 针对不同的被积函数, 要提高上述代码的重用 率, 需要向函数 Romberg 引入被函数 integral_funca- tion(x), 方法有两种: 一是修改函数 Romberg 的定义 格式为 double Romberg (double ( *pF_integral_funca- tion) (double x),double a, double b, double eps), 其 中 double ( * pF_integral_funcation) (double x) 中 的 pF_integral_funcation 为被积函数指针; 二是使用面 向对象的程序设计方法, 把龙贝格积分算法封装在 类中, 并把 double integral_funcation(double x)被积函 数声明为一个纯虚函数, 构成一个抽象类, 根据具体 的被积函数, 重载被积函数。
return x*x; //被积函数 y=x*x; } }; int main() { Cyz1 Obj; double y=Obj.GetRombergintegral(0, 1); cout<<y<<endl; return 0; } 方法二: 强调积分结果的派生类 ( 临时类的声 明) 。 出使用简单, 且灵活。
4 结论
龙贝格数值积分法收剑速度快, 积分精度高, 编 程实现容易;使用面向对象程序设计方法, 回避了函 数指针的使用, 降低了编程调试的难度, 增加了使用 龙贝格积分法的灵活性。值得一提的是应用实例 2 的方法, 类 Cyz2 的生存期在函数 main 中, 仅仅函数 main 执行时类 Cyz2 存在, 其它函数执行时类 Cyz2 不存在, 这样减少了应用程序对内存的占用时间。
·99·
4 结语
通过对管理工作的分析并建立数学模型, 运用
EXCEL 的规划求解工具, 管理部门清楚地观察到搬 迁工作的计划运营情况, 找出了搬迁工作的关键所 在, 使本来难以预见的问题变得清晰明了, 从而给管 理工作提供了强大支持。这正是 EXCEL 软件在辅 助管理工作的魅力所在, 随着管理学对 EXCEL 软 件认识的不断深入, 它也必将在各行各业的管理工 作中得到越来越广泛的应用。