matlab实现复化梯形公式,复化simpson公式以及romberg积分
MATLAB复化梯形法与龙贝格法计算定积分

MATLAB复化梯形法与龙贝格法计算定积分复化梯形法和龙贝格法是常用的数值积分方法,用于计算定积分的近似值。
在MATLAB中,可以使用这两种方法来计算定积分。
1.复化梯形法:复化梯形法是基于将积分区间等分成若干子区间,并用梯形面积来近似每个子区间上的积分值。
整个积分的近似值等于所有子区间上的梯形面积之和。
首先,将积分区间[a,b]等分成N个子区间,每个子区间的长度为h=(b-a)/N。
然后,可以用以下公式计算每个子区间上的梯形面积:S=(f(x_i)+f(x_{i+1}))*h/2其中,f(x_i)和f(x_{i+1})是在子区间上取的两个点的函数值,x_i 和x_{i+1}分别是子区间的起始点和终止点。
```matlabh=(b-a)/N;x=a:h:b;result = 0;for i = 1:Nresult = result + (f(x(i)) + f(x(i + 1))) * h / 2;endend```2.龙贝格法:龙贝格法是一种自适应的数值积分方法,它基于逐次加密网格和不同阶数的梯形法来提高近似的精度。
首先,将积分区间[a, b]分割成n个子区间。
然后,可以使用复化梯形法来计算每个子区间上的积分值。
接下来,应用Richardson外推方法,通过逐次加密网格并对不同阶数的梯形法进行迭代,以获得更精确的近似值。
```matlabfunction result = romberg(f, a, b, max_depth, tol)R = zeros(max_depth, max_depth);h=b-a;R(1,1)=(f(a)+f(b))*h/2;for j = 2:max_depthh=h/2;R(j, 1) = R(j - 1, 1) / 2 + sum(f(a + (0:2^(j - 2)) * h) * h);for k = 2:jR(j,k)=R(j,k-1)+(R(j,k-1)-R(j-1,k-1))/(4^(k-1)-1);endif abs(R(j, j) - R(j - 1, j - 1)) < tolresult = R(j, j);return;endendresult = R(max_depth, max_depth);end```在使用上述代码计算定积分时,需要定义一个函数f来表示被积函数,并提供积分区间[a, b]的起始点和终止点。
MATLAB数值分析实验二(复合梯形、辛普森和龙贝格求积,以及二重积分计算等)

佛山科学技术学院实验报告课程名称_______________ 数值分析________________________实验项目_______________ 数值积分____________________专业班级机械工程姓名余红杰学号2111505010 指导教师陈剑成绩日期月日一、实验目的b1、理解如何在计算机上使用数值方法计算定积分 a f ""X的近似值;2、学会复合梯形、复合Simpson和龙贝格求积分公式的编程与应用。
3、探索二重积分.11 f (x, y)dxdy在矩形区域D = {( x, y) | a _ x _ b, c _ y _ d}的数值D积分方法。
二、实验要求(1)按照题目要求完成实验内容;(2)写出相应的Matlab程序;(3)给出实验结果(可以用表格展示实验结果);(4)分析和讨论实验结果并提出可能的优化实验。
(5)写出实验报告。
三、实验步骤1、用不同数值方法计算积xln xdx =-- 0 9(1)取不同的步长h,分别用复合梯形及复合辛普森求积计算积分,给出误差中关于h的函数,并与积分精确值比较两公式的精度。
(2)用龙贝格求积计算完成问题(1 )。
2、给出一种求矩形区域上二重积分的复化求积方法,然后计算二重积分..e"y dxdy,其中积分区域D二{0乞x岂1,0岂y乞1}。
1.%lnt_t.m复化梯形:function F = Int_t(x1,x2,n)%复化梯形求积公式% x1,x2为积分起点和中点%分为n个区间,没选用步长可以防止区间数为非整数。
%样点矩阵及其函数值:x = lin space(x1,x2 ,n+1);y = f(x);m = len gth(x);%本题中用Matlab计算端点位置函数值为NaN,故化为零: y(1) = 0;y(m) = 0;%算岀区间长度,步长h:h = (x2 -x1)/n;a = [1 2*o nes(1,m-2) 1];%计算估计的积分值:F = h/2*sum(a.*y);%f.mfun cti on y = f(x)y = sqrt(x).*log(x);%run 11.mclc,clear;%分为10个区间,步长0.1的积分值:F = In t_t(0,1,10);F10 = F%分为100个区间F = In t_t(0,1,100);F100 = F%误差计算W10 = abs((-4/9)-F10);W100 = abs((-4/9)-F100);W = [W10 W100]%复化辛普森:%l nt_s.mfun cti on F = In t_s(x1,x2 ,n)%复化梯形求积公式% x1,x2区间,分为n个区间。
用matlab实现romberg积分法

