龙贝格算法实验报告
计算方法上机实验报告——椭圆周长

计算方法上机实习题目(四)——龙贝格算法计算椭圆周长一、 题目用龙贝格算法计算椭圆110040022=+y x 的周长,使误差不超过410-。
二、解题方法由题目中椭圆的标准方程 110040022=+y x 知,该椭圆的参数方程为)2,0[ sin 10cos 20π∈⎩⎨⎧==t ty t x 参考微积分中曲线弧长计算公式dt t y t x s ⎰+=βα)()(2'2' 知该椭圆的周长计算公式为 dt t t s ⎰+=π2022cos 100sin 400 故该问题为利用龙贝格算法计算数值积分。
参考教材式(5.42),若以一个二元数组T[i][j]代表式中的)(j i T ,则式(5.42)可化为⎪⎪⎪⎩⎪⎪⎪⎨⎧=⋯=--=--+-+=+-=-+-=-∑-)3,2,1;,2,1,0(144]2)12([221)]()([2][]1[]1[]1[][][21]1[]0[][]0[]0[]0[1m k T T T a b i a f a b T T b f a f a b T m k m k m m k m i l l l l l 其中t t t f 22cos 100sin 400)(+=,a ,b 为区间端点值,π2,0==b a 。
相应的计算程序段为T[0][0]=(b-a)*(f(a)+f(b))/2;k=1;T[0][1]=T[0][0]/2+(b-a)*Sum(1)/pow(2,1);T[1][0]=(4*T[0][1]-T[0][0])/(4-1);k=2;T[0][2]=T[0][1]/2+(b-a)*Sum(2)/pow(2,2);T[1][1]=(4*T[0][2]-T[0][1])/(4-1);T[2][0]=(pow(4,2)*T[1][1]-T[1][0])/(pow(4,2)-1);k=3;T[0][k]=T[0][k-1]/2+(b-a)*Sum(k)/pow(2,k);T[1][k-1]=(4*T[0][k]-T[0][k-1])/(4-1);T[2][k-2]=(pow(4,2)*T[1][k-1]-T[1][k-2])/(pow(4,2)-1);T[3][k-3]=(pow(4,3)*T[2][k-2]-T[2][k-3])/(pow(4,3)-1);for(k=4;fabs(T[3][k-4]-T[3][k-5])>=pow(10,-4);k++){T[0][k]=T[0][k-1]/2+(b-a)*Sum(k)/pow(2,k);T[1][k-1]=(4*T[0][k]-T[0][k-1])/(4-1);T[2][k-2]=(pow(4,2)*T[1][k-1]-T[1][k-2])/(pow(4,2)-1);T[3][k-3]=(pow(4,3)*T[2][k-2]-T[2][k-3])/(pow(4,3)-1);}其中f(x)和Sum(l)为调用的子函数,子函数程序如下:double Sum(int l){i;intdoublesum,a,b;double f(double x);a=0.0;b=2*PI;sum=0;for(i=1;i<=pow(2,l-1);i++)sum=sum+f(a+(2.0*i-1.0)*(b-a)/pow(2,l));sum;return}double f(double x){y;doubley=sqrt(pow(20*sin(x),2)+pow(10*cos(x),2));y;return}因为并不是一开始T[3][j]就同步出现,所以需将k=3之前的各值先单独算出,又因为要10-,所以控制循环结束的条件是fabs(T[3][k-4]-T[3][k-5])>=pow(10,-4),求最后误差不超过4其中fabs(x)为求绝对值的函数,这里需要注意的是,每次判断时已经执行了k++这条指令,所以在判断是应该是T[3][k-4]-T[3][k-5],而不是T[3][k-3]-T[3][k-4],我在最初编写程序时就忽略了这个问题,导致花费很久调试程序。
龙贝格实验报告

龙贝格实验报告龙贝格实验报告龙贝格实验是一项经典的心理学实验,旨在探究人类对于延迟满足的选择行为。
实验的设计非常简单,但却能揭示出人类的心理特点和决策模式。
本文将对龙贝格实验进行介绍,并探讨实验结果对于我们日常生活中的决策行为的启示。
龙贝格实验最早由德国心理学家沃尔夫冈·龙贝格于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
数值积分龙贝格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.实验目的1)通过实际计算体会各种方法的精确度。
2)会编写用复化辛卜生、龙贝格算法求定积分的程序。
3.算法描述1)用复化辛卜生法计算积分 dxx I ⎰+=12)1/(1算法:复化辛卜生公式为S n =h/6∑∑+-=+++)]()2/(4)([11k k kn k x f h x f xf ,计算过程为:1.令,/)(n a b h -= ),2/(1h a f s +=;02=s2.对1,,2,1-=n k计算),2/(11h kh a f s s +++=)(22kh a f s s ++=3.))(24)((6/21b f s s a f h s +++= 。
2)龙贝格算法计算dxxI ⎰+=102)1/(156e ε=-算法)((12/12∑-=++=n k k n n n x f h T T ;/)(n a b h n -= n k h k x )2/1(2/1+=+)(3/122n n n n T T T S -+= )_(15/122n n n n S S S C +=)(63/122n n n n C C C R -+=用事后估计法控制精度2|5e -6n n R R -< 。
4.源程序:1)/* 用复化辛卜生公式求积分 */ #include "stdio.h" float fx(float x){double f;f=1.0/(1.0+x*x); return f; } double fs(int n){double a=0.0,b=1.0,h,s,s1,s2=0; int i;h=(b-a)/n; s1=fx(a+h/2); for(i=1;i<n;i++){s1=s1+fx(a+i*h+h/2); s2=s2+fx(a+i*h);}s=(h/6.0)*(fx(a)+fx(b)+4*s1+2*s2);return s;}void main(){printf("实验三复化辛卜生法计算机112 耿向飞学号:112434\n");printf("s(2)=%lf\ns(4)=%lf\ns(8)= %lf",fs(2),fs(4),fs(8));}2)/* 龙贝格法 */#include "stdio.h"#include "math.h"#define E 2.71828182//被积函数f(x)double fx(double x){double f;f=1/(1+x*x);return f;}//梯形公式求tndouble tx(int n){double s3=0.0,h,t,b=1.0,a=0.0;int i;h=(b-a)/n;for(i=1;i<n;i++)s3=s3+fx(i*h);t=(h/2)*(fx(a)+fx(b)+2*s3);return t;} double s(int n){double s;s=tx(2*n)+(1.0/3.0)*(tx(2*n)-tx(n ));return s;}double c(int n){double c;c=s(2*n)+(1.0/15.0)*(s(2*n)-s(n)) ;return c;}double r(int n){double r;r=c(2*n)+(1.0/63.0)*(c(2*n)-c(n)) ;return r;}void main(){double rr,pp;int n=1;rr=r(n);pp=r(2*n)-r(n);printf("实验三龙贝格法计算机112 耿向飞学号:112434\n");printf("结果为:%.15lf 误差小于等于: %.15lf",rr,pp);}5.运行结果1)复化辛卜生公式2)龙贝格算法6.对算法的理解与分析:复化辛卜生公式和龙贝格算法适用于求数值积分,而且都能提高计算积分的精度龙贝格算法其实是在复化辛卜生公式递推的基础之上生成的一种精度高,而且收敛速度也较快的一种算法。
龙贝格算法报告

龙贝格算法报告 中国地质大学姓名:马立华 班号:121112 学号:20111000536 (一)、龙贝格算法的推导工程的形成。
()()baI f f x dx =⎰n 等份,分点1、梯形公式是将区间[,a b ⎤⎦ 有为kx =a+kh ,h=b a n- ,k=0,1,2,3....在每个小区间上采用梯形公式为110[()()]2n i i i h T f x f x -+==+∑.通过计算复合梯形公式的余项为. (梯形公式是把大区间分成一些小区间,通过梯形面积近似曲边提醒的体积)2、梯形公式的递推法,复合梯形公式在区间[,a b ⎤⎦ 上,共有n 等份,则共有n+1个分点,将求积区间在二分一次,则分点增加至2n+1个,由梯形公式()()()⎥⎦⎤⎢⎣⎡+-=∑-=1122n k k n b f x f a f h T 得式()∑-=++=121222n k k n nx f h T T 求出n T 2;(梯形公式是通过增加区间每一次都是将上一次区间加倍)3,外推技巧:由1,2,可以看出梯形公式收敛地速度较慢,并且精确地阶数较低由余项得 h=b a n -,。
(外推技巧是通过将梯形公式的递推法得到的公式进行加减乘除法提高其精确度。
) 定理四 设](),f x c a b ∞⎡∈⎣,则有2462123()........l l T h I h h h h αααα=++++++ (1)其中2"()12n b a R h f η-=-]2''(),,12n b a I T h f a b ηη-⎡-=-∈⎣3201x x dx+⎰系数l α(l=1,2,3....)与h 无关。
通过定理四 则有24212().......() (24162)l l h h h h T I ααα=+++++。
(2),通过(1)(2)得46124(/2)()() (3)T h T h S h I h h ββ-==+++发现我们只是通过简单地加减法,就将误差的阶数提高了两阶。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二:龙贝格算法
一、实验目的
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-1
p = p + f(xk); //计算∑f(xk+h/2),T
} // k=0
p = (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 16
h = 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();
}
}
}
四、分析
本次试验使我认识到了计算机计算能力的强大,通过本次实验对数值积分与微分的基本原理有了深刻理解。
基本上掌握数值积分中常见的复合求积公式的编程方法。
掌握了龙贝格算法的基本思路和迭代步骤;使自己编程与上机调试能力有了很大提高。