Romberg龙贝格算法实验报告.
龙贝格求 积分

龙贝格(Romberg )求积法1.算法理论Romberg 求积方法是以复化梯形公式为基础,应用Richardson 外推法导出的数值求积方法。
由复化梯形公式 )]()(2)([2222b f h a f a f h T +++=可以化为)]()]()([2[212112h a f h b f a f hT +++==)]([21211h a f h T ++一般地,把区间[a,b ]逐次分半k -1次,(k =1,2,……,n)区间长度(步长)为kk m a b h -=,其中mk =2k -1。
记k T =)1(k T由)1(k T =]))12(([21211)1(1∑=---++km j k k k h j a f h T 从而⎰badxx f )(=)1(kT-)(''122k f h a b ξ- (1)按Richardson 外推思想,可将(1)看成关于k h ,误差为)(2k h O 的一个近似公式,因而,复化梯形公式的误差公式为⎰badxx f )(-)1(k T =......4221++kkh K h K =∑∞=12i i k i h K (2)取1+k h =k h 21有 ⎰ba dx x f )(-)1(1+k T =∑∞=+121221i ik ii hK (3)误差为)(2jh O 的误差公式 )(j kT=)1(-j kT+141)1(1)1(------j j k j k T T2。
误差及收敛性分析(1)误差,对复化梯形公式误差估计时,是估计出每个子区间上的误差,然后将n 个子区间上的误差相加作为整个积分区间上的误差。
(2)收敛性,记h x i =∆,由于∑=++=ni i i n x f x f h f T 01))]()([2)(=))()((21101∑∑-==∆+∆n i ni i i i i x x f x x f上面两个累加式都是积分和,由于)(x f 在区间],[b a 上可积可知,只要],[b a 的分划的最大子区间的长度0→λ时,也即∞→n 时,它们的极限都等于积分值)(f I 。
龙贝格实验报告

龙贝格实验报告龙贝格实验报告龙贝格实验是一项经典的心理学实验,旨在探究人类对于延迟满足的选择行为。
实验的设计非常简单,但却能揭示出人类的心理特点和决策模式。
本文将对龙贝格实验进行介绍,并探讨实验结果对于我们日常生活中的决策行为的启示。
龙贝格实验最早由德国心理学家沃尔夫冈·龙贝格于1971年提出,他将实验对象置于一个选择情境中。
在这个情境中,实验对象需要在两个选项之间进行选择,一方面是能够立即获得一定的奖励,另一方面是需要等待一段时间才能获得更大的奖励。
实验对象可以根据自己的意愿选择不同的选项。
实验结果显示,大多数人更倾向于选择立即获得的小额奖励,而不是等待更长时间以获得更大的奖励。
这种行为模式被称为“即时满足偏好”。
这一结果揭示了人类的一种心理特点:我们更倾向于追求即时的满足感,而忽视了长期利益。
那么,为什么人们会有这种即时满足偏好呢?心理学家提出了一些解释。
首先,人们往往更容易预测和评估即时奖励,而对于未来的奖励往往难以准确评估。
这导致了人们对于即时奖励的价值更加敏感,而对于未来奖励的价值更加模糊。
其次,人们对于即时奖励的需求更加迫切,因为它们能够立即满足我们的欲望和需求,而未来奖励则需要等待和付出更多的努力。
然而,即时满足偏好并不总是明智的选择。
在现实生活中,我们常常需要做出一系列决策,这些决策涉及到长期利益和短期满足之间的权衡。
例如,我们是否应该立即购买心仪已久的商品,还是将钱储蓄起来以应对未来的不确定性?我们是否应该立即享受美食,还是节制自己以保持健康的身体?这些决策都需要我们权衡即时满足和长期利益之间的关系。
为了克服即时满足偏好的影响,我们可以采取一些策略。
首先,我们可以通过增强对未来奖励的预期和评估来提高对其价值的认识。
这意味着我们需要更加清晰地设定未来奖励的目标,并了解其对我们个人发展和幸福的重要性。
其次,我们可以通过设定明确的规划和目标来引导自己的行为。
例如,我们可以设定一个长期的储蓄计划,以确保我们能够在未来获得更大的回报。
龙贝格算法-数值分析-实验报告

3 / 13
一、任务综述于分析
1.1 任务
1、 根据所掌握龙贝格算法,独立编写程序,实现具体问题的求解等; 2、 自己设计一个多项式,根据设定的代数多项式进行测试,调式程序; 3、 对所设计的程序解决实际问题并分析,撰写分析报告
1.2 分析
1、 首先先明确什么是龙贝格算法,了解他的基本原理,画出流程图,编写程序代码。 2、 自己设计一个多项式,对他利用龙贝格算法求出他的积分。并与真实值比较,检测程序是否有错误。 并进一步修改完善程序。可以多试几个多项式,来判断程序的正确性。 3、 任务三实际上是求平面曲线长的问题。利用弧长微分公式可求得结果。
四、测试 ................................................................................................................................................. 8
主要参考资料
《数值分析简明教程》 《数值分析课程设计》
王能超 陈越、童若锋
高等教育出版社 浙江大学出版社
教研室签字: 年 月 日
院签字: 年 月 日
2 / 13
目录
目录 ......................................................................................................................................................... 3 一、任务综述于分析 ............................................................................................................................. 4
Romberg算法的实验报告

Romberg 算法一、实验目的:学会数值求积的Romberg 算法,并应用该算法于实际问题.二、实验内容:求定积分 ⎰15.0dxx三、实验要求:(1)要求程序不断加密对积分区间的等分,自动地控制Romberg 算法中的加速收敛过程,直到定积分近似值的误差不超过610-为止,输出求得的定积分近似值。
(2)可用MATLAB 中的内部函数int 求得此定积分的准确值与Romberg 算法计算的近似值进行比较。
四、实验基本原理Romberg 方法是使用行很强的一种数值积分方法,其收敛速度很快,这里直接给出Romberg 积分的计算方法。
(1)计算)]()()[(21)0,0(b f a f a b R +-=(2)计算∑-=--⎪⎪⎭⎫ ⎝⎛⎪⎭⎫ ⎝⎛-++-=12111212)0,1(21)0,(i k i i h k a f h i R r R (3)14)1,1()1,(4),(11-----=--j j j m R j m R j m R这样就构成了Romberg 积分的基本步骤,其计算步骤可以表1.1来表示:表1.1 Romberg 积分R(1,1)R(2,1) R(2,2)R(3,1) R(3,2) R(3,3)R(4,1) R(4,2) R(4,3) R(4,4)R(5,1) R(5,2) R(5,3) R(5,4) R(5,5)可以证明Romberg 方法是数值稳定的。
五、实验过程:1、编写主函数。
打开Editor编辑器,输入romberg法主程序语句:function [R,wugu,h]=romberg(fun,a,b, wucha,m)n=1;h=b-a; wugu=1; x=a;k=0; RT=zeros(4,4);RT(1,1)=h*(feval(fun,a)+feval(fun,b))/2;while((wugu>wucha)&(k<m)|(k<4))k=k+1; h=h/2; s=0;for j=1:nx=a+h*(2*j-1); s=s+feval(fun,x);endRT(k+1,1)= RT(k,1)/2+h*s; n=2*n;for i=1:kRT(k+1,i+1)=((4^i)*RT(k+1,i)-RT(k,i))/(4^i-1);endwugu=abs(RT(k+1,k)-RT(k+1,k+1));endR=RT(k+1,k+1);以文件名romberg.m保存。
龙贝格算法

2)理查森外推加速 从梯形公式出发, 将区间[a,b]逐次二分可以提高求积公式精度, 当[a,b] 分为 n 等份时,若记T������ = T ℎ ,当区间[a,b]分为 2n 等份时,则有 T2������ = T
ℎ 2
。再有泰勒公式展开为: T ℎ = ������ + ������1 ℎ2 + ������2 ℎ+ ⋯ +
建立一个命名为Romberg.m的function文件:
function[T]=Romberg(f,a,b,e) T=zeros(10,10); T(1,1)=(b-a)/2*(f(a)+f(b)); for k=2:10, sum=0; for i=1:2^(k-2), x=a+(2*i-1)*(b-a)/2^(k-1); sum=sum+f(x); end T(k,1)=T(k-1,1)/2+[(b-a)/2^(k-1)]*sum; for j=2:k, end %第一列用递推梯形公式 %定义龙贝格函数 %定义10阶的零元矩阵
1 3/2 ������ 0
������������。
算,并取������ ������, ������ ≈ ������ ;否则令 k=k+1,转(3)继续计算。 6)下图为我按照自己的算法所设计的示意表: 算法设计表:
k 1 2 3 4 …
h b-a (b-a)/2 (b-a)/4 (b-a)/8 …
������ ������, 1 T(1,1) T(2,1) T(3,1) T(4,1)
������ ������, 2
������ ������, 3
������ ������, 4
������ ������, 5
龙贝格(Romberg)求积法