一、概述在数值分析中,求解定积分是一项重要的任务。
传统的数值积分方法包括梯形法则、辛普森法则等。
而Romberg积分法,是一种更加精确的数值积分方法,它通过不断增加区间的细分,逐步提高数值积分的精度。
在本文中,我们将尝试用MATLAB实现Romberg积分法,探索其优势和应用。
二、Romberg积分法原理Romberg积分法的基本原理是通过对梯形法则和辛普森法则进行逐步的细分和修正,以获得更加精确的数值积分结果。
假设我们需要求解函数 f(x) 在区间 [a, b] 上的定积分,那么Romberg积分法的步骤可以概括为以下几点:1. 将区间 [a, b] 均匀分成若干个子区间;2. 计算每个子区间上的梯形规则和辛普森规则的数值积分;3. 利用已知结果进行Richardson外推,修正数值积分的误差;4. 逐步增加子区间的细分,直到达到所需的精度要求。
三、MATLAB实现Romberg积分法我们可以使用MATLAB编程语言来实现Romberg积分法,以下是一个示例代码:function [I, R] = romberg(f, a, b, n)h = (b - a) ./ (2 .^ (0:n-1));R = zeros(n, n);R(1, 1) = (b - a) * (feval(f, a) + feval(f, b)) / 2;for j = 2:nsubtotal = 0;for i = 1:2^(j-2)subtotal = subtotal + feval(f, a + (2*i - 1) * h(j));endR(j, 1) = R(j-1, 1)/2 + h(j) * subtotal;endfor k = 2:nfor j = k:nR(j, k) = (4^(k-1) * R(j, k-1) - R(j-1, k-1)) / (4^(k-1) - 1); endendI = R(n, n);通过以上的MATLAB代码,我们可以轻松地实现Romberg积分法,对给定的函数和区间进行数值积分,并得到精确的积分结果。
matlab利用复合梯形公式计算积分

matlab利用复合梯形公式计算积分复合梯形公式是一种常用的数值积分方法,用于近似计算定积分。
在本文中,我们将使用MATLAB编程语言来实现复合梯形公式,并计算给定函数的积分。
首先,我们需要了解复合梯形公式的原理。
复合梯形公式是通过将积分区间划分为多个小区间,并在每个小区间上使用梯形面积来近似计算定积分。
具体而言,对于一个函数f(x),我们将积分区间[a, b]划分为n个小区间,每个小区间的宽度为h=(b-a)/n。
然后,我们可以使用以下公式来计算定积分的近似值:∫[a, b] f(x) dx ≈ h/2 * (f(a) + 2*f(x1) +2*f(x2) + ... + 2*f(xn-1) + f(b))其中,x1, x2, ..., xn-1是每个小区间的中点。
接下来,我们将使用MATLAB编程语言来实现复合梯形公式。
首先,我们需要定义要计算积分的函数f(x),以及积分区间[a, b]和划分的小区间数n。
```matlab\nfunction result =composite_trapezoidal(f, a, b, n)\n h = (b - a)/ n;\n x = a:h:b;\n result = h/2 * (f(a) +2*sum(f(x(2:end-1))) + f(b));\nend\n```在上述代码中,我们首先计算小区间的宽度h,并生成一个包含所有小区间的向量x。
然后,我们使用MATLAB的sum函数来计算除首尾之外的所有小区间上函数值的和,并将其乘以h/2得到积分的近似值。
接下来,我们可以定义要计算积分的函数f(x)。
例如,我们可以计算函数f(x) = x^2在积分区间[0, 1]上的积分。
```matlab\nfunction y = f(x)\n y =x.^2;\nend\n```最后,我们可以调用composite_trapezoidal函数来计算定积分的近似值。
复合梯形公式、复合辛普森公式matlab

