数值积分用matlab实现

合集下载

数值积分的MATLAB实现

数值积分的MATLAB实现

数值积分的MATLAB实现数值积分是通过数值方法计算定积分的近似值。

MATLAB是一种功能强大的数值计算软件,提供了多种函数和工具箱用于数值积分的实现。

在MATLAB中,常用的数值积分方法包括梯形法则、辛普森法则和龙贝格法。

梯形法则是最简单的数值积分方法之一、它的基本思想是将要积分的区间划分成多个小的梯形并计算每个梯形的面积,然后将这些面积相加得到最终的近似积分值。

在MATLAB中,可以使用trapz函数进行梯形法则的计算。

例如,要计算函数sin(x)在区间[0, pi]的积分,可以使用以下代码:```MATLABx = linspace(0, pi, 1000); % 在[0, pi]区间生成1000个等间隔的点y = sin(x); % 计算函数sin(x)在每个点的值integral_value = trapz(x, y) % 使用梯形法则进行数值积分```辛普森法则是一种更精确的数值积分方法,它使用二次多项式来逼近被积函数。

在MATLAB中,可以使用simpson函数进行辛普森法则的计算。

例如,上面例子中的积分可以改用辛普森法则进行计算:```MATLABintegral_value = simpson(x, y) % 使用辛普森法则进行数值积分```龙贝格法是一种高效的自适应数值积分方法,它通过逐步加密网格和逼近函数来提高积分的精度。

在MATLAB中,可以使用quad和quadl函数进行龙贝格法的计算。

例如,计算函数sin(x)在区间[0, pi]的积分:```MATLAB```除了上述方法外,MATLAB还提供了许多其他的数值积分函数和工具箱,用于处理不同类型的积分问题。

例如,int和integral函数可以用于处理多重积分和奇异积分。

Symbolic Math Toolbox中的函数可以用于计算符号积分。

需要注意的是,数值积分是一种近似方法,计算结果的误差与划分区间的精细程度有关。

MATLAB数值积分及算例

MATLAB数值积分及算例

6.2.3 被积函数由一个表格定义
(要求积分,但是函数没有直接给出,只是自己在 做实验时得到的一组相关联的数据)
在MATLAB中,对由表格形式定义的函数关系的求定积分问 题用trapz(X,Y)函数。其中向量X,Y定义函数关系Y=f(X)。
例4 用trapz函数计算定积分。
命令如下:
X=1:0.01:2.5; Y=exp(-X); trapz(X,Y)
例2 求定积分:
x sin x
dx
0 (1 cos x cos x)
(1) 被积函数文件fx.m。
function f=fx(x) f=x.*sin(x)./(1+cos(x).*cos(x));
(2) 调用函数quad8求定积分。
I=quad8('fx',0,pi)
例3
分别用quad函数和quad8函数求定积分
global ki;ki=0; I=dblquad('fxy',-2,2,-1,1) ki
6.2 数值积分的实现方法
6.2.1 变步长辛普生法
基于变步长辛普生法,MATLAB给出了quad函数来 求定积分。该函数的调用格式为:
[I, n] = quad('fname', a, b, tol, trace) 其中fname是被积函数名。a和b分别是定积分的下 限 和 上 限 。 tol 用 来 控 制 积 分 精 度 , 缺 省 时 取 tol=0.001。trace控制是否展现积分过程,若取非0则 展现积分过程,取0则不展现,缺省时取trace=0。 返回参数I即定积分值,n为被积函数的调用次数。
2.5 exdx
1
的近似值,并在相同的积分精度下,比较函数的调

matlab切比雪夫数值积分

matlab切比雪夫数值积分

一、介绍MATLAB 是一款用于高级数学和工程计算的软件,切比雪夫数值积分是一种常见的数值积分方法。

本文将介绍MATLAB中切比雪夫数值积分的原理和实现方式,并结合实例进行详细讲解。

