跳转至

MATLAB 积分

积分是微积分的基石之一,用于求解面积、体积、累积变化量等问题。MATLAB 作为一个顶级的科学计算环境,提供了两大类截然不同的方法来进行积分运算:数值积分符号积分

  • 数值积分 (Numerical Integration):

    • 适用场景: 当函数无法解析积分,或只有一组离散的 (x, y) 数据点时。
    • 核心思想: 使用数值方法(如梯形法则、辛普森法则、自适应求积)来近似计算定积分的值。
    • 特点: 结果是浮点数近似值,计算速度快,适用范围广。
  • 符号积分 (Symbolic Integration):

    • 适用场景: 当你知道函数的精确数学表达式,并希望得到积分的解析表达式(反导数)时。
    • 核心思想: 应用微积分的积分法则,推导出精确的数学公式。
    • 特点: 结果是精确的符号表达式,可以进行进一步的符号运算。需要 Symbolic Math Toolbox

数值积分 (Numerical Integration)

基于离散数据的积分

当你的数据来源于实验测量或采样,表现为一组 (x, y) 坐标点时,使用此类函数。

原理:梯形法则 (Trapezoidal Rule)

该方法将相邻数据点连接成直线,形成一系列梯形,然后将所有梯形的面积相加来近似曲线下的总面积。对于 N 个数据点,其数学表达式为:

\[ \int_{a}^{b} f(x) \,dx \approx \sum_{i=1}^{N-1} \frac{y_i + y_{i+1}}{2} (x_{i+1} - x_i) \]

trapz - 离散数据梯形积分

  • 功能 使用梯形法则计算离散数据点的定积分。

  • 语法

    Q = trapz(Y)
    Q = trapz(X, Y)
    Q = trapz(___, dim)
    

  • 语法说明

    • trapz(Y): 假设 X 坐标的间距为 1。
    • trapz(X, Y): 使用 XY 向量指定数据点。X 坐标可以是非均匀的。
    • trapz(___, dim): 如果 Y 是矩阵,则沿着指定的维度 dim 进行积分。
  • 示例

    % 假设我们有以下离散数据点
    x = [0, 1, 2, 3, 4];
    y = [0, 2, 3, 2.5, 4];
    
    % 使用梯形法则计算曲线下的面积
    area = trapz(x, y);
    
    disp(['离散数据点的积分面积: ', num2str(area)]); % 结果为 9.75
    

cumtrapz - 离散数据累积积分

  • 功能 计算累积梯形数值积分。返回一个与输入同等大小的向量,其中每个元素表示从起点到当前点的累积积分值。

  • 语法

    Z = cumtrapz(Y)
    Z = cumtrapz(X, Y)
    

  • 示例

    x = 0:pi/10:pi;
    y = sin(x);
    
    % 计算累积积分
    cumulative_area = cumtrapz(x, y);
    
    figure;
    plot(x, y, 'b-o', 'DisplayName', 'sin(x)');
    hold on;
    plot(x, cumulative_area, 'r-s', 'DisplayName', '累积积分');
    legend;
    title('cumtrapz - 累积积分示例');
    grid on;
    

基于函数句柄的积分

当你可以将函数写成 MATLAB 函数句柄 (@(x) ...) 的形式时,使用此类函数。它们通常比基于离散数据的方法更精确。

原理:自适应求积 (Adaptive Quadrature)

integral 及其系列函数的核心是自适应求积。其基本思想是“分而治之”:在函数变化平缓(“简单”)的区域使用较少的采样点,而在函数变化剧烈(“困难”)的区域使用更多的采样点,从而在保证精度的前提下实现最高效的计算。