龙贝格(Romberg)求积法
复化求积方法对于提高计算精度是行之有效的 方法,但复化公式的一个主要缺点在于要先估计出 步长。若步长太大,则难以保证计算精度,若步长 太小,则计算量太大,并且积累误差也会增大。在 实际计算中通常采用变步长的方法,即把步长逐次 分半,直至达到某种精度为止。
1.1变步长的梯形公式 变步长复化求积法的基本思想是在求积过程中,
)
0.9397933
进一步二分求积区间,并计算新分点上的函数值
f
(
1 4
)
0.9896158
,
f
(
3 4
)
0.9088516
有
T4
1 2 T2
1 4
f
(
1 4
)
f
(
3 4
)
0.9445135
这样不断二分下去,计算结果如P139列表所 示。积分的准确值为0.9460831,从表中可
看出用变步长二分10次可得此结果。
的考积察分T值与nS等n 。份辛卜生公式 S n之间的关系。将
复化梯形公式
Tn
h 2
f
(a)
2
n1 k 1
f
(xk ) f (b)
梯形变步长公式
T2 n
Tn 2
h n1
2 k 0
f (xk1 ) 2
代入(6.9) T 表达式得
h
n1
n1
T
6 f (a) 4k0
f
(
x k
1
)
2
(
2
输入 a,b,ε
)
变
b-ah,
h 2
f(a)+f(b)T1
数值积分龙贝格matlab