二、切比雪夫数值积分原理切比雪夫数值积分是一种通过在特定区间上拟合切比雪夫多项式来进行数值积分的方法。

其原理是利用切比雪夫多项式的性质,将被积函数在给定区间上进行插值拟合,从而计算积分值。

切比雪夫数值积分的优点在于其在一定条件下可以达到很高的精度,尤其适用于非光滑函数的数值积分。

三、MATLAB中的切比雪夫数值积分实现在MATLAB中,可以利用内置的函数chebfun来实现切比雪夫数值积分。

chebfun是一个专门用于处理切比雪夫多项式的工具包,其中包含了丰富的函数和方法,可以方便地进行数值积分。

1. 定义被积函数需要定义被积函数,并将其转换为chebfun对象。

如果要计算函数f(x)在区间[a, b]上的积分值,可以使用以下代码将f(x)转换为chebfun对象:```matlabF = chebfun((x) f(x), [a, b]);```2. 计算积分值接下来,可以使用内置的积分函数sum来计算切比雪夫数值积分的结果。

可以使用以下代码计算chebfun对象F在区间[a, b]上的积分值:```matlabI = sum(F);```这样,就可以得到函数f(x)在区间[a, b]上的切比雪夫数值积分结果I。

四、实例演示接下来,我们通过一个具体的实例来演示MATLAB中切比雪夫数值积分的实现。

假设要计算函数f(x) = sin(x) 在区间[0, π] 上的积分值。

1. 定义被积函数定义函数f(x) 并转换为chebfun对象:```matlabF = chebfun((x) sin(x), [0, pi]);```2. 计算积分值使用sum函数计算积分值:```matlabI = sum(F);```通过上述步骤,就可以得到函数f(x)在区间[0, π]上的切比雪夫数值积分结果I。

matlab高斯数值积分

matlab高斯数值积分

matlab高斯数值积分
在MATLAB 中,可以使用内置函数 integral 来进行高斯数值积分(Gaussian numerical integration)。

integral 函数使用自适应的高斯-库恩法(Gaussian-Kronrod method)来进行数值积分,可以处理一般的积分问题。

下面是 integral 函数的基本语法:
I = integral(fun, a, b)
其中:
•fun 是一个函数句柄,表示要进行积分的函数。

可以是已有的内置函数、自定义函数,或者用匿名函数表示。

• a 和 b 是积分的上下限。

以下是一个简单的示例,演示如何使用 integral 函数进行高斯数值积分:
在上述示例中,我们定义了一个函数 f,并将其作为参数传递给 integral 函数,然后指定积分的上下限。

最后,通过调用 integral 函数进行数值积分,并将结果存储在变量 I 中。

最后便可打印输出 I 显示积分结果。

请注意,integral 函数提供了更多的选项来调整数值积分的
精度和计算参数,如 'AbsTol'、'RelTol'、'MaxIntervalCount' 等。

可以根据具体的需求进行设置。

使用 integral 函数可以方便地进行高斯数值积分,但在处理特定问题时还需注意数值积分的误差控制和积分函数的光滑性,以确保得到精确的结果。

(完整版)数值积分及matlab实现