复合梯形公式、复合⾟普森公式matlab 1. ⽤1阶⾄4阶Newton-Cotes公式计算积分程序:function I = NewtonCotes(f,a,b,type)%syms t;t=findsym(sym(f));I=0;switch typecase 1,I=((b-a)/2)*(subs(sym(f),t,a)+subs(sym(f),t,b));case 2,I=((b-a)/6)*(subs(sym(f),t,a)+4*subs(sym(f),t,(a+b)/2)+...subs(sym(f),t,b));case 3,I=((b-a)/8)*(subs(sym(f),t,a)+3*subs(sym(f),t,(2*a+b)/3)+...3*subs(sym(f),t,(a+2*b)/3)+subs(sym(f),t,b));case 4,I=((b-a)/90)*(7*subs(sym(f),t,a)+...32*subs(sym(f),t,(3*a+b)/4)+...12*subs(sym(f),t,(a+b)/2)+...32*subs(sym(f),t,(a+3*b)/4)+7*subs(sym(f),t,b));case 5,I=((b-a)/288)*(19*subs(sym(f),t,a)+...75*subs(sym(f),t,(4*a+b)/5)+...50*subs(sym(f),t,(3*a+2*b)/5)+...50*subs(sym(f),t,(2*a+3*b)/5)+...75*subs(sym(f),t,(a+4*b)/5)+19*subs(sym(f),t,b));case 6,I=((b-a)/840)*(41*subs(sym(f),t,a)+...216*subs(sym(f),t,(5*a+b)/6)+...27*subs(sym(f),t,(2*a+b)/3)+...272*subs(sym(f),t,(a+b)/2)+...27*subs(sym(f),t,(a+2*b)/3)+...216*subs(sym(f),t,(a+5*b)/6)+...41*subs(sym(f),t,b));case 7,I=((b-a)/17280)*(751*subs(sym(f),t,a)+...3577*subs(sym(f),t,(6*a+b)/7)+...1323*subs(sym(f),t,(5*a+2*b)/7)+...2989*subs(sym(f),t,(3*a+4*b)/7)+...1323*subs(sym(f),t,(2*a+5*b)/7)+...3577*subs(sym(f),t,(a+6*b)/7)+751*subs(sym(f),t,b));endsyms xf=exp(-x).*sin(x);a=0;b=2*pi;I = NewtonCotes(f,a,b,1)N=1:I =N=2:I =N=3:I =(pi*((3*3^(1/2)*exp(-(2*pi)/3))/2 - (3*3^(1/2)*exp(-(4*pi)/3))/2))/4N=4:I =(pi*(32*exp(-pi/2) - 32*exp(-(3*pi)/2)))/452. 已知,因此可以通过数值积分计算的近似值。
数值分析 matlab 实验4

