求导
此示例说明了如何使用 Symbolic Math Toolbox™ 来求导数。
首先创建一个符号表达式。
syms x
f = sin(5*x);对表达式 f 关于 x 求导。
Df = diff(f)
Df =
再举个例子,指定另一个使用 exp(x) 来表示 的表达式。
g = exp(x)*cos(x);
对表达式 g 求导。
y = diff(g)
y =
要求 g 在给定 x 值处的导数,可使用 subs 为 x 代入该值,然后使用 vpa 返回数值结果。求 g 在 x = 2 处的导数。
y_eval = vpa(subs(y,x,2))
y_eval =
要求 g 的二阶导数,请使用 diff(g,2)。
D2g = diff(g,2)
D2g =
通过两次求导,您可以得到相同的结果。
D2g = diff(diff(g))
D2g =
在此示例中,Symbolic Math Toolbox 返回简化的答案。但在某些情况下,答案未经过简化,这时您可以使用 simplify 命令进行简化。此示例的下一部分将讨论此类简化的情况。
请注意,要对常数求导,您必须先将该常数定义为符号表达式。
c = sym("5");
Dc = diff(c)Dc =
如果您直接对一个常数(例如 5)使用 diff,结果将会是一个空数组,因为该数值不是符号对象,而是 double 数值类型。
Dc = diff(5)
Dc =
[]
多变量表达式的导数
要对包含多个符号变量的表达式求导,需要指定要关于哪个变量求导。然后,diff 命令会计算该表达式关于该指定变量的偏导数。例如,指定一个包含两个变量的符号表达式。
syms s t f = sin(s*t);
通过使用 diff 并指定求导变量为 t,求偏导数 。
Df_t = diff(f,t)
Df_t =
要对 f 关于变量 s 求导,需要指定求导变量为 s。
Df_s = diff(f,s)
Df_s =
如果您不指定要关于哪个变量求导,diff 会使用默认变量。一般来说,默认变量是字母表中最接近 x 的字母。有关完整的规则,请参阅Find Symbolic Variables in Expressions, Functions, and Matrices。在前面的示例中,diff(f) 对 f 关于 t 求导,这是因为在字母表中字母 t 比字母 s 更接近 x。要确定 MATLAB® 求导时使用的默认变量,可使用 symvar。
fvar = symvar(f,1)
fvar =
计算 f 关于 t 的二阶导数。
D2f = diff(f,t,2)
D2f =
请注意,diff(f,2) 会返回相同的答案,因为 t 是默认变量。
关于导数的更多示例
为了进一步说明对其他表达式使用 diff 函数的情况,我们定义了以下符号变量 a、b、x、n、t 和 theta。
syms a b x n t theta
下表说明了对几个其他表达式使用 diff 的结果。
|
|
|---|---|
|
|
|
|
|
|
您可以对第一类贝塞尔函数 besselj(nu,z) 关于 z 求导。
syms nu z b = besselj(nu,z); Db = diff(b)
Db =
diff 函数也可以将符号矩阵作为其输入。在这种情况下,求导是逐个元素进行的。
syms a x A = [cos(a*x),sin(a*x);-sin(a*x),cos(a*x)]
A =
求 A 关于 x 的导数。
DA = diff(A)
DA =
您还可以对向量函数关于向量参量进行求导。以笛卡尔坐标 到球面坐标 的变换为例,变换公式如下:
,
,
.
在本例中, 对应于仰角或纬度,而 表示方位角或经度。

要计算这个变换的雅可比矩阵 ,请使用 jacobian 函数。 的数学表示法为
.
为了计算雅可比矩阵,我们使用 l 表示 ,使用 f 表示 。求雅可比矩阵。
syms r l f x = r*cos(l)*cos(f); y = r*cos(l)*sin(f); z = r*sin(l); J = jacobian([x; y; z], [r l f])
J =
求这个雅可比矩阵的行列式并简化结果。
detJ = simplify(det(J))
detJ =
jacobian 函数的参量可以是列向量或行向量。此外,由于雅可比矩阵的行列式是一个相当复杂的三角函数表达式,因此,您可以使用 simplify 进行三角函数的代换和化简(简化)。
下面是一个总结 diff 和 jacobian 的表。
数学运算符 | 使用 Symbolic Math Toolbox 的命令 |
|---|---|
| |
| |
| |
|
另请参阅
diff | int | jacobian | gradient | curl | laplacian | functionalDerivative