(完整版)数值积分及matlab实现
将积分区间细分,在每一个小区间内用简单函 数代替复杂函数进行积分,这就是数值积分的思想, 用代数插值多项式去代替被积函数发f(x)进行积分 是本章讨论数值积分的主要内容。
建立数值积分公式的途径比较多, 其中最常用的
有两种:
(1)由积分中值定理可知,对于连续函数f(x),在
积分区间[a,b]内存在一点ξ,使得
分,因此将 选(x取) 为插值多项式, 这样f(x)的积分就
可以用其插值多项式的积分来近似代替
2.2 插值求积公式
设已知f(x)在节点 xk (k 0,1, , n) 有函数值 f (xk ) ,作n次拉格朗日插值多项式
式中
n
P(x) f (xk )lk (x)
k 0
lk (x)
n j0
b
n
f (x)dx
a
Ak f (xk )
k 0
为插值型求积公式的充要条件是公式
(
x)dx
时,则称求积公式为插值
设插值求积公式的余项为 R( f ) ,由插值余项定理得
R( f ) b f (x) P(x)dx b f (n1) ( ) (x)dx
a
a (n 1)!
其中 a, b
当f(x)是次数不高于n的多项式时,有 f (n1) (x) 0 R( f ) =0,求积公式(4)能成为准确的等式。由于闭区 间[a,b]上的连续函数可用多项式逼近,所以一个 求积公式能对多大次数的多项式f(x)成为准确等式, 是衡量该公式的精确程度的重要指标,为此给出以 下定义。
数值积分与微分
2009.4.22
数值积分和数值微分
1 引言 我们知道,若函数f(x)在区间[a,b]上连续且其原
函数为F(x),则可用Newton-Leibnitz公式

matlab 一列点的数值求积函数

matlab 一列点的数值求积函数

标题:Matlab中一列点的数值求积函数的实现及应用正文:1. 概述在数学和工程领域,我们经常需要对一系列点的数值进行积分。

Matlab作为一种强大的数值计算软件,提供了丰富的函数库和工具,可以方便地实现对一列点的数值进行求积。

本文将介绍如何在Matlab 中实现一列点的数值求积函数,并给出相关的应用实例。

2. 一列点的数值求积函数的基本原理在Matlab中,可以利用数值积分的方法对一列离散点进行求积。

其中,最常用的方法包括梯形法则、辛普森法则等。

这些方法基于离散点的坐标和函数值,通过数值计算得出积分值。

以梯形法则为例,其基本原理如下:假设有一列离散点(x1, y1), (x2, y2), ..., (xn, yn),其中xi表示横坐标,yi表示纵坐标,将这些点连接起来形成一系列梯形。

通过计算每个梯形的面积并将其累加起来,最终得到积分值。

3. Matlab中一列点的数值求积函数的实现在Matlab中,可以通过编写自定义函数来实现对一列点的数值求积。

下面是一个简单的示例代码:function result = integrate_points(x, y)n = length(x);result = 0;for i = 1:n-1result = result + (x(i+1) - x(i)) * (y(i) + y(i+1)) / 2;end```在这段代码中,我们定义了一个名为integrate_points的函数,该函数接受两个参数x和y,分别表示离散点的横纵坐标。

然后利用梯形法则对这些离散点进行数值求积,最终得到积分值。

4. 一列点的数值求积函数的应用实例下面通过一个实际的例子来展示如何利用上述的integrate_points函数对一列离散点进行求积。

假设我们有一组离散点如下:x = [0, 1, 2, 3];y = [1, 2, 3, 4];我们可以调用integrate_points函数来计算这组离散点的积分值:result = integrate_points(x, y);disp(result);```运行上述代码后,可以得到这组离散点的积分值为7.5。

matlab数值积分的实现:时域积分和频域积分

matlab数值积分的实现:时域积分和频域积分

matlab数值积分的实现:时域积分和频域积分积分操作主要有两种方法:时域积分和频域积分,积分中常见的问题就是会产生二次趋势。

关于积分的方法,在国外一个论坛上有人提出了如下说法,供参考。

Double integration of raw acceleration data is a pretty poorestimate for displacement. The reason is that at each integration, youare compounding the noise in the data.If you are dead set on working in the time-domain, the best results come from the following steps.Remove the mean from your sample (now have zero-meansample)Integrate once to get velocity using some rule (trapezoidal, etc.)Remove the mean from the velocityIntegrate again to get displacement.Remove the mean. Note, if you plot this, you will see drift over time.To eliminate (some to most) of the drift (trend), use a least squares fit (high degree depending on data) to determine polynomial coefficients.Remove the least squares polynomial function from your data.A much better way to get displacement from acceleration data is to work in the frequency domain. To do this, follow these steps...Remove the mean from the accel. dataTake the Fouriertransform (FFT) of the accel. data.Convert the transformed accel. data to displacement data by dividing each element by -omega^2, where omega is the frequency band.Now take the inverse FFT to get back to the time-domain and scale your result.This will give you a much better estimate of displacement.说到底就是频域积分要比时域积分效果更好,实际测试也发现如此。

