求导
此示例说明了如何使用 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