MATLAB 积分¶
积分是微积分的基石之一,用于求解面积、体积、累积变化量等问题。MATLAB 作为一个顶级的科学计算环境,提供了两大类截然不同的方法来进行积分运算:数值积分与符号积分。
-
数值积分 (Numerical Integration):
- 适用场景: 当函数无法解析积分,或只有一组离散的
(x, y)数据点时。 - 核心思想: 使用数值方法(如梯形法则、辛普森法则、自适应求积)来近似计算定积分的值。
- 特点: 结果是浮点数近似值,计算速度快,适用范围广。
- 适用场景: 当函数无法解析积分,或只有一组离散的
-
符号积分 (Symbolic Integration):
- 适用场景: 当你知道函数的精确数学表达式,并希望得到积分的解析表达式(反导数)时。
- 核心思想: 应用微积分的积分法则,推导出精确的数学公式。
- 特点: 结果是精确的符号表达式,可以进行进一步的符号运算。需要 Symbolic Math Toolbox。
数值积分 (Numerical Integration)¶
基于离散数据的积分¶
当你的数据来源于实验测量或采样,表现为一组 (x, y) 坐标点时,使用此类函数。
原理:梯形法则 (Trapezoidal Rule)¶
该方法将相邻数据点连接成直线,形成一系列梯形,然后将所有梯形的面积相加来近似曲线下的总面积。对于 N 个数据点,其数学表达式为:
trapz - 离散数据梯形积分¶
-
功能 使用梯形法则计算离散数据点的定积分。
-
语法
-
语法说明
trapz(Y): 假设X坐标的间距为 1。trapz(X, Y): 使用X和Y向量指定数据点。X坐标可以是非均匀的。trapz(___, dim): 如果Y是矩阵,则沿着指定的维度dim进行积分。
-
示例
cumtrapz - 离散数据累积积分¶
-
功能 计算累积梯形数值积分。返回一个与输入同等大小的向量,其中每个元素表示从起点到当前点的累积积分值。
-
语法
-
示例
基于函数句柄的积分¶
当你可以将函数写成 MATLAB 函数句柄 (@(x) ...) 的形式时,使用此类函数。它们通常比基于离散数据的方法更精确。
原理:自适应求积 (Adaptive Quadrature)¶
integral 及其系列函数的核心是自适应求积。其基本思想是“分而治之”:在函数变化平缓(“简单”)的区域使用较少的采样点,而在函数变化剧烈(“困难”)的区域使用更多的采样点,从而在保证精度的前提下实现最高效的计算。
其基本步骤如下:
-
初步估计: 算法首先使用一个低阶的求积法则(如辛普森法则)在整个积分区间 \([a, b]\) 上计算一个积分近似值 \(I\)。
-
区间细分与误差估计: 接着,算法将区间 \([a, b]\) 一分为二,在 \([a, c]\) 和 \([c, b]\) (其中 \(c = (a+b)/2\)) 两个子区间上分别计算积分,得到 \(I_1\) 和 \(I_2\)。通常情况下,\(I_1 + I_2\) 会是一个比 \(I\) 更精确的估计。这两者之差 \(|I - (I_1 + I_2)|\) 可以作为在 \([a, b]\) 上积分误差的一个估计。
-
递归与决策: 算法将这个误差估计值与一个预设的容限 (Tolerance) 进行比较。
- 如果误差小于容限: 说明当前区间的积分已经足够精确,算法接受更精确的估计 \(I_1 + I_2\) 作为结果,并停止对该区间的细分。
- 如果误差大于容限: 说明当前区间函数变化复杂,需要进一步细化。算法将递归地对两个子区间 \([a, c]\) 和 \([c, b]\) 分别重复上述过程,并将容限减半分配给它们。
-
结果汇总: 整个积分的值是所有被成功接受的子区间积分值之和。
通过这种方式,integral 能够自动地“适应”被积函数的特性,将计算资源集中在最需要的地方。
integral - 自适应一维数值积分¶
-
功能 一维数值积分。这是 MATLAB 推荐使用的、最强大和灵活的一维积分函数。
-
语法
-
语法说明
integral(fun, xmin, xmax): 计算函数fun从xmin到xmax的定积分。fun必须是一个接受向量输入并返回向量输出的函数句柄。'Name', Value(名称-值对): 用于控制积分精度,如'AbsTol'(绝对误差容限) 和'RelTol'(相对误差容限)。
-
示例
integral2 - 数值二重积分¶
-
功能 二维数值积分,计算二重积分 \(\ds \int_{y_\mr{min}}^{y_\mr{max}} \int_{x_\mr{min}}^{x_\mr{max}} f(x,y) \,dx\,dy\)。
-
语法
-
示例
integral3 - 数值三重积分¶
-
功能 三维数值积分,计算三重积分。
-
语法
-
示例
% 计算一个单位球体上半部分的体积 % 函数为 f(x,y,z) = 1 fun = @(x, y, z) ones(size(x)); % 定义积分区域 xmin = -1; xmax = 1; ymin = @(x) -sqrt(1 - x.^2); ymax = @(x) sqrt(1 - x.^2); zmin = @(x,y) zeros(size(x)); zmax = @(x,y) sqrt(1 - x.^2 - y.^2); volume = integral3(fun, xmin, xmax, ymin, ymax, zmin, zmax); disp(['单位半球体积: ', num2str(volume)]); % 结果应接近 2*pi/3
旧版函数¶
quad,quadl,quadgk: 这些是旧版的一维积分函数,已被integral全面取代。quadgk是integral的底层算法之一,有时用于处理路径上的奇点。dblquad,triplequad: 旧版的二维和三维积分函数,已被integral2和integral3取代。
符号积分 (Symbolic Integration)¶
这类函数作用于符号变量和表达式,需要 Symbolic Math Toolbox。
原理:符号计算¶
int 函数利用内置的微积分规则库来查找函数的反导数。
- 不定积分: 寻找函数 \(F(x)\),使得 \(F'(x) = f(x)\)。
- 定积分: 根据牛顿-莱布尼茨公式计算: [ \int_{a}^{b} f(x) \,dx = F(b) - F(a) ]
int - 符号不定与定积分¶
-
功能 计算符号表达式的不定积分(反导数)和定积分。
-
语法
-
语法说明
int(expr): 计算expr关于默认符号变量的不定积分。int(expr, var): 计算expr关于符号变量var的不定积分。int(expr, a, b): 计算expr关于默认符号变量的定积分,积分区间为[a, b]。int(expr, var, a, b): 计算expr关于var的定积分。
-
示例
syms x t % --- 不定积分 --- f_indef = 1 / (1 + t^2); indef_integral = int(f_indef, t); disp('不定积分 ∫1/(1+t^2) dt:'); disp(indef_integral); % 结果: atan(t) % --- 定积分 --- f_def = x * exp(-x^2); def_integral = int(f_def, x, 0, inf); % inf 代表无穷大 disp('定积分 ∫x*exp(-x^2) dx from 0 to Inf:'); disp(def_integral); % 结果: 1/2