matlab高斯数值积分

matlab高斯数值积分

matlab高斯数值积分在MATLAB中,可以使用`integral`函数实现高斯数值积分。

`integral`函数是用于计算一维定积分的通用函数,包括高斯积分。

以下是使用`integral`函数计算高斯数值积分的基本步骤:1. 定义要积分的函数。

例如,假设要计算高斯积分的函数为`f(x)`,可以使用函数句柄来定义该函数。

例如,`f = @(x) exp(-x.^2)`定义了一个函数`f(x)`,其值为`exp(-x^2)`。

2. 使用`integral`函数计算积分。

可以调用`integral`函数并将函数句柄作为参数传递给它。

例如,`q = integral(f, a, b)`计算了`f(x)`在区间`[a, b]`上的积分,将结果保存在变量`q`中。

以下是一个完整的例子,演示如何使用MATLAB进行高斯数值积分:```matlab% 定义要积分的函数f = @(x) exp(-x.^2);% 计算高斯数值积分a = -1; % 积分下限b = 1; % 积分上限q = integral(f, a, b);% 打印积分结果disp(['高斯数值积分的结果为:', num2str(q)]);```在上面的例子中,`f(x) = exp(-x^2)`是要进行高斯数值积分的函数。

使用`integral`函数计算了`f(x)`在区间`[-1, 1]`上的积分,并将结果保存在变量`q`中。

使用`disp`函数打印了积分结果。

请注意,`integral`函数还提供了许多可选参数,可以用于控制积分的准确度和计算速度。

详情可以参考MATLAB的文档。

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