(1) 解题过程如下:(1)MATLAB中创建复化梯形公式和复化辛普森公式的 M 文件:1)复化梯形公式文件:function s=T_fuhua(f,a,b,n)h=(b-a)/n;s=0;for k=1:(n-1)x=a+h*k;s=s+feval(f,x);ends=h*(feval(f,a)+feval(f,b))/2+h*s;2)复化辛普森公式文件:function s=S_fuhua(f,a,b,n)h=0;h=(b-a)./(2*n);s1=0;-5-s2=0;for k=1:n-1x=a+h*2*k;s1=s1+feval(f,x);endfor k=1:nx=a+h*(2*k-1);s2=s2+feval(f,x);ends=h*(feval(f,a)+feval(f,b)+s1*2+s2*4)/3;在MATLAB中输入:f=inline('x/(4+x^2)');a=0;b=1;%inline 构造内联函数对象for n=2:10s(n-1)=T_fuhua(f,a,b,n);s(n-1)=vpa(s(n-1),10);%调用复化梯形公式,生成任意精度的数值endexact=int('x/(4+x^2)',0,1);exact=vpa(exact,10)%求出积分的精确值输出结果:exact =.1115717755s =Columns 1 through 60.1088 0.1104 0.1109 0.1111 0.1113 0.1114Columns 7 through 90.1114 0.1114 0.1115在MATLAB中输入以下函数用以画出计算误差与 n 之间的曲线:r=abs(exact-s);n=2:10;plot(double(n),double(r(n-1)))得到结果如图所示:(2)在 MATLAB中输入以下程序代码:f=inline('x/(4+x^2)');a=0;b=1;n=9;%inline 构造内联函数对象t=T_fuhua(f,a,b,n);t=vpa(t,10)s=S_fuhua(f,a,b,n);s=vpa(s,10)%调用复化梯形和复化辛普森公式,生成任意精度的数值exact=int('x/(4+x^2)',0,1);exact=vpa(exact,10)%求出积分的精确值计算结果:t =.1114379370s =.1115717991exact =.1115717755E1=|t-exact|=0.0001338385E2=|s-exact|=0.0000000236所以,两种方法计算所得的绝对误差:E1>E2(1)中的两个结果 s 与t,两个函数的计算量基本相同,但是精度却有很大差别:与精确值exact =.1115717755比较,复化梯形公式的结果t =.1114379370 只有三位有效数字,而复化辛普森公式的结果 s =.1115717991 却有七位有效数字。
3.1用复化梯形公式、复化Simpson公式、Romberg方法和复

(2) f (x) ex2 cos20x,0 x 2。
1
3.4 设计自适应的Simpson方法求积分0 x xdx( 0.4) 的
近似值,即对不同的子区间分别按精度标准确定各自适当的步长, 计算各子区间上的积分近似值,然后将各个近似值相加,要求近似 值的绝对误差限为0.5107 。
(2) 0 1 x2 dx 4
3.2 用外推方法计算下列积分值,并对计算结果进行比较。 如果所得结果不满意,对算法进行适当修改。
2x
x2ห้องสมุดไป่ตู้
(1)
1
( 1
x2
)dx 0.51324025, 2
(2) sin2 xdx
0
2
第三章 数值积分与数值微分
3.3 用样条函数方法和外推法求下列函数的一阶和二阶导数, 并结合函数的图形说明精度与步长h的关系。
第三章 数值积分与数值微分
数值试验题3
3.1 用复化梯形公式、复化Simpson公式、Romberg方法 和复化Gauss-Legendre公式计算下列积分的近似值,使绝对误 差限为 0.5107 ,并将计算结果与精确解作比较以及比较各种 算法的计算量。
21
(1)1
dx ln 2, x
11
matlab复化Simpson求积公式计算数值积分