《数值分析》课程实验报告一、实验目的1、进一步熟悉向量矩阵的运算;2、掌握龙贝格(Romberg )算法,并能用高级程序语言MATLAB 编写实现此算法的程序;3、进而加深对龙贝格(Romberg )算法的理解。
二、实验内容1. 使用Romberg 积分,对于计算下列⎰+4802)cos (1dx x 各近似值a.确定1,51,41,31,21,1,,,,R R R R Rb.确定5,54,43,32,2,,,R R R Rc.6,65,64,63,62,61,6,,,,,R R R R R Rd.确定10,109,98,87,7,,,R R R R三、实验步骤1. 编写程序龙贝格积分方法如下:n=5;a=0;b=48;h(1,1)=b-a;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:nh(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);endr(i,1)=0.5*(r(i-1,1)+h(i-1,1)*sum);disp(r(i,1));enddisp('R22,R33,R44,R55分别为');for k=2:nfor j=2:kr(k,j)=r(k,j-1)+(r(k,j-1)-r(k-1,j-1))/(4^(j-1)-1);enddisp(r(k,k));enddisp('R61,R62,R63,R64,R65,R66分别为');n=6;for i=2:nh(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);endr(i,1)=0.5*(r(i-1,1)+h(i-1,1)*sum);endfor k=2:nfor j=2:kr(k,j)=r(k,j-1)+(r(k,j-1)-r(k-1,j-1))/(4^(j-1)-1);endendfor i=1:ndisp(r(6,i));enddisp('R77,R88,R99,R10,10分别为');n=10;for i=2:nh(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);endr(i,1)=0.5*(r(i-1,1)+h(i-1,1)*sum);endfor k=2:nfor j=2:kr(k,j)=r(k,j-1)+(r(k,j-1)-r(k-1,j-1))/(4^(j-1)-1);endendfor i=7:10disp(r(i,i));end运行结果如下:R11,R21,R31,R41,R51分别为62.437457.288656.443856.263156.2188R22,R33,R44,R55分别为55.572356.201556.205656.2041R61,R62,R63,R64,R65,R66分别为58.362759.077359.268959.317559.329759.3328R77,R88,R99,R10,10分别为58.422158.470758.470558.4705四、实验小结在这次编程中我学到了很多东西,把程序写进软件中也出现了很多错误,细节问题使我们必须注意的,自己有了很多的收获,自己进一步理解和学习了Matlab软件。
龙贝格算法实验报告

实验二:龙贝格算法一、实验目的1、通过本实验理解数值积分与微分的基本原理2、掌握数值积分中常见的复合求积公式的编程实现3、掌握龙贝格算法的基本思路和迭代步骤二、实验原理三、运行结果三、代码using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication4{public delegate double F(double x);class Program{const double Precision = 0.00000000001;const int MAXRepeat = 10;static double f1(double x){double s=4/(1+x*x );return s;}static double Romberg(double a,double b, F f){int m,n,k;double[] y = new double[MAXRepeat];double h,ep,p,xk,s,q=0;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;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 = Math.Abs(q - y[m - 1]);//前后两步计算结果比较求精度m = m + 1;y[m - 1] = q;n = n + n; // 2 4 8 16h = h / 2.0;//二倍分割区间}return q;}static void Main(string[] args){double a, b, result;Console.WriteLine("请输入积分下限:");a = Convert.ToDouble(Console.ReadLine());Console.WriteLine("请输入积分上限:");b = Convert.ToDouble(Console.ReadLine());result = Romberg(a, b, new F(f1));Console.Write("定积分计算结果为:{0}:", result);Console.ReadLine();}}}四、分析本次试验使我认识到了计算机计算能力的强大,通过本次实验对数值积分与微分的基本原理有了深刻理解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Romberg龙贝格算法实验报告
2017-08-09
课程实验报告
课程名称:
专业班级: CS1306班学号: U201314967 姓名:段沛云指导教师:报
告日期:
计算机科学与技术学院
目录
1 实验目的 (1)
2 实验原理 (1)
3 算法设计与流程框图 (2)
4 源程序 (4)
5 程序运行 (7)
6 结果分析 (7)
7 实验体会 (7)
1 实验目的
掌握Romberg公式的用法,适用范围及精度,熟悉Romberg算法的流程,并能够设计算法计算积分
31
得到结果并输出。
1x
2 实验原理
2.1 取k=0,h=b-a,求T0=
数)。
2.2 求梯形值T0(
b-a
),即按递推公式(4.1)计算T0。
k
2
h
[f(a)+f(b)],令1→k,(k记区间[a,b]的二分次2
2.3 求加速值,按公式(4.12)逐个求出T表的第k行其余各元素Tj(k-j)
(j=1,2,….k)。
2.4 若|Tk+1-Tk|
n-1
11T2n=[Tn+hn∑f(xi+)]
22i=0
1
Sn=T2n+(T2n-Tn)
31
Cn=S2n+(S2n-Sn)
151
Rn=C2n+(C2n-Cn)
63
3 算法设计与流程框图
算法设计:(先假定所求积分二分最大次数次数为20) 3.1 先求T[k][0] 3.2 再由公式T
(k)m
4m(k+1)1)=mTm-1-mTm(k-1(k=1,2,) 求T[i][j] 4-14-1
3.3 在求出的同时比较T[k][k]与T[k-1][k-1]的大小,如果二者之差的绝对
值小于1e-5,就停止求T[k][k];此时的k就是所求的二分次数,而此时的T[k][k]就是最终的结果 3.4 打印出所有的T[i][j];程序流程图
#include #include #include #include int main(void) {
float f(float(x)) {
float y; y=1/x; return y; }
float a,b,e,h,s,k,x,T1=0,T2=0,S1=0,S2=0,C1=0,C2=0,R1=0,R2=0; int i=0;
printf("请输入积分下限 : "); scanf("%f",&a);
printf("\n请输入积分上限 :"); scanf("%f",&b);
printf("\n请输入允许误差 :"); scanf("%f",&e); k大学网=1; h=b-a;
T1=h*(f(a)+f(b))/2;
printf("____________________________________________\n"); printf("计算结果如下 : \n");
printf("\nk T2 S2 C2 R2\n");
printf("%d %10.7f %10.7f %10.7f %10.7f\n",i,T1,S1,C1,R1); do {
x=a+h/2; s=0; while(x
{ s=s+f(x); x=x+h; }
T2=(T1+s*h)/2; S2=T2+(T2-T1)/3; if(k==1) {
T1=T2; S1=S2; h=h/2; k=k+1; }
else if(k==2) {
C2=S2+(S2-S1)/15; C1=C2; T1=T2; S1=S2; h=h/2; k=k+1; }
else if(k==3) {
R2=C2+(C2-C1)/63; C2=S2+(S2-S1)/15; C1=C2; T1=T2; S1=S2; h=h/2;
k=k+1; } else {
C2=S2+(S2-S1)/15;
R2=C2+(C2-C1)/63; if(fabs(R2-R1)
printf("%d %10.7f %10.7f %10.7f %10.7f\n",i+1,T2,S2,C2,R2);
} else { R1=R2; C1=C2; T1=T2; S1=S2; h=h/2; k=k+1; } } i++;
printf("%d %10.7f %10.7f %10.7f %10.7f\n",i,T2,S2,C2,R2); }
while(1); system("pause"); return 0; }
5 程序运行
6 结果分析
如上所示的结果与课本中求得的结果完全一样,表明程序编写正确,且符合要求,事实上,只要再将所求值的精度设置得更小,则所求的结果将更加准确,最终将无限接近于标准值,由上表也可以看出用龙贝格积分法求函数的积分值在精度比较低的.情况下就能求到很准确的值!
7 实验体会
本次实验较为简单,主要时间是耗费在循环判断上面,因为书上已经给了流程图,都是基本的C语言,难度不大。
过程中唯一遇到的一点障碍就是在写循环判断时由于多重判断多重循环导致混乱,幸好最后改
正了,最后得到的结果经检验与给定的结果相同。
通过这次实验上机,
使我更进一步了解了龙贝格法的计算思想,其在精度上很有保证,收敛较快,是解积分问题的有效方法。