在python中,有关函数梯度的计算⽅法均在python库sympy的vector包⾥,要想实现梯度计算⾸先要从vector包⾥导⼊两个类,分别是:CoordSys3D和Del.
CoordSys3D类的⽅法主要是构建⼀个三维标量坐标系,⽽不是⽮量坐标系,我们需要将函数变量通过CoordSys3D的实例化对象映射到三维标量坐标系中。⽽Del类中包含gradient()即计算函数梯度的⽅法。具体应⽤实例如下: 理疗科这⾥关于类CoordSys3D的构造函数的参数有很多,有很多不常⽤的参数建议等到⽤的时候再去了解。构造函数源代码如下: __init__(self, name, location=None, rotation_matrix=None, parent=None, vector_names=None, variable_names=None, latex_vects=None, pretty_vects=No ne, latex_scalars=None, pretty_scalars=None, transformation=None)
非理性信念最常⽤的是name参数,即给实例化的CoordSys3D对象起⼀个新名字。
下⾯是Del类中gradient()⽅法的参数说明:
营养块gradient(self, scalar_field, doit=False)
| Returns the gradient of the given scalar field,as a
| Vector instance.
|
| Parameters
|==========
|
| scalar_field : SymPy expression
| The scalar field to calculate the gradient of.
|
精氨酸酶| doit :bool
| If True, the result is returned after calling .doit() on
俘虏兵下载
| each component. Else, the returned expression contains
| Derivative instances
函数作⽤是返回给定标量场的梯度,参数scalar_field必须是sympy表达式,参数doit是布尔值,默认情况下是False。如果为True,则在调⽤.doit()后返回结果每个组件。否则,返回的表达式包含导数实例。其中doit()⽅法的官⽅解释如下:
doit(self,**hints)
| Evaluate objects that are not evaluated by default like limits,
| integrals, sums and products. All objects of this kind will be
| evaluated recursively, unless some species were excluded via 'hints'
大营|or unless the 'deep' hint was set to 'False'.
即在默认情况下,像极限、积分、和积等数学运算对象都是不进⾏计算的。这些对象⼀般都是通过递归进⾏计算,除⾮某些东西通
过“hint”参数被排除在外⼜或者除⾮“deep”关键字被设为“False”,才能计算出这些默认情况下不进⾏计算的对象。
例如下⾯的求2乘以x的不定积分:
显然,对于前半部分求解梯度的过程中,我们并没有调⽤doit()⽅法也没有将gradient()函数中参数doit设置为True,所以最后得的梯度结果包含导数实例,即在默认情况下不进⾏计算。如果我们使⽤两者中的任意⼀个⽅法都能求解出梯度值: