第6章 数据分析——6.4 函数数值积分

简介: 第6章 数据分析——6.4 函数数值积分

6.4  函数数值积分


定积分的计算可用牛顿-莱布尼茨公式:

b4e5d60d74baca7666e3d2f8c9119374_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

其中,F(x)f(x)的原函数之一,可用不定积分求得。然而在实际问题中,在应用上述公式时往往会遇到一系列的问题。

被积函数f(x)是使用函数表格提供的。

被积函数表达式极为复杂,求不出原函数;或者求出的原函数的形式很复杂,不利于计算。

大量函数的原函数不容易或者根本无法求出,例如正弦型积分946c0ff70739fa42baad928354fd2fde_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png等,根本无法用初等函数来表示其原函数,因而无法精确计算其定积分。


数值积分便是为了解决上述问题而提出来的。数值积分只需计算f(x)在节点xi(i=1,2,…,n)上的值,计算方便且适合在计算机上实现。


6.4.1  数值积分问题的数学表述


区间[a, b]上的定积分0111254da4fc135a5117063f8ea2f2a8_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png,就是在区间[a, b]内取n+1个点x0,x1,,xn,利用被积函数f(x)在这n+1个点的函数值的某一种线性组合来近似作为待求定积分的值,即

4236bbdfcffa3b81ff09b49f46342c32_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

其中,xk称为积分节点,Ak称为求积系数。右端公式称为左端定积分的某个数值积分公式。因此,求积分的关键在于积分节点xk的选取及积分系数Ak的确定。

MATLAB支持三重以下的积分运算,分别为:a6aaf5e0589529eedae1d5149196812e_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png890611769542b80581c12bd468f52cba_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png3fc8c749bf2effb74484851ba9bb084a_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png。在计算积分值时,要求积分区间是确定的。


6.4.2  一元函数的数值积分


本节将讨论f(x)为一元函数时的积分情况。MATLAB为一元函数的数值积分提供了3个函数,分别为quadquadlquadv。下面将对这3个函数进行介绍。


1quad函数


quad函数采用遍历的自适应辛普森(Simpson)法计算函数的数值积分,适用于精度要求低、被积函数平滑性较差的数值积分。常用的调用格式如下:

● Q=quad(FUN,A,B)

● Q=quad(FUN,A,B,TOL)

● Q=quad(FUN,A,B,TOL,TRACE)

● [Q,FCNT]=quad(...)

式中,FUN为被积函数的句柄,FUN应该接收向量输入,并输出相同长度的向量。AB分别为积分的起始值和结束值。TOL用于控制自适应辛普森法的误差,增大TOL可以加快计算速度,但是计算精度会下降。在默认情况下,TOL=1.0e-6。当TRACE值非0时,函数输出计算过程中的[fcnt a b-a Q]FCNT表示函数计算的次数。


2quadl函数


quadl函数采用遍历的自适应Lobatto法计算函数的数值积分,适用于精度要求高、被积函数曲线比较平滑的数值积分。其用法与quad函数相同,分别如下:

● Q=quadl(FUN,A,B)

● Q=quadl(FUN,A,B,TOL)

● Q=quadl(FUN,A,B,TOL,TRACE)

● [Q,FCNT]=quadl(...)

式中各输入参数和输出参数的含义同quad函数。

通常quad函数具有较快的计算速度,但是准确性较差;而quadl函数需要更多的计算时间,但是具有较高的准确性。


3quadv函数


有的时候,被积函数f(x)是一系列的函数,如下述积分:

38bc18cbe78cb038e3b8ff9bcc94a8be_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

k取不同的数值时,该积分的结果也不尽相同。针对这种情况,MATLAB提供了quadv函数,可以一次计算多个一元函数的数值积分值。

quadv函数是quad函数的矢量扩展,因此也称为矢量积分。其用法与quad函数相同,分别如下:

● Q=quadv(FUN,A,B)

● Q=quadv(FUN,A,B,TOL)

● Q=quadv(FUN,A,B,TOL,TRACE)

● [Q,FCNT]=quadv(...)

式中各输入参数和输出参数的含义同quad函数。矢量积分的结果是一个向量。

quadquadlquadv 3个函数都要求被积函数FUN必须是函数句柄,同时积分限[a, b]必须是有限的,因此不能为inf。此外,在使用上述3个函数进行数值积分的求解时,可能会出现如下几种错误信息。

● 'Minimum step size reached':意味着子区间的长度与计算机舍入误差相当,无法继续计算。原因可能是有不可积的奇点。

● 'Maximum function count exceeded':意味着积分递归计算超过了10000次。原因可能是有不可积的奇点。

● 'Infinite or Not-a-Number function value encountered':意味着在积分计算时,区间内出现了浮点数溢出或者被零除的情况。


6-23:计算积分8d641d895d581167b40c0db10e2ff2fe_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

在命令行窗口中输入:

clear all;
F = @(x) 1 ./ (x.^3 - 2 * x - 5);
Q = quad(F, 0, 2)

输出结果:

Q =
   -0.4605


6.4.3  多重数值积分

本节将讨论被积函数为二元函数f(x, y)和三元函数f(x, y, z)的情况。MATLAB提供了dblquad函数和triplequad函数,分别用于计算二重数值积分和三重数值积分。


1.二重数值积分计算函数dblquad


dblquad函数可以用来计算被积函数在矩形区域x[xmin, xmax]y[ymin, ymax]内的数值积分值。该函数先计算积分值,然后利用内积分的中间结果来计算二重积分。根据dxdy的顺序,称x为内积分变量,y为外积分变量。dblquad函数的调用格式如下:

