数值积分与数值微分实验报告

合集下载

实验4_数值积分与数值微分

实验4_数值积分与数值微分

数值分析实验报告四数值积分与数值微分实验(2学时)一 实验目的1.掌握复化的梯形公式、Simpson 公式等牛顿-柯特斯公式计算积分。

2. 掌握数值微分的计算方法。

二 实验内容1. 用复化梯形公式计算积分。

⎰90dx x M=82. 用复化Simpson 公式计算积分。

⎰90dx x M=8 3. 给定下列表格值利用四点式(n=3)求)50()50('''f f 和的值。

三 实验步骤(算法)与结果1复化梯形公式用C 语言编程如下:#include<stdio.h>#include<math.h>/*被积函数的定义*/float f(float x){float y;y=sqrt(x);return y;}void main(){int i,m;float a,b,h,r;printf("输入等分数m:" );scanf("%d",&m);printf("输入区间左端点a的值:"); scanf("%f",&a);printf("输入区间右端点b的值:"); scanf("%f",&b);float x[m+1];h=(b-a)/m;for(i=0;i<=m;i++)x[i]=a+i*h;r=0;for(i=0;i<=m;i++){if(i==0) r=r+h*0.5*f(x[i]);if(i>0&&i<m) r=r+h*f(x[i]);if(i==m) r=r+0.5*h*f(x[i]);}printf("输出区间[%3.1f %3.1f]的积分值:%f\n",a,b,r); }求解结果如下:输入等分数m:8输入区间左端点a的值:0输入区间右端点b的值:9输出区间[0.0 9.0]的积分值:17.7695142复化Simpson公式用C语言编程如下:#include<stdio.h>#include<math.h>/*被积函数的定义*/float f(float x){float y;y=sqrt(x);return y;}void main(){int i,m;float a,b,h,r;printf("输入等分数m:" );scanf("%d",&m);printf("输入区间左端点a的值:"); scanf("%f",&a);printf("输入区间右端点b的值:"); scanf("%f",&b);float x[m+1];h=(b-a)/m;for(i=0;i<=m;i++)x[i]=a+i*h;r=0;for(i=0;i<=m;i++){if(i==0) r=r+h*f(x[i])/3;if(i>0&&i<m){ if(i%2==0)r=r+h*2*f(x[i])/3; else r=r+h*4*f(x[i])/3;}if(i==m) r=r+h*f(x[i])/3;}printf("输出区间[%3.1f %3.1f]的积分值:%f\n",a,b,r); }求解结果如下:输入等分数m:8输入区间左端点a的值:0输入区间右端点b的值:9输出区间[0.0 9.0]的积分值:17.9031393求导数值用C语言编程如下:#include<stdio.h>int n;/*拉格朗日多项式函数的一阶导函数的定义*/float g1(float *x,float *y,float z){int i,j,k;float r,m,s;s=0;for(i=0;i<n;i++){ m=0;for(j=0;j<n;j++){if(j!=i){ r=1;for(k=0;k<n;k++)if(k!=i&&k!=j) r=r*(z-x[k]); m=m+r*y[i];}}r=1;for(j=0;j<n;j++)if(j!=i)r=r*(x[i]-x[j]);s=s+m/r;}return s;}/*拉格朗日多项式函数的二阶导函数的定义*/ float g2(float *x,float *y,float z){int i,j,k,p;float r,m,s,w;s=0;for(i=0;i<n;i++){w=0;for(j=0;j<n;j++){if(j!=i){m=0;for(k=0;k<n;k++){if(k!=i&&k!=j){ r=1;for(p=0;p<n;p++)if(p!=k&&p!=j&&p!=i)r=r*(z-x[p]); m=m+r*y[i];}}w=w+m;}}r=1;for(j=0;j<n;j++)if(j!=i)r=r*(x[i]-x[j]);s=s+w/r;}return s;}void main(){int i,j;float f1,x0,f2;printf("输入节点数n:");scanf("%d",&n);float x[n],y[n];printf("输入向量x:");for(i=0;i<n;i++)scanf("%f",&x[i]);printf("输入向量y:");for(i=0;i<n;i++)scanf("%f",&y[i]);printf("********************\n"); printf("输入1****求一阶导数\n"); printf("输入2****求二阶导数\n"); printf("********************\n"); printf("选择操作1-2:");scanf("%d",&j);switch(j){case 1:printf("输入求导处的x:");scanf("%f",&x0);f1=g1(x,y,x0);printf("x=%3.1f处的一阶导数值%f\n",x0,f1); break;case 2:printf("输入求导处的x:");scanf("%f",&x0);f2=g2(x,y,x0);printf("x=%3.1f处的二阶导数值%f\n",x0,f2); break;}}求解结果如下:输入节点数n:4输入向量x:50 55 60 65输入向量y:1.6690 1.7404 1.7782 1.8129********************输入1****求一阶导数输入2****求二阶导数********************选择操作1-2:1输入求导处的x:50x=50.0处的一阶导数值0.019673输入节点数n:4输入向量x:50 55 60 65输入向量y:1.6990 1.7404 1.7782 1.8129 ********************输入1****求一阶导数输入2****求二阶导数********************选择操作1-2:2输入求导处的x:50x=50.0处的二阶导数值-0.000164。

数值分析实验报告--数值积分与数值微分及其并行算法

数值分析实验报告--数值积分与数值微分及其并行算法

《数值分析》实验报告实验六 数值积分与数值微分及其并行算法(一) 数值微分一实验目的:① 我们通过 Mat lab 编 来 决数值 的诸多问题 例如这次实验所涉及到得数值微分,使我们进一步学会使用Matlab 来求解复杂的数值微分积分等问题,就进而避免了手算出现的各种错误。

体会Matlab 这门课是多么方便实用 让我体会到了高数和计算方法相结合的重要性,让我更好的学习这门课。

② 并让我们熟悉Mat lab 编 环 并要熟练掌握及应用二.实验要求:会用matlab 编写代码,并把关于数值微分的题目进行结果计算,并进行误差分析,需要画图的把图形画出来。

三.实验内容:用matlab 编写出的代码进行编译运行,来做下面有关于数值微分的例子,然后再进行误差分析的出最终结论。

最后把结果和过程写在实验报告上。

四.实验题目:1.关于数值微分的:设)94^*8cos()162^*4sin()(+−−=x x x f .(1)分别利用前差公式和后差公式计算)27.0('f 的近似值和误差,取4位小数点计算,其中步长分别取1000.0,001.0,01.0,1.0=h ,≤)("x f 100,]1,0[∈x .五.实验原理:1.、数值微分中的前插公式:hx f h x f x f )()()(−+≅′ 后插公式:hh x f x f x f )()()(−−≅′ 前插公式和后插公式的截断误差公式:)()(2),(1h O f h h f R i =′′−=ξ )2,1(=i 六.设计思想:是用离散的方法近似的计算y=f(x)在某点的函数值,当然通常只有函数以离散数值形式给出时才有必要用它。

七.对应程序及实验结果:1.数值微分的程序:在工作区输入:x=0.27;h=[0.1,0.01,0.001,0.0001];M=100;x1=x+h;x2=x-h; y=sin(4.*x.^2-16)- cos(8.*x.^4+9);y1=sin(4.*x1.^2-16)- cos(8.*x.^4+9); y2=sin(4.*x2.^2-16)- cos(8.*x.^4+9); yq=(y1-y)./h, yh=(y-y2)./h,wu=abs(h.*M/2), syms x,f=sin(4.*x.^2-16)- cos(8.*x.^4+9); yx=diff(f,x)得出结果为:yq =-2.5323 -2.1998 -2.1640 -2.1604yh =-1.7509 -2.1198 -2.1560 -2.1596wu =5.0000 0.5000 0.0500 0.0050yx =8*cos(4*x^2-16)*x+32*sin(8*x^4+9)*x^3再算出截断误差:输入:x=0.27; yx =8*cos(4*x^2-16)*x+32*sin(8*x^4+9)*x^3,wuq=abs(yq-yx), wuh=abs(yh-yx)输出:yx =-1.9251wuq =0.6072 0.2748 0.2389 0.2353wuh =0.1742 0.1948 0.2309 0.2345九、实验体会:本实验中,关于数值微分方法的使用,使我个人又对前插公式有了新的一种理念,让我记的更加牢固。

mat实验7 数值微分和数值积分(2)

mat实验7 数值微分和数值积分(2)

MATLAB 程序设计实验7数值微分和数值积分姓名:班级:电信1105学号:********2014.6.13一、实验目的1.掌握微分的数值计算方法。

2.掌握积分的数值计算方法。

二、实验内容1、求定积分。

a)20sin xI dx x=⎰b) ()()12201160.30.010.90.04I dx x x ⎡⎤=--⎢⎥-+-+⎢⎥⎣⎦⎰ 解:代码及结果如下:function yp=test(x) yp=sin(x)./x;>> [I,err]=quadgk(@test,0,2) I = 1.6054err = 8.0491e-17function yp=test(x)yp=((1./((x-0.3).^2+0.01)-1./((x-0.9).^2+0.04))-6);>> [S,n]=quadl(@test,0,1,10^-10,0) S = 11.7006 n = 7682、求二重定积分。

A)()()112200exp I x y dxdy =-+⎰⎰B)()0cos I x y dxdy ππ=+⎰⎰解:代码及结果如下:>> fx=inline('exp(-(x.^2+y.^2))','x','y'); >> dblquad(fx,0,1,0,1,10^-10) ans = 0.5577>> fx=inline('abs(cos(x+y))','x','y'); >> dblquad(fx,0,pi,0,pi,10^-10) ans = 6.28323、分别用矩形、梯形公式计算表1中数据给出的定积分,()1.50.3I f x dx =⎰。

解:代码及结果如下: >> x=0.3:0.2:1.5;>> y=[0.3895 0.6598 0.9147 1.1611 1.3971 1.6212 1.8325]; >> trapz(x,y) ans = 1.3730设x 由[]π2:0区间内均匀分布的10个点组成,求向量x sin 的1~3阶差分。

实验四数值微积分实验报告

实验四数值微积分实验报告

实验四数值微积分实验报告实验四:数值微积分实验目的:1. 熟悉数值微积分的基本概念和方法;2. 学习使用Python进行数值积分和数值微分的计算;3. 掌握积分和微分的误差分析。

实验仪器:计算机、Python编程环境实验原理:1. 数值微积分是一种使用数值近似计算积分和微分的方法,适用于无法用解析方法求解的函数,或是为了简化计算过程而采用的方法。

2. 数值积分的常用方法有矩形法、梯形法和辛普森法等。

其中,矩形法是通过将区间分成若干小矩形来近似计算积分值;梯形法是通过将区间分成若干小梯形来近似计算积分值;辛普森法是通过将区间分成若干小曲线来近似计算积分值。

3. 数值微分的常用方法有中心差分法和向前差分法等。

其中,中心差分法是通过用相邻两点的斜率的平均值来近似计算导数值;向前差分法是通过用当前点和下一个点的斜率来近似计算导数值。

实验步骤:1. 导入Python所需的库和模块;2. 编写函数f(x),表示待求解的函数;3. 编写函数rectangular_rule(f, a, b, n),实现矩形法求积分;4. 编写函数trapezoidal_rule(f, a, b, n),实现梯形法求积分;5. 编写函数simpsons_rule(f, a, b, n),实现辛普森法求积分;6. 编写函数central_difference(f, x, h),实现中心差分法求导数;7. 编写函数forward_difference(f, x, h),实现向前差分法求导数;8. 调用以上函数,分别计算给定函数的积分和导数,并对结果进行误差分析;9. 打印输出实验结果。

实验结果:给定函数f(x):f(x) = x^3 + 2x^2 - 3x + 1使用矩形法计算积分,取n=1000,得到积分值为:-1.155使用梯形法计算积分,取n=1000,得到积分值为:-1.156使用辛普森法计算积分,取n=1000,得到积分值为:-1.155使用中心差分法计算导数,取x=1.0,h=0.001,得到导数值为:6.0使用向前差分法计算导数,取x=1.0,h=0.001,得到导数值为:4.0实验结论:1. 数值微积分是一种有效的数值计算方法,适用于无法用解析方法求解的函数;2. 在积分计算中,不同的数值积分方法会得到略有不同的结果,但结果误差一般很小;3. 在数值微分中,中心差分法的结果更加精确,但计算量较大;4. 数值微积分的误差分析是一个重要的环节,需要对结果进行误差评估和控制。

数值分析积分实验报告(3篇)

数值分析积分实验报告(3篇)

第1篇一、实验目的本次实验旨在通过数值分析的方法,研究几种常见的数值积分方法,包括梯形法、辛普森法、复化梯形法和龙贝格法,并比较它们在计算精度和效率上的差异。

通过实验,加深对数值积分理论和方法的理解,提高编程能力和实际问题解决能力。

二、实验内容1. 梯形法梯形法是一种基本的数值积分方法,通过将积分区间分割成若干个梯形,计算梯形面积之和来近似积分值。

实验中,我们选取了几个不同的函数,对积分区间进行划分,计算积分近似值,并与实际积分值进行比较。

2. 辛普森法辛普森法是另一种常见的数值积分方法,它通过将积分区间分割成若干个等距的区间,在每个区间上使用二次多项式进行插值,然后计算多项式与x轴围成的面积之和来近似积分值。

实验中,我们对比了辛普森法和梯形法的计算结果,分析了它们的精度差异。

3. 复化梯形法复化梯形法是对梯形法的一种改进,通过将积分区间分割成多个小区间,在每个小区间上使用梯形法进行积分,然后计算所有小区间积分值的和来近似积分值。

实验中,我们对比了复化梯形法和辛普森法的计算结果,分析了它们的精度和效率。

4. 龙贝格法龙贝格法是一种通过外推加速提高计算精度的数值积分方法。

它通过比较使用不同点数(n和2n)的积分结果,得到更高精度的积分结果。

实验中,我们使用龙贝格法对几个函数进行积分,并与其他方法进行了比较。

三、实验步骤1. 编写程序实现梯形法、辛普森法、复化梯形法和龙贝格法。

2. 选取几个不同的函数,对积分区间进行划分。

3. 使用不同方法计算积分近似值,并与实际积分值进行比较。

4. 分析不同方法的精度和效率。

四、实验结果与分析1. 梯形法梯形法在计算精度上相对较低,但当积分区间划分足够细时,其计算结果可以接近实际积分值。

2. 辛普森法辛普森法在计算精度上优于梯形法,但当积分区间划分较细时,计算量较大。

3. 复化梯形法复化梯形法在计算精度上与辛普森法相当,但计算量较小。

4. 龙贝格法龙贝格法在计算精度上优于复化梯形法,且计算量相对较小。

实验六-数值积分与数值微分

实验六-数值积分与数值微分

13
Matlab基础(实验二)
1. 矩阵输入 2. 特殊矩阵 3. 误差分析 4. 内置函数
2021/4/21
14
矩阵输入
>> a=[]
%建立空矩阵a ,可在workspace中编辑
>> a=[1,2,3;4 5 6] % [分行“,”或空格 分列 “;” ]
>> a=1:5
% 建立1×5矩阵(向量) a=(1,2,3,4,5)’
2021/4/21
8
符号解
1. vpa 控制运算精度
vpa(表达式,运算精度)
>> vpa(pi,20)
%显示至100位有效数字
2. solve 方程的符号解
solve( '表达式' , 'x')
2021/4/21
9
符号解
例 解方程 x3 sin x 12x 1 0 2x3 x 1 0
% 取a第3行,取a第二列
>> a(:,2)
% 取a第2列
>> b=a([1,3],3:5)
%取a的1,2行,2,4,5列元
>> [m,n]=size(a) >> b=a(end,:)
%输出a的行列数m、n % b取a的最后一行
2021/4/21
20
矩阵操作
>> a=1:36; a=reshape(a,6,6); t=toeplitz(0:-1:-5,0:5);
>> x=a\r,a*x
% x=a\r=inv(a)*r=a^(-1)*r
>> c=a'
% a'= a的(共轭)转置

实验二 数值积分实验

实验二 数值积分实验

实验二数值积分实验一. 实验目的(1)熟悉数值积分与数值微分方法的基本思想,加深对数值积分与数值微分方法的理解。

(2)熟悉Matlab编程环境,利用Matlab实现具体的数值积分与数值微分方法。

二. 实验要求用Matlab软件实现复化梯形方法、复化辛甫生方法、龙贝格方法和高斯公式的相应算法,并用实例在计算机上计算。

三.实验内容1. 实验题目已知x(-+=的数据表)1xef x4sin Array分别编写用复化梯形法、复化辛甫生公法、龙贝格法、三点高斯法求积分⎰=10)(dxfIx近似值的计算机程序。

2. 设计思想1.复化Simpson公式:设计Simpson公式,即为设计含有3个节点(即为3阶精度)的Newton-Cotes 公式。

将区间划分为3等份,选取等分点作为求积节点构造求积公式,具有三阶精度的Simpson公式。

将区间[a,b]划分为n等分,步长为h=(b-a)/n,等分点xi=a+i*h,i=0,1,2,3…。

设计复化求积法,先用低阶求积公式求得每个子段上的积分值,然后再将它们累加求和,用各段积分之和作为所求积分的近似值。

即设计出复化Simpson公式。

2.复化梯形公式:将区间[a,b]划分为n等分,步长为h=(b-a)/n,等分点xi=a+i*h,i=0,1,2,3…。

设计复化求积法,先用低阶求积公式求得每个子段上的积分值,然后再将它们累加求和,用各段积分之和作为所求积分的近似值。

再根据梯形公式即可设计出复化梯形公式。

3.Romberg公式:再加工Cotes值。

将积分区间[a,b]划分为8等份,等分点xi=a+i*(b-a)/8,i=0,1,2…,8,则二分前后的Cotes值可求,再对求得的Cotes公式进行松弛,提高精度,设计出Romberg公式。

4.三点Gauss公式:根据Newton-Cotes公式,但对求积节点自由选择,适当选取待定参数使公式具有高精度,即设计出Gauss公式。

实验三 数值积分与数值微分

实验三 数值积分与数值微分

实验三数值积分与数值微分一、实验目的:工程应用中更会常用到积分,但是,对于f(x)不是连续函数,或者不解析,或者不能用初等函数表示或者说原函数很难积分求。

所以在积分应用中我们构造一种方法可以避免要求原函数的计算,即NEWTON-COTES积分公式和1/3SIMPSON公式。

数值积分的基本思想是用被积函数f(x)在积分区间【a,b】上某些点处的函数值的线性组合来近似代替定积分。

二、计算公式NEWTON-COTES积分公式:I=h/2*(f(1)+f(n+1)+2(f(2)+f(3)+(f4)+…(fn)));h=b-a/2; x(i)=a+(i-1)*h; f(i)=f(x(i));1/3SIMPSON积分公式:I=h/3*(f(1)+f(n+1)+4f((2)+f(4)+f(6)+…+f(n)+2(f(3)+f(5)+f(7)+…+f(n-1)));h=b-a/n; f(i)=f(a+(i-1)*h).三、实验程序设计:(1)1、SIMPSON公式积分程度设计:运行结果:2、NEWTON_COTES公式程序设计:注:function y=fun_es(x); y=0.5.*exp(x./3)-x.^2.*sin(x); 运行结果:(2)1、SIMPSON公式积分程度设计:Iexact=0.9460831;a=0;b=1;n=1;for k=1:8,n=2*n;h=(b-a)/n;i=1:n+1;x=a+(i-1)*h;if x= =0f(i)=0;else f(i)=sin(x(i))/x(i);I=(h/3)*(f(1)+4*sum(f(2:2:n))+f(n+1));if n>2,I=I+(h/3)*2*sum(f(3:2:n));endendfprintf(' %3.0f %10.5f %10.5f\n',n,I,Iexact-I); end运行结果:2、NETON_COTES公式程序设计:Iexact=0.9460831;a=0;b=1;n=1;for k=1:8n=2*n;h=(b-a)/n;i=1:n+1;x=a+(i-1)*h;if x= =0f(i)=0;else f(i)=sin(x(i))/x(i);I=trapez_v(f,h);fprintf(' %4.0f %10.5f %10.5f\n',n,I,Iexact-I);endend注:function y=fun_es(x); y=0.5.*exp(x./3)-x.^2.*sin(x);运行结果:四、实验分析从上面的两个程序运行结果我们可以看出,不同的积分式子可以通过用不同的方法来实现积分,而且,对于每个公式的特点可以选择最合适区间少快读接近真值的方法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验三 数值积分程序设计算法
1)实验目的
通过本次实验熟悉并掌握各种数值积分算法及如何在matlab 中通过设计程序实现这些算法,从而更好地解决实际中的问题。

2)实验题目
给出积分 dx x I ⎰-=3
221
1 1.用Simpson 公式和N=8的复合Simpson 公式求积分的近似值.
2.用复合梯形公式、复合抛物线公式、龙贝格公式求定积分,要求绝对误差为 710*2
1
-=ε,将计算结果与精确解做比较,并对计算结果进行分析。

3)实验原理与理论基础
Simpson 公式
)]()2(4)([6b f b a f a f a b S +++-=
复化梯形公式
将定积分⎰=b
a
dx x f I )(的积分区间],[b a 分隔为n 等分,各节点为n j jh a x j ,,1,0, =+= n
a b h -=复合梯形(Trapz)公式为 ])()(2)([211
∑-=++-=n j j n b f x f a f n a b T 如果将],[b a 分隔为2n 等分,而n a b h /)(-=不变,则 )]()(2)(2)([41021112b f x f x f a f n a b T n j j n j j n +++-=∑∑-=+-= 其中
h j a h x x j j )21(2121
++=+=+,)]()(2)(2)([4102
1112b f x f x f a f n a b T n j j n j j n +++-=∑∑-=+-= ∑-=-++-+=10)2)12((221n j n n
a b j a f n a b T n=1时,a b h -=,则)]()([2
1b f a f a b T +-=
)0(0T = )2
1(22112h a f a b T T +-+=)1(0T = 若12-=k n ,记)1(0-=k T T n , ,2,1=k 12--=k a b h jh a x j +=12--+=k a b j a h x x j j 2121
+=+k a b j a 2
)12(-++=,则可得如下递推公式
)0(0T )]()([2b f a f a b +-= ∑-=--++-+-=120
001)2)12((2)1(21)(k j k k a b j a f a b k T k T k=1,2, 即为梯形递推公式。

由复化递推公式的余项)(3122n n n T T T I -≈- n n T T I 3
1342-≈ n n j j n T x f n a b T I 31))(221(341021--+≈∑-=+∑-=+-+≈1
02
1)(6)(431n j j n x f n a b T ≈I ])(4)(2)()((6102
111∑∑-=+-=+++-=n j j n j j x f x f b f a f n a b n S = 即为复化Simpson 公式。

Romberg 公式
由复合Cotes 公式的余项)(63122n n n C C C I -≈
-得n n C C I 63
163642-≈ )1(63
1)(636422--=k T k T 令)1(3-k T )1(63
1)(636422--=k T k T 由此综合可得)0(0T )]()([2b f a f a b +-= ∑-=--++-+-=120
001
)2)12((2)1(21)(k j k k a b j a f a b k T k T )1(1-k T )1(3
1)(3400--=k T k T )1(2-k T )1(15
1)(151611--=k T k T )1(3-k T )1(63
1)(636422--=k T k T ,2,1=k 4)实验内容
本次实验需要通过在matlab 中编程实现复化梯形及Romberg 等各种数值积分算法,从而更加熟练的掌握这几种算法,也通过在matlab 中的实现来比较这几种算法之间的优劣性,从而在实际应用中更好地选择算法,以利于解决实际中的问题。

5)实验结果
Simpson 算法 function z=simpson(a,b)
c=(a+b)/2;
z1=1/(a^2-1);z2=1/(b^2-1);z3=1/(c^2-1);
z=(b-a)*(z1+4*z3+z2)/6;
a=2;b=3;simpson(a,b)
ans =
0.2034
复合Simpson算法
function y=comsimpson(a,b,n)
z1=1/(a^2-1);z2=1/(b^2-1);
h=(b-a)/n;s1=0;x1=a+h/2;
s2=0;x2=a+h;
for i=0:1:(n-1)
x1=x1+h;
s1=s1+1/(x1^2-1);
end
for i=1:1:(n-1)
x2=x2+h;
s2=s2+1/(x2^2-1);
end
y=h*(z1+4*s1+2*s2+z2)/6;
>> a=2;b=3;n=8;comsimpson(a,b,n)
ans =
0.1804
复合梯形公式
function y=comti(a,b,e)%复合梯形公式求解
z1=1/(a^2-1);z2=1/(b^2-1);
c=(a+b)/2;z3=1/(c^2-1);
t=abs(z3-z2-z1);z4=z3;n=2;
while (t>e)
n=n+1;
h=(b-a)/n;
x=a;
s1=z1+z2;
for i=1:n-1
x=a+i*h;
s1=s1+1/(x^2-1);
end
s1=s1*h;
t=abs(s1-z4);z4=s1;
end
y=s1;
复合抛物线公式求解
%复合抛物线公式求解
function y=compwx(a,b,e)
s=1/(a^2-1)+1/(b^2-1);c=(b-a)/2+a;z=1/(c^2-1);
s3=(s+4*z)*(b-a)/6;
r=abs(s3-s*(b-a)/6);
n=0;
while(r<e)
n=n+1;
h=(b-a)/(2*n);
x=a;
s1=s;
for i=1:2:(2*n-1)
x=x+h;
s1=s1+4*1/(x^2-1);
x=x+h;
s1=s1+2*1/(x^2-1);
end
s2=s1*h/3;
r=abs(s2-s3);
s3=s2;
end
y=s3;
Romberg求积算法
%龙贝格算法
function[s,n]=Romberg(a,b,eps)
if nargin<3,eps=1e-6;
end
z1=1/(a^2-1);z2=1/(b^2-1);
s=10;s0=0;k=2;t(1,1)=(b-a)*(z1+z2)/2;
while (abs(s-s0)>eps)
h=(b-a)/2^(k-1);
w=0;
if(h~=0)
for i=1:(2^(k-1)-1)
x=a+i*h;
w=w+1/(x^2-1);
end
t(k,1)=h*(z1/2+w+z2/2);
for l=2:k
for i=1:(k-l+1)
t(i,l)=(4^(l-1)*t(i+1,l-1)-t(i,l-1))/(4^(l-1)-1);
end
end
s=t(1,k);
s0=(t(1,k-1));
k=k+1;
n=k;
else s=s0;
n=-k;
end
end
6)实验结果分析与小结
通过本次实验,在matlab中编写程序实现复合Simpson,复合梯形,复合抛物线及Romberg算法等,进一步熟悉了这几种数值积分算法,通过比较发现simpson算法不稳定,而梯形法简单但收敛慢,由梯形法递推而得到的Romberg算法具有更高的收敛速度。

相关文档
最新文档