主要内容

求导

此示例说明了如何使用 Symbolic Math Toolbox™ 来求导数。

首先创建一个符号表达式。

syms x
f = sin(5*x);

对表达式 f 关于 x 求导。

Df = diff(f)
Df = 5cos(5x)

再举个例子,指定另一个使用 exp(x) 来表示 ex 的表达式。

g = exp(x)*cos(x);

对表达式 g 求导。

y = diff(g)
y = excos(x)-exsin(x)

要求 g 在给定 x 值处的导数,可使用 subsx 代入该值,然后使用 vpa 返回数值结果。求 gx = 2 处的导数。

y_eval = vpa(subs(y,x,2))
y_eval = -9.7937820180676088383807818261614

要求 g 的二阶导数,请使用 diff(g,2)

D2g = diff(g,2)
D2g = -2exsin(x)

通过两次求导,您可以得到相同的结果。

D2g = diff(diff(g))
D2g = -2exsin(x)

在此示例中,Symbolic Math Toolbox 返回简化的答案。但在某些情况下,答案未经过简化,这时您可以使用 simplify 命令进行简化。此示例的下一部分将讨论此类简化的情况。

请注意,要对常数求导,您必须先将该常数定义为符号表达式。

c = sym("5");
Dc = diff(c)
Dc = 0

如果您直接对一个常数(例如 5)使用 diff,结果将会是一个空数组,因为该数值不是符号对象,而是 double 数值类型。

Dc = diff(5)
Dc =

     []

多变量表达式的导数

要对包含多个符号变量的表达式求导,需要指定要关于哪个变量求导。然后,diff 命令会计算该表达式关于该指定变量的偏导数。例如,指定一个包含两个变量的符号表达式。

syms s t
f = sin(s*t);

通过使用 diff 并指定求导变量为 t,求偏导数 f/t

Df_t = diff(f,t)
Df_t = scos(st)

要对 f 关于变量 s 求导,需要指定求导变量为 s

Df_s = diff(f,s)
Df_s = tcos(st)

如果您不指定要关于哪个变量求导,diff 会使用默认变量。一般来说,默认变量是字母表中最接近 x 的字母。有关完整的规则,请参阅Find Symbolic Variables in Expressions, Functions, and Matrices。在前面的示例中,diff(f)f 关于 t 求导,这是因为在字母表中字母 t 比字母 s 更接近 x。要确定 MATLAB® 求导时使用的默认变量,可使用 symvar

fvar = symvar(f,1)
fvar = t

计算 f 关于 t 的二阶导数。

D2f = diff(f,t,2)
D2f = -s2sin(st)

请注意,diff(f,2) 会返回相同的答案,因为 t 是默认变量。

关于导数的更多示例

为了进一步说明对其他表达式使用 diff 函数的情况,我们定义了以下符号变量 abxnttheta

syms a b x n t theta

下表说明了对几个其他表达式使用 diff 的结果。

f

diff(f)

>> syms x n

>> f = x^n;

>> Df = diff(f)

Df =

n*x^(n - 1)

>> syms a b t

>> f = sin(a*t + b);

>> Df = diff(f)

Df =

a*cos(b + a*t)

>> syms theta

>> f = exp(i*theta);

>> Df = diff(f)

Df =

exp(theta*1i)*1i

您可以对第一类贝塞尔函数 besselj(nu,z) 关于 z 求导。

syms nu z
b = besselj(nu,z);
Db = diff(b)
Db = 

νJbesseljν(z)z-Jbesseljν+1(z)

diff 函数也可以将符号矩阵作为其输入。在这种情况下,求导是逐个元素进行的。

syms a x
A = [cos(a*x),sin(a*x);-sin(a*x),cos(a*x)]
A = 

(cos(ax)sin(ax)-sin(ax)cos(ax))

A 关于 x 的导数。

DA = diff(A)
DA = 

(-asin(ax)acos(ax)-acos(ax)-asin(ax))

您还可以对向量函数关于向量参量进行求导。以笛卡尔坐标 (x,y,z) 到球面坐标 (r,λ,φ) 的变换为例,变换公式如下:

x=rcosλcosφ,

y=rcosλsinφ,

z=rsinλ.

在本例中,λ 对应于仰角或纬度,而 φ 表示方位角或经度。

A point in 3-D space can be represented in Cartesian coordinates (x,y,z) or spherical coordinates (r,lambda,phi)

要计算这个变换的雅可比矩阵 J,请使用 jacobian 函数。J 的数学表示法为

J=(x,y,z)(r,λ,φ).

为了计算雅可比矩阵,我们使用 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 = 

(cos(f)cos(l)-rcos(f)sin(l)-rcos(l)sin(f)cos(l)sin(f)-rsin(f)sin(l)rcos(f)cos(l)sin(l)rcos(l)0)

求这个雅可比矩阵的行列式并简化结果。

detJ = simplify(det(J))
detJ = -r2cos(l)

jacobian 函数的参量可以是列向量或行向量。此外,由于雅可比矩阵的行列式是一个相当复杂的三角函数表达式,因此,您可以使用 simplify 进行三角函数的代换和化简(简化)。

下面是一个总结 diffjacobian 的表。

数学运算符

使用 Symbolic Math Toolbox 的命令

dfdx

diff(f)diff(f,x)

dfda

diff(f,a)

d2fdb2

diff(f,b,2)

J=(r,t)(u,v)

J = jacobian([r; t],[u; v])

另请参阅

| | | | | |

外部网站