,(k 0,1,...,n)k x a kh =+=b a h n-=2221222121(x)dx (x)dx [(x )4(x )(x )]3k k m a x b x k m k k k k f f h f f f -=--=≈≈++∑⎰⎰∑复化Simpson 求积公式计算数值积分一·复化Simpson 求积公式的数学理论如果用分段二次插值函数近似被积函数,即在小区间上用Simpson 公式计算积分近似值,就可导出复化Simpson 公式。
二·复化Simpson 求积公式的算法和流程图将积分区间[a,b]分成n=2m 等分,分点为,在每个小区间[222,x k k x -](k=0,1,…,n-1)上。
用Simpson 公式求积分,则有2222222221222212(x)dx [(x )4(x )(x )]6[(x )4(x )(x )]3kk x k k k k k x k k k x x f f f f h f f f -------≈++=++⎰求和得整理后得到122111(x)dx [(a)(b)2(x )4(x )]3m m bk k a k k h f f f f f --==≈+++∑∑⎰ (5-21)式(5-21)称为复化Simpson 公式。
如果(4)(x)[a,b]f c ∈,则由Simpson 插值余项公式可得复化公式的截断误差为1221115(4)2221()(x)dx [(a)(b)2(x )4(x )]3(2h)()[x ,x ]2880m m bS k k a k k mk k k h R f f f f f f ξξ--==-==-+++=-∈∑∑⎰∑因为(4)f x 为连续,故存在[a,b]ξ∈,使得(4)(4)11()()m k k f f m ξξ==∑代入上式得5(4)4(4)1(2h)()()()(a,b)2880180m s k b a R f mf h f ξξξ=-=-=-∈∑ (5-22)式(5-22)表明,步长h 越小,截断误差越小。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(一) 实验目的
熟悉并掌握数值积分的方法,重要训练复化梯形公式,复化simpson 公式以及romberg 积分。
(二) 问题描述
问题三数值积分椭圆周长的计算。
考虑椭圆22221x y a b
+=,为计算其周长,只要计算其第一象限的长度即可.
用参数方程可以表示为cos (0/2)sin x a t t y b t π=⎧≤≤⎨=⎩
,
计算公式为/0π⎰
为计算方便,我们可以令1a =,即计算下面的积分
/
0π⎰/0π=⎰
(/0π⎰/0a π=⎰可以归结为上面的形式)
采用复化梯形公式,复化Simpson 公式以及Romberg 积分的方法计算积分
/
0()I b π=⎰
给出通用程序,该通用程序可以计算任何一个函数在任意一个区间在给定的精度下的数值积分。
程序输出为计算出的数值积分值以及计算函数值的次数。
(三) 算法介绍
首先利用给出的各迭代公式,设计程序。
在matlab 对话框中输入要计算的函数,给出区间和精度。
复化梯形的迭代公式为:
;
复化simpson迭代公式为:
;
Romberg迭代公式为:。
(四)程序
对于复化梯形公式和复化simpson公式,我们放在中。
(%标记后的程序可用来把b看为变量时的算法实现)
%复化梯形公式
function y=jifenn(f,n,a,b) (说明:f表示任一函数,n精度,a,b为区间)fi=f(a)+f(b);
h=(b-a)/n;
d=1;
%function f=jifen(n,a,b,c)
%syms t
%y=sqrt(1+(c^2-1)*cos(t)^2);
%ya=subs(y,t,a);
%yb=subs(y,t,b);
%fi=ya+yb;
for i=1:n-1
x=a+i*h;
fi=fi+2*f(x);
d=d+1;
%yx=subs(y,t,x);
%fi=fi+2*yx;
end
f4=h/2*fi,d
%复化simposon公式
f1=0;
f2=0;
dd=1;
for i=1:n-1
dd=dd+1;
if rem(i,2)~=0;
x1=a+i*h;
f1=f1+f(x1);
else rem(i,2)==0;
x2=a+i*h;
f2=f2+f(x2) ;
end
end
f3=(h/3)*(f(a)+4*f1+2*f2+f(b)),dd
对于romberg积分,建立文件。
function y=romberg(f,n,a,b) (说明:f表示任一函数,n精度,a,b为区间)z=zeros(n,n);
h=b-a;
z(1,1)=(h/2)*(f(a)+f(b));
f1=0;
for i=2:n
for k=1:2^(i-2)
f1=f1+f(a+*h);
end
z(i,1)=*z(i-1,1)+*h*f1;
h=h/2;
f1=0;
for j=2:i
z(i,j)=z(i,j-1)+(z(i,j-1)-z(i-1,j-1))/(4^(j-1)-1);
end
end
z,n
(五)运行结果
对于复化梯形公式和复化simpson公式,我们运行下列语句并得到结果:
>> fun=inline('sqrt(1+^2-1).*cos(t).^2)');
>> jifenn(fun,8,0,pi/2)
f4 =
d =
8
f3 =
dd =
8
>> *4
ans =
>> *4
ans =
(说明:在本题中将椭圆中的未知量a取为1,b取为。
f4为复化梯形公式得到的椭圆周长,f3为复化simpson公式得到的椭圆周长)。
对于romberg,运行下列语句并最终得到结果为:
>> fun=inline('sqrt(1+^2-1).*cos(t).^2)');
>> romberg(fun,8,0,pi/
z =
0 0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0
0 0 0 0
0 0 0
0 0
ans =
n =
8
(说明:其中最终结果为)。
(六)结果分析
我们计算了当椭圆长轴为1,短轴为时的周长。
通过上述三种方法的计算可以看到,结果相差不大。
根据椭圆周长的一个计算公式我们可以得到L=。
因此三种方法都较好的接近真值。
(七)心得体会
应该熟练掌握这三种方法,才能在编程时正确快速的写出迭代公式。
同时在一种思想的前提下可以寻找多种方法实现算法,互相验证。