其基本步骤如下:

  1. 初步估计: 算法首先使用一个低阶的求积法则(如辛普森法则)在整个积分区间 \([a, b]\) 上计算一个积分近似值 \(I\)

  2. 区间细分与误差估计: 接着,算法将区间 \([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]\) 上积分误差的一个估计

  3. 递归与决策: 算法将这个误差估计值与一个预设的容限 (Tolerance) 进行比较。

    • 如果误差小于容限: 说明当前区间的积分已经足够精确,算法接受更精确的估计 \(I_1 + I_2\) 作为结果,并停止对该区间的细分。
    • 如果误差大于容限: 说明当前区间函数变化复杂,需要进一步细化。算法将递归地对两个子区间 \([a, c]\)\([c, b]\) 分别重复上述过程,并将容限减半分配给它们。
  4. 结果汇总: 整个积分的值是所有被成功接受的子区间积分值之和。

通过这种方式,integral 能够自动地“适应”被积函数的特性,将计算资源集中在最需要的地方。

integral - 自适应一维数值积分

  • 功能 一维数值积分。这是 MATLAB 推荐使用的、最强大和灵活的一维积分函数。

  • 语法

    q = integral(fun, xmin, xmax)
    q = integral(fun, xmin, xmax, 'Name', Value)
    

  • 语法说明

    • integral(fun, xmin, xmax): 计算函数 funxminxmax 的定积分。fun 必须是一个接受向量输入并返回向量输出的函数句柄。
    • 'Name', Value (名称-值对): 用于控制积分精度,如 'AbsTol' (绝对误差容限) 和 'RelTol' (相对误差容限)。
  • 示例

    % 计算高斯函数 exp(-x^2) 在 (-Inf, Inf) 上的积分
    fun = @(x) exp(-x.^2);
    q = integral(fun, -Inf, Inf); % integral 可以处理无穷区间
    
    disp(['∫exp(-x^2)dx from -Inf to Inf 的结果: ', num2str(q)]); % 结果应接近 sqrt(pi)
    

integral2 - 数值二重积分

  • 功能 二维数值积分,计算二重积分 \(\ds \int_{y_\mr{min}}^{y_\mr{max}} \int_{x_\mr{min}}^{x_\mr{max}} f(x,y) \,dx\,dy\)

  • 语法

    q = integral2(fun, xmin, xmax, ymin, ymax)
    

  • 示例

    % 计算函数 f(x,y) = 1/(sqrt(x+y)*(1+x+y)^2) 的二重积分
    % 积分区域为 x∈[0,1], y∈[0, 1-x]
    fun = @(x, y) 1 ./ ( sqrt(x + y) .* (1 + x + y).^2 );
    
    % y 的上限是 x 的函数,所以 ymax 也是一个函数句柄
    ymax = @(x) 1 - x;
    
    q = integral2(fun, 0, 1, 0, ymax);
    
    disp(['二重积分结果: ', num2str(q)]); % 结果约为 0.2854
    

integral3 - 数值三重积分

  • 功能 三维数值积分,计算三重积分。

  • 语法

    q = integral3(fun, xmin, xmax, ymin, ymax, zmin, zmax)
    

  • 示例

    % 计算一个单位球体上半部分的体积
    % 函数为 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 全面取代。quadgkintegral 的底层算法之一,有时用于处理路径上的奇点。
  • dblquad, triplequad: 旧版的二维和三维积分函数,已被 integral2integral3 取代。

符号积分 (Symbolic Integration)

这类函数作用于符号变量和表达式,需要 Symbolic Math Toolbox

原理:符号计算

int 函数利用内置的微积分规则库来查找函数的反导数。

  • 不定积分: 寻找函数 \(F(x)\),使得 \(F'(x) = f(x)\)
  • 定积分: 根据牛顿-莱布尼茨公式计算: [ \int_{a}^{b} f(x) \,dx = F(b) - F(a) ]

int - 符号不定与定积分

  • 功能 计算符号表达式的不定积分(反导数)和定积分。

  • 语法

    F = int(expr)
    F = int(expr, var)
    F = int(expr, a, b)
    F = int(expr, var, a, b)
    

  • 语法说明

    • 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