数值积分用m a t l a b实现东北大学秦皇岛分校数值计算课程设计报告数值积分及Matlab实现学院数学与统计学院专业信息与计算科学学号5133117姓名楚文玉指导教师张建波姜玉山成绩教师评语:指导教师签字:2015年07月14日1 绪论在科研计算中,经常会碰到一些很难用公式定理直接求出精确解的积分问题,对于这类问题,我们一般转化为数值积分问题,用计算机来实现求解问题. 1.1 课题的背景对于定积分()ba f x dx ⎰在求某函数的定积分时,在一定条件下,虽然有牛顿-莱布里茨公式()()()baI f x dx F b F a ==-⎰可以计算定积分的值,但在很多情况下的原函数()f x 不易求出或非常复杂.被积函数的原函数很难用初等函数表达出来,例如2sin (),x x f x e x-=等;有的函数()f x 的原函数()F x 存在,但其表达式太复杂,计算量太大,有的甚至无法有解析表达式.因此能够借助牛顿-莱布尼兹公式计算定积分的情形是不多的.另外,许多实际问题中的被积函数()f x 往往是列表函数或其他形式的非连续函数,对这类函数的定积分,也不能用不定积分方法求解,只能设法求其近似值.因此,探讨近似计算的数值积分方法是有明显的实际意义的,即有必要研究定积分的数值计算方法,以解决定积分的近似计算.而数值积分就是解决此类问题的一种有效的方法,它的特点是利用被积函数在一些节点上的信息求出定积分的近似值.微积分的发明是人类科学史上一项伟大的成就,在科学技术中,积分是经常遇到的一个重要计算环节数值积分是数学上重要的课题之一,是数值分析中重要的内容之一.随着计算机的出现,近几十年来,对于数值积分问题的研究已经成为一个很活跃的研究领域.现在,数值积分在计算机图形学,积分方程,工程计算,金融数学等应用科学领域都有着相当重要的应用,所以研究数值积分问题有着很重要的意义.国内外众多学者在数值积分应用领域也提出了许多新方法.在很多实际应用中,只能知道积分函数在某些特定点的取值,比如天气测量中的气温、湿度、气压等,医学测量中的血压、浓度等等.通过这个课题的研究,我们将会更好地掌握运用数值积分算法求出特殊积分函数的定积分的一些基本方法、理论基础;并且通过Matlab 软件编程的实现,应用于实际生活中. 1.2 课题的主要内容框架1.2.1 数值积分各求积公式简介简介牛顿-柯特斯求积公式及其辛普森求积公式,龙贝格求积公式,高斯求积公式的基本理论基础和方法. 1.2.2 求积公式的代码实现通过理解各种数值积分求积公式的原理方法,通过Matlab 软件编程,实现以上求积公式. 1.2.3 应用举例通过简单举例,自建一个相对简单和复杂的函数,用上面编写的Matlab 源程序来解决实际问题,体会数值积分和Matlab 的优势.2 牛顿-柯特斯公式及Matlab 实现2.1 牛顿-柯特斯公式的基本原理方法设将积分区间[a, b]划分为n 等分,步长为b ah n-=,选取等距节点k x a kh =+构造出的差值型求积公式()0()()nn n k k k I b a C f x ==-∑, (2.1)称为牛顿-柯特斯公式,式中()n k C 称为柯特斯系数.根据()bk a A l x dx =⎰, 0,1,2,,.k n = (2.2)引进变量代换x a th =+,则有()0000(1)()!()!n kn n n n n kj j j kj kh t j Cdt t j dt b a k j nk n k -==≠≠--==----∏∏⎰⎰ (2.3) 当n = 2时,此时柯特斯系数为(2)16C =,(2)146C =,(2)216C =,相应的求积公式就是辛普森求积公式:()4()()62b a a b S f a f f b -+⎡⎤=++⎢⎥⎣⎦(2.4)2.2 牛顿-柯特斯公式的Matlab实现function[C, g] = NCotes(a, b, n, m)% a,b分别为积分的上下限;% n是子区间的个数;% m是被调用第几个被积函数;% 当n=1时计算梯形公式;当n=2时计算辛普森公式,以此类推;I = n;h = (b - a) / i;z = 0;for j = 0 : ix(j + 1) = a + j * h;s = 1;if j == 0s = s;elsefor k=1 : js =s * k;endendr = 1;if i - j == 0r = r;elsefor k = 1 : (I - j)r = r * k;endendif mod((I - j), 2) == 1q = -(I * s * r);elseq = i * s * r;endy = 1; for k = 0 : i if k ~= jy = y * (sym('t') - k); end endl = int(y, 0 , i); C(j + 1)= l / q;z = z + C(j + 1)*f1(m, x(j + 1)); end g=(b - a)*z3 复合求积公式及Matlab 实现3.1 复合梯形公式的基本原理将区间[a , b ]划分成n 等分,分点k x a kh =+,,0,1,b ak n n-=,在每个子区间[1,k k x x +](0,1,1k n =-)上采用梯形公式得: 11110()()[()()]()2k kn n bx k k n ax k k h I f x dx f x dx f x f x R f +--+=====++∑∑⎰⎰(3.1)记11100[()()][()2()()]22n n n k k k k k h hT f x f x f a f x f b --+===+=++∑∑ (3.2)称式(3.2)为复合梯形公式. 3.2 复合梯形公式的Matlab 实现 function s = trapr1(f, a, b, n) % f 表示被积函数; % a ,b 表示积分上下限; % n 是子区间的个数; h = (b - a) / n; s = 0;for k = 1 : (n - 1) x = a + h * k; s = s + feval('f', x); end format longs = h*(feval('f', a) + feval('f', b)) / 2 + h * s; 3.3 复合辛普森求积公式的基本原理将区间[a,b]分等分,在每一个子区间1,k k x x +]上采用辛普森公式,若记1/212k k x x h +=+,则得1111/210()()[()4()()]()6k kn n bx k k k n ax k k h f x dx f x dx f x f x f x R f +--++====+++∑∑⎰⎰(3.3)记1111/211/2001[()4()()][()4()2()()]66n n n n k k k k k k k k h hS f x f x f x f a f x f x f b ---+++====++=+++∑∑∑(3.4)称式(3.4)为复合辛普森求积公式. 3.4 复合辛普森求积公式的Matlab 实现 function s = simpr1(f, a, b, n) % f 表示被积函数; % a ,b 表示积分上下限; % n 是子区间的个数; h = (b - a) / (2 * n); s1 = 0; s2 = 0; for k = 1 : nx = a + h * (2*k - 1); s1 = s1 + feval('f', x); endfor k = 1 : (n - 1) x = a + h * 2 * k;s2 = s2 + feval('f', x); ends = h*(feval('f', a) + feval('f', b) + 4 * s1 + 2 * s2) / 3;4 龙贝格求积公式及Matlab 实现4.1 龙贝格算法的基本原理由梯形的递推法可以看出,将积分区间等分时,用复化梯形公式计算的结果2N T 作为积分I 的近似值,其误差近似值为21()3N N T T - (4.1) 可以设想,如果用这个误差作为2N T 的一种补偿,即将22241()341NN N N N T T T T T -+-=- (4.2) 作为积分的近似值,可望提高其精确度.直接根据复化求积公式,不难验证22241()341NN N N N N T T S T T T -=+-=- (4.3) 这说明,将区间对分前后两次复化梯形公式的值,按式222211()()341N N N N N N I T T T T T T ≈+-=+-- (4.4)作线性组合恰好等于复合辛普森公式的值N S ,它比2N T 更接近于近似值. 同样,根据2222211(S )(S )1541N N N N N N I S S S S ≈+-=+-- (4.5) 用2N S 于N S 作线性组合会得到比2N S 更精确的值,且通过直接验证可得222224S 1(S )1541N N N NN N S C S S -=+-=- (4.6) 再由222211(C )(C )6341N N N N N I C C C ≈+-=-- (4.7) 用2N C 与N C 作线性组合,又可得到比2N C 更精确的值,通常记为R N ,即322234C 1R (C )6341N N N NN N C C C -≈+-=- (4.8)此式(4.8)就称为龙贝格求积公式.上述用若干积分近似值推算出更为精确的积分近似值得方法,称为外推法.我们将 序列{T },{S },{C },{R }N N N N 分别称为梯形序列,辛普森序列,柯特斯序列和龙贝格序列.由龙贝格序列求积的算法称为龙贝格算法.具体步骤为: 第一步:算出(a)f 和(b)f 的值,根据公式1211(a (2j 1))(N 2,k 1,2,)222N k NN j b a b aT T f N N-=--=++-==∑ (4.9) 求出1T ;第二步:将区间[a,b]分半,算出()2a bf +的值,并根据(4.3)和(4.9)式计算2T 和1S ; 第三步:再将区间分半,算出()4b a f a -+及(3)4b af a -+⨯的值,并根据(4.3)和(4.9)式计算4T 和2S ,再有公式(4.4)求出1C ;第四步:再将区间分半,计算8T ,4S , 2C ,并根据公式(4.5)计算1R . 第五步:再将区间分半,类似上述过程计算16T ,8S , 4C ,2R .重复以上步骤即可得到1R ,2R ,一直到龙贝格序列中前后两项的绝对值差不超过给定的误差险为止. 4.2 龙贝格算法的Matlab 实现function [R, quad, err, h]=romber(f, a, b, n, delta) % f 表示被积函数; % a ,b 表示积分上下限; % n 是子区间的个数 % delta 是误差限 M = 1; h = b - a; err = 1 J = 0;R = zeros(4, 4);R(1, 1) = h * (feval('f', a) + feval('f', b)) / 2while ((err > delta) & (J < n) ) | (J < 4) J = J + 1; h = h / 2; s = 0; for p = 1 : Mx = a + h * (2*p - 1); s = s + feval('f', x); endR(J + 1, 1) = R(J, 1) / 2 + h*s; M = 2*M; for K = 1 : JR(J + 1,K + 1) = R(J + 1, K) + (R(J + 1,K) - R(J, K)) / (4^K - 1); enderr = abs(R(J, J) - R(J + 1,K + 1)); endquad = R(J + 1, J + 1);5 高斯-勒让德求积公式及Matlab 实现5.1 高斯-勒让德求积公式的基本原理在高斯求积公式()()()nbk k ak f x x dx A f x ρ=≈∑⎰(5.1)中,若取权函数()x ρ=1,区间[-1,1],则得公式1-1()()nk k k f x dx A f x =≈∑⎰(5.2)我们知道勒让德多项式是区间[-1,1]上的正交多项式,因此,勒让德多项式1()n P x +的零点就是求积公式(5.2)的高斯点,形如(5.1)式的高斯公式特别的称为高斯-勒让德求积公式.如下表5.1所示为高斯-勒让德求积公式的节点数和系数. 5.2 高斯-勒让德求积公式的Matlab 实现 function quad = gauss8(f ,a, b, x, A)N = length(x);T = zeros(1, N);T = (a + b) / 2 + ((b - a) / 2) * x;quad = ((b - a) / 2) * sum(A. * feval('f', T));表5.1 高斯-勒让德求积公式的节点数和系数6 各个求积公式的应用举例与比较分析6.1 简单数值积分10sin xdx x⎰的解(精确值0.946083070367183)6.1.1 牛顿-柯特斯当n=1时的梯形算法和n=2时的辛普森算法的结果解:先用M文件定义一个f1.m的函数function f = f1(i, x)g(1) = sqrt(x);if x == 0g(2) = 1;elseg(2) = sin(x) / x;endf = g(i);输入>>Ncotes(0, 1, 1, 2)回车得到;ans =0.9270输入>>Ncotes(0, 1, 2, 2)回车得到:ans =0.94616.1.2 复合梯形公式和复合辛普森求积公式的计算结果解:建立一个M文件定义一个f.m函数function y = f(x)if x == 0y = 1;elsey = sin(x) / xend输入>>trapr1(‘f’, 0, 1, 10)回车得到:ans =0.9458输入>>simpr1(‘f’, 0, 1, 10)ans =0.946110 )6.1.3 龙贝格求积公式的计算结果(取误差不超过10解:建立一个M文件定义一个f.m函数function y = f(x)if x == 0y = 1;elsey = sin(x) / xend输入>>romber (‘f ’, 0, 1, 10,0.5*10^(- 10)) 回车得到: quad = 0.9461 ans =0.9207 0 0 0 0 0.9398 0.9461 0 0 0 0.9445 0.9461 0.9461 0 0 0.9457 0.9461 0.9461 0.9461 00.9460 0.9461 0.9461 0.9461 0.9461 6.1.4 高斯-勒让德求积公式的计算结果(给定节点3) 解:建立一个M 文件定义一个f.m 函数 function y = f(x) ; y = sin(x) / x; 输入>>gauss8(‘f ’,0,1,[-0.7745966692,0.7745966692,0],[0.5555555556,0.5555555556,0.8888888888]) 回车得到: ans = 0.89566.2 复杂数值积分2201(cos 1x dx x π-+⎰的解(精确值-1.8785) 6.2.1 牛顿-柯特斯当n = 1时的梯形算法和n = 2时的辛普森算法的结果 解:先用M 文件定义一个f1.m 的函数 function f = f1(i, x) g(1) = sqrt(x); if x == 0 g(2) = 1; elseg(2) = cos(x) – 1 / (1 + x.^2) – 1 / (4.*sqrt(4 + x.^2));endf = g(i);输入>>Ncotes(0, 2*pi, 1, 2)回车得到ans =-1.8692输入>>Ncotes(0, 2*pi, 2, 2)回车得到ans =-1.87046.2.2 复合梯形公式和复合辛普森求积公式的计算结果解:先用M文件定义一个f1.m的函数function y = f(x)if x == 0y = 1;elsey = cos(x) – 1 / (1 + x.^2) – 1 / (4.*sqrt(4 + x.^2));end输入>>trapr1(‘f’, 0, 2*pi, 10)回车得到:ans =-1.8748输入>>simpr1(‘f’, 0, 2*pi, 10)ans =-1.869410 )6.2.3 龙贝格求积公式的计算结果(取误差不超过10解:先用M文件定义一个f1.m的函数function y = f(x)if x == 0y = 1;elsey = cos(x) – 1 / (1 + x.^2) – 1 / (4.*sqrt(4 + x.^2)); end输入>>romber(‘f’, 0, 2*pi ,10,0.5*10^(-10))回车得到:quad =-1.87646.3 各个求积公式的比较分析(以10sin xdx x的各个积分结果为例)表6.1各个数值积分的比较牛顿-柯特斯方法是一种利用插值多项式来构造数值积分的常用方法,这其中梯形积分方法的误差最大,近似效果最差,辛普森方法的精度比梯形积分高了一个数量级,它的代数精度比梯形积分的代数精度高,能更好地近似积分值;牛顿-柯特斯积分方法的误差比辛普森积分精度高两个数量级.复合梯形积分方法比单独的梯形积分精度高,龙贝格方法收敛速度快、计算精度较高,但是计算量较大.高斯求积方法积分精度高、数值稳定、收敛速度较快,但是节点与系数的计算较麻烦,而且要求已知积分函数.结论本文主要讨论了数值积分的计算方法并通过MATLAB软件编程实现,通过前面的研究我们知道求数值积分近似值的计算方法很多,包括牛顿-柯特斯求积公式、复合求积公式、龙贝格求积公式、高斯求积公式等等.其中牛顿-柯特斯方法是一种利用插值多项式来构造数值积分的常用方法,这其中梯形积分方法的误差最大,近似效果最差,辛普森方法的精度比梯形积分高了一个数量级,它的代数精度比梯形积分的代数精度高,能更好地近似积分值;牛顿-柯特斯积分方法的误差比辛普森积分精度高两个数量级.因此,一般情况下,代数精度越高,积分公式计算精度也越高.但是高阶的牛顿-柯特斯方法的收敛性没有保证,因此,在实际计算中很少使用高阶的牛顿-柯特斯公式.复合梯形积分方法比单独的梯形积分精度高,它的积分精度和被积函数有关,还和复合积分时的步长有关.复合辛普森积分公式比单独的辛普森积分公式高近7个数量级,效果明显.龙贝格方法收敛速度快、计算精度较高,但是计算量较大.高斯求积方法积分精度高、数值稳定、收敛速度较快,但是节点与系数的计算较麻烦、而且要求已知积分函数.一般来说,牛顿-柯特斯方法的代数精度越高,数值积分的效果越好、越精确.当积分区间比较大的时候,可以采用复化积分方法可以得到更好的效果;变步长积分方法不仅可以很好地控制计算误差,并且可以寻找到适当的积分步长;龙贝格积分方法可以更好地利用变步长复合积分公式得到的积分序列从而得到更为精确的数值结果,是一个较好的数值积分方法.高斯求积方法精确度高,收敛性快也是一种很优秀的数值积分方法.参考文献[1]张德丰. Matlab数值分析与应用[M]. 北京: 国防工业出版社, 2007. 1-1[2]胡良剑, 孙晓君.MATLAB数学实验[M]. 北京: 高等教育出版社, 2006[3]李庆扬, 王能超, 易大义. 数值分析[M]. 北京: 清华大学出版社, 2008。

相关文档
最新文档