● Q=dblquad(FUN,XMIN,XMAX,YMIN,YMAX)

● Q=dblquad(FUN,XMIN,XMAX,YMIN,YMAX,TOL)

● Q=dblquad(FUN,XMIN,XMAX,YMIN,YMAX,TOL,@QUADL)

● Q=dblquad(FUN,XMIN,XMAX,YMIN,YMAX,TOL,MYQUADF)

式中,FUN为被积函数的句柄;XMINXMAXYMINYMAX分别为矩形区域在xy两个方向上的积分限;TOL指定绝对计算精度;@QUADLMYQUADF用以指定计算一维积分时采用的函数,MATLAB默认采用quad函数来计算一维积分,@QUADL表示用户指定采用quadl函数来计算一维积分,MYQUADF则表示采用用户自己编写的一维积分函数。


6-24:计算积分d5e6d242dd384fde078a5d5d7d82a6be_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

在命令行窗口中输入:

clear all;
f = @(x, y) y * sin(x) + 3 * cos(y) - 1;
xmin = pi;
xmax = 2 * pi;
ymin = 0;
ymax = pi;
q = dblquad(f, xmin, xmax, ymin, ymax)

输出结果:

q =
  -19.7392


2.三重数值积分计算函数triplequad

triplequad函数可以用来计算被积函数在空间区域x[xmin, xmax]y[ymin, ymax]z[zmin, zmax]内的数值积分值。该函数的调用格式如下:

● Q=triplequad(FUN,XMIN,XMAX,YMIN,YMAX,ZMIN,ZMAX)

● Q=triplequad(FUN,XMIN,XMAX,YMIN,YMAX,ZMIN,ZMAX,TOL)

● Q=triplequad(FUN,XMIN,XMAX,YMIN,YMAX,ZMIN,ZMAX,TOL,@QUADL)

● Q=triplequad(FUN,XMIN,XMAX,YMIN,YMAX,ZMIN,ZMAX,TOL,MYQUADF)

上式中相关参数的含义同dblquad函数。

计算三重数值积分可以用函数triplequad来实现,其用法与计算二重数值积分类似。



本章小结


针对数据分析和处理,MATLAB提供了大量的函数供用户使用。本章介绍了MATLAB强大的数据分析和处理功能,主要包括多项式函数、插值函数、数组和函数极限的求解过程及函数的数值积分计算。可以看出利用MATLAB进行数据分析非常灵活,读者需要熟练掌握。


相关文章
|
8月前
|
数据挖掘
第6章 数据分析——6.3 函数的极限
第6章 数据分析——6.3 函数的极限
第6章 数据分析——6.3 函数的极限
|
8月前
|
存储 算法 数据挖掘
第6章 数据分析——6.1 多项式及其函数
第6章 数据分析——6.1 多项式及其函数
第6章 数据分析——6.1 多项式及其函数
|
算法 数据挖掘
业务数据分析-Excel公式与函数(三)
业务数据分析-Excel公式与函数(三)
130 0
业务数据分析-Excel公式与函数(三)
|
数据挖掘 Python
数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解)—NumPy—Numpy 高级—通用函数(1)(九)
你好,感谢你能点进来本篇博客,请不要着急退出,相信我,如果你有一定的 Python 基础,想要学习 Python数据分析的三大库:numpy,pandas,matplotlib;这篇文章不会让你失望,本篇博客是 【AIoT阶段一(下)】 的内容:Python数据分析,
172 0
数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解)—NumPy—Numpy 高级—通用函数(1)(九)
|
数据挖掘 Python
数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解)—NumPy—Numpy 高级—通用函数(2)(十)
你好,感谢你能点进来本篇博客,请不要着急退出,相信我,如果你有一定的 Python 基础,想要学习 Python数据分析的三大库:numpy,pandas,matplotlib;这篇文章不会让你失望,本篇博客是 【AIoT阶段一(下)】 的内容:Python数据分析,
170 0
数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解)—NumPy—Numpy 高级—通用函数(2)(十)
|
数据挖掘 Python
Python数据分析与展示:pandas库统计分析函数-13
Python数据分析与展示:pandas库统计分析函数-13
126 0
Python数据分析与展示:pandas库统计分析函数-13
|
数据挖掘 Python
Python数据分析与展示:numpy统计函数与梯度函数-4
Python数据分析与展示:numpy统计函数与梯度函数-4
181 0
|
SQL 数据可视化 数据挖掘
数据分析必备的43个 Excel 函数!
Excel是我们工作中经常使用的一种工具,对于数据分析来说,这也是处理数据最基础的工具。很多传统行业的数据分析师甚至只要掌握Excel和SQL即可。
479 0
数据分析必备的43个 Excel 函数!
|
机器学习/深度学习 数据采集 人工智能
Python数据分析 | Pandas数据变换高级函数
本篇为『图解Pandas数据变换高级函数』,讲解3个函数是map、apply和applymap,更高效地完成数据处理过程中对DataFrame进行逐行、逐列和逐元素的操作。
256 0
Python数据分析 | Pandas数据变换高级函数
|
机器学习/深度学习 SQL 数据采集
Python数据分析 | Pandas核心操作函数大全
本篇为pandas系列的导语,对『Pandas核心操作函数』进行介绍,讲解Pandas进行数据操作和处理的核心数据结构:Series、DataFrame和Index。
504 0
Python数据分析 | Pandas核心操作函数大全