MATLAB - 积分
MATLAB - 符号积分与数值积分
Section titled “MATLAB - 符号积分与数值积分”积分是微积分中的核心概念,主要有两个应用:从导数中求函数(不定积分或反微分),以及计算某个量的总累积,例如曲线下的面积(定积分)。MATLAB 为这两种情况提供了强大且独特的工具。
- 符号积分:用于找到积分的精确解析解。它将变量视为抽象符号,而非数值。这由符号数学工具箱 (Symbolic Math Toolbox) 中的
int函数处理。 - 数值积分:用于找到定积分的数值近似值。当无法找到精确解或不需要精确解时,这是必要的。现代函数是
integral。
符号积分(不定积分和定积分)
Section titled “符号积分(不定积分和定积分)”当您需要精确的数学表达式作为结果时,符号积分是正确的选择。它需要符号数学工具箱。
int 函数的语法
Section titled “int 函数的语法”% 声明符号变量syms x t n
% 不定积分F = int(f, x) % 对函数 f 关于变量 x 进行积分
% 定积分A = int(f, x, a, b) % 对 f 关于 x 从 a 到 b 进行积分示例 1:求解不定积分
Section titled “示例 1:求解不定积分”让我们求解 f(x) = ax^2 + sin(x) 的不定积分。
syms x a
% 定义函数f = a*x^2 + sin(x);
% 计算不定积分F = int(f, x)
% 注意:MATLAB 的符号积分不添加积分常数 '+ C'。MATLAB 返回精确的解析结果:
F =
(a*x^3)/3 - cos(x)示例 2:求解定积分
Section titled “示例 2:求解定积分”让我们计算曲线 y = x^3 从 x=0 到 x=2 的精确面积。
syms x
% 计算定积分area = int(x^3, x, 0, 2)
% 要从符号结果获取数值,请使用 double()double_area = double(area);结果是:
area =
4数值积分(定积分)
Section titled “数值积分(定积分)”当处理没有简单反导数的复杂函数,或者处理数值数据而非符号表达式时,您必须使用数值积分。现代推荐的函数是 integral。
弃用通知:quad、quadl 和 quadgk 等旧函数不再推荐使用。integral 函数更健壮,通常更快,应在所有新代码中使用。
integral 函数的语法
Section titled “integral 函数的语法”% 使用函数句柄定义要积分的函数fun = @(x) ... your_expression_in_x ...;
% 计算积分Q = integral(fun, xmin, xmax)最佳实践:使用匿名函数 (@(x) ...) 是为 integral 定义被积函数的标准且最有效的方法。它避免了符号变量的开销,并且可读性强。
示例 3:高斯函数的面积
Section titled “示例 3:高斯函数的面积”让我们找出高斯曲线 f(x) = exp(-x^2) 从 -Inf 到 Inf 下方的面积。这是一个经典积分,其解析值为 sqrt(pi)。
% 1. 将被积函数定义为匿名函数gaussian_fun = @(x) exp(-x.^2);
% 2. 指定积分上下限xmin = -Inf;xmax = Inf;
% 3. 计算数值积分area = integral(gaussian_fun, xmin, xmax);
% 让我们用已知的解析解进行验证analytical_solution = sqrt(pi);
fprintf('Numerical Result: %f\n', area);fprintf('Analytical Result: %f\n', analytical_solution);输出显示了高度精确的数值近似:
area = 1.7725
Numerical Result: 1.772454Analytical Result: 1.772454可视化积分面积
Section titled “可视化积分面积”可视化您正在积分的函数通常很有帮助。现代的 fplot 函数非常适合绘制表达式或函数句柄。
弃用通知:ezplot 函数不推荐用于新代码。fplot 具有更优的控制和性能,应优先使用。
示例 4:积分并绘制 x*sin(x)
Section titled “示例 4:积分并绘制 x*sin(x)”% 定义函数句柄f = @(x) x .* sin(x);
% 定义积分上下限a = 0;b = 2*pi;
% 计算积分result = integral(f, a, b);
% 绘制函数以进行可视化figure;fplot(f, [a, b]);hold on;
% 填充曲线下方的区域以表示积分x_fill = linspace(a, b, 200);y_fill = f(x_fill);fill(x_fill, y_fill, 'c', 'FaceAlpha', 0.3); % 'c' 代表青色
title('Integral of f(x) = x*sin(x) from 0 to 2*pi');xlabel('x');ylabel('f(x)');grid on;legend('f(x)', 'Integrated Area');这段代码不仅计算积分,还生成了一个清晰、专业的绘图,直观地展示了积分的概念。