MATLAB - 微积分
MATLAB - 现代微积分
Section titled “MATLAB - 现代微积分”MATLAB,通过其符号数学工具箱(Symbolic Math Toolbox),为解决微分和积分微积分中的问题提供了强大的工具。它允许对极限、导数和积分进行精确的符号解,这对于理论工作非常宝贵。您还可以求解微分方程并可视化复杂函数以分析它们的行为。
本章重点介绍微积分的一个基本概念:极限。我们将探讨如何符号计算函数的极限并验证它们的代数性质。这构成了理解导数和积分的基础,这些将在后续章节中介绍。
使用 limit 函数计算极限
Section titled “使用 limit 函数计算极限”在 MATLAB 中计算极限的主要工具是 limit 函数。在使用它之前,您必须使用 syms 命令声明您的符号变量。这会告诉 MATLAB 将这些变量视为符号实体,而不是数值。
limit(f, x, a) 的基本形式是寻找符号表达式 f 在变量 x 趋近于值 a 时的极限。如果省略第三个参数 a,MATLAB 将计算 x 趋近于 0 时的极限。
示例:变量趋近于零时的极限
Section titled “示例:变量趋近于零时的极限”让我们计算函数 f(x) = (x^3 + 5) / (x^4 + 7) 在 x 趋近于 0 时的极限。
% 首先,将 x 声明为符号变量syms x;
% 定义函数表达式f = (x^3 + 5) / (x^4 + 7);
% 计算 x 趋近于 0 时的极限L = limit(f, x, 0)
% 当极限点为 0 时的另一种更短的语法:% L = limit(f)MATLAB 将执行代码并返回精确的符号结果:
L =
5/7示例:变量趋近于非零数时的极限
Section titled “示例:变量趋近于非零数时的极限”现在,让我们计算函数 g(x) = (x - 3) / (x - 1) 在 x 趋近于 1 时的极限。
syms x;g = (x - 3) / (x - 1);L = limit(g, x, 1)MATLAB 返回:
L =
NaN为什么是 NaN? NaN 代表“不是一个数”(Not a Number)。MATLAB 返回此值是因为该极限不作为一个单一的有限值存在。当 x 从左侧趋近于 1 时,函数趋向于 +Inf(正无穷大)。当 x 从右侧趋近于 1 时,它趋向于 -Inf(负无穷大)。由于单侧极限不同,因此双侧极限不存在。我们接下来会探讨这个问题。
单侧极限:左侧和右侧
Section titled “单侧极限:左侧和右侧”当函数存在不连续点(Discontinuity)时,双侧极限可能不存在。然而,单侧极限(One-Sided Limits)通常存在。左侧极限(x -> a-)表示 x 从小于 a 的值趋近于 a。右侧极限(x -> a+)表示 x 从大于 a 的值趋近于 a。
您可以通过向 limit 函数添加 'left' 或 'right' 选项来计算单侧极限。
示例:分析不连续点
Section titled “示例:分析不连续点”考虑函数 f(x) = (x - 3) / |x - 3|。此函数在 x = 3 处有一个跳跃不连续点。我们通过绘制函数并计算单侧极限来验证这一点。
最佳实践: 不再推荐使用 ezplot 函数。使用 fplot 进行稳健且可自定义的函数绘图。
syms x;f = (x - 3) / abs(x - 3);
% 绘制函数以可视化不连续点figure;fplot(f, [-1, 7]);title('Plot of f(x) = (x-3)/|x-3|');xlabel('x');ylabel('f(x)');grid on;
% 计算 x 趋近于 3 时的左侧极限L_left = limit(f, x, 3, 'left')
% 计算 x 趋近于 3 时的右侧极限L_right = limit(f, x, 3, 'right')运行此代码首先会生成一个图。该图显示,对于所有 x < 3,在 y = -1 处有一条水平线;对于所有 x > 3,在 y = 1 处有另一条水平线。在 x = 3 处有一个明显的垂直跳跃,这在视觉上证实了不连续性。
命令行窗口随后显示计算出的极限:
L_left =
-1
L_right =
1由于 L_left 不等于 L_right,因此双侧极限 lim(x->3) f(x) 不存在。
验证代数极限定理
Section titled “验证代数极限定理”代数极限定理(Algebraic Limit Theorem)描述了极限如何与算术运算交互。如果 lim(x->a) f(x) = L 且 lim(x->a) g(x) = M,则:
lim(f(x) + g(x)) = L + Mlim(f(x) - g(x)) = L - Mlim(f(x) * g(x)) = L * Mlim(f(x) / g(x)) = L / M(前提是M不为 0)
我们可以使用 MATLAB 来验证这些性质在特定函数上的表现。设 f(x) = (3x + 5)/(x - 3) 和 g(x) = x^2 + 1,让我们检查 x 趋近于 4 时的极限。
syms x;f = (3*x + 5) / (x - 3);g = x^2 + 1;
% 定义极限点a = 4;
% 计算各个极限L1 = limit(f, x, a)M1 = limit(g, x, a)
% 验证性质L_Add = limit(f + g, x, a)L_Sub = limit(f - g, x, a)L_Mult = limit(f * g, x, a)L_Div = limit(f / g, x, a)
% 检查 L_Add 是否等于 L1 + M1 等。运行此文件时,它会显示结果,您会发现这些结果与定理的预测相符:
L1 = 17
M1 = 17
L_Add = 34
L_Sub = 0
L_Mult = 289
L_Div = 1常见错误与调试
Section titled “常见错误与调试”- 忘记
syms:如果您收到“未定义函数或变量”(Undefined function or variable)错误,您可能忘记使用syms x;声明变量。 - 符号变量与数值变量:
x = 5;创建一个数值变量。syms x;创建一个符号变量。limit函数需要符号变量。 - 理解
NaN:limit函数返回NaN通常意味着双侧极限不存在。使用单侧极限进行进一步调查。
使用开源替代品(例如 GNU Octave)
Section titled “使用开源替代品(例如 GNU Octave)”像 GNU Octave 这样的开源工具提供了 MATLAB 的免费替代品。对于符号计算,Octave 需要 symbolic 包,它使用 SymPy 库。语法可能有所不同。
% 在 Octave 中pkg load symbolicsymbols
x = sym("x");limit((x^3 + 5)/(x^4 + 7), x, 0)尽管 Octave 功能强大,但像 MATLAB 的符号数学工具箱这样的专用工具箱通常更稳健、功能更丰富,并且性能更优化。