MATLAB - 微分
MATLAB - 符号微分和微积分
Section titled “MATLAB - 符号微分和微积分”MATLAB 中的 **Symbolic Math Toolbox™(符号数学工具箱)**允许您以符号方式而不是数值方式执行微积分计算。这意味着您可以处理数学表达式并获得精确的解析结果。本章涵盖符号微分、求极大/极小值以及求解微分方程。
注意: 所描述的功能需要符号数学工具箱。GNU Octave 等开源替代品也提供类似的符号包功能,但语法和功能可能有所不同。
创建符号变量和函数
Section titled “创建符号变量和函数”在执行符号操作之前,您必须使用 syms 命令将变量声明为符号变量。
% 将 t 和 x 声明为符号变量syms t x
% 定义符号函数 f(t)f = 3*t^2 + 2/t^2;
% 现在 f 是一个符号表达式,而不是一个数值diff 命令计算符号表达式的导数。
syms xf = x^3 * sin(x);
% 计算 f 对 x 的一阶导数df_dx = diff(f, x)
df_dx =
3*x^2*sin(x) + x^3*cos(x)如果表达式只包含一个符号变量,您可以从 diff 命令中省略该变量:diff(f)。
要计算高阶导数,请提供阶数作为附加参数。让我们找到 f 的二阶导数。
% 计算 f 的二阶导数 (d^2f/dx^2)d2f_dx2 = diff(f, x, 2)
d2f_dx2 =
6*x*sin(x) + 6*x^2*cos(x) - x^3*sin(x)应用:查找极大值和极小值
Section titled “应用:查找极大值和极小值”微分的一个经典应用是查找函数的局部极大值和极小值。这涉及找到驻点(一阶导数为零的点),然后使用二阶导数检验来对其进行分类。
示例:分析 f(x) = x³ - 6x² + 5
Section titled “示例:分析 f(x) = x³ - 6x² + 5”步骤 1:定义函数并求其一阶导数。
syms xf = x^3 - 6*x^2 + 5;df = diff(f, x)步骤 2:通过求解 df/dx = 0 找到驻点。
% solve 命令查找符号方程的根stationary_points = solve(df == 0, x)
stationary_points =
0 4步骤 3:使用二阶导数检验来分类这些点。
d2f = diff(f, x, 2);
% 将驻点代入二阶导数second_deriv_vals = subs(d2f, x, stationary_points)
second_deriv_vals =
-6 % 在 x=0 处,d2f < 0 -> 局部极大值 6 % 在 x=4 处,d2f > 0 -> 局部极小值步骤 4:可视化结果。
% 使用 fplot 进行现代绘图fplot(f, [-2, 6]);hold on; % 保持当前绘图并在其上添加
% 在驻点处评估函数值y_points = subs(f, x, stationary_points);
% 将极大值/极小值点绘制为红色圆圈plot(stationary_points, y_points, 'ro', 'MarkerFaceColor', 'r');
title('Function with Local Maxima and Minima');xlabel('x');ylabel('f(x)');legend('f(x)', 'Stationary Points');grid on;hold off;这种使用 fplot 和 plot 的现代方法提供了清晰且信息丰富的分析结果可视化。
求解常微分方程(ODE)
Section titled “求解常微分方程(ODE)”dsolve 命令查找常微分方程的符号解。函数 y(t) 的导数表示为 diff(y,t)。
示例 1:通解
Section titled “示例 1:通解”我们来求解二阶常微分方程:y” - y = 0。
syms y(t)
% 使用 == 定义方程ode = diff(y, t, 2) - y == 0;
% 求解 y(t)sol_general = dsolve(ode)
sol_general =
C1*exp(-t) + C2*exp(t)该解包含任意常数 C1 和 C2,表示满足常微分方程的函数族。
示例 2:初值问题
Section titled “示例 2:初值问题”为了找到特定的解,我们可以提供初始条件。让我们用 y(0) = 2 和 y’(0) = -1 来求解相同的常微分方程。
syms y(t)
% 为初始条件定义导数Dy = diff(y, t);
% 定义初始条件conds = [y(0) == 2, Dy(0) == -1];
% 定义相同的常微分方程ode = diff(y, t, 2) - y == 0;
% 在给定条件下求解sol_specific = dsolve(ode, conds)
sol_specific =
(3*exp(-t))/2 + exp(t)/2这提供了满足微分方程和给定初始状态的精确、唯一解。