当前位置: 首页 > 编程笔记 >

Python Sympy计算梯度、散度和旋度的实例

云瑞
2023-03-14
本文向大家介绍Python Sympy计算梯度、散度和旋度的实例,包括了Python Sympy计算梯度、散度和旋度的html" target="_blank">实例的使用技巧和注意事项,需要的朋友参考一下

sympy有个vector 模块,里面提供了求解标量场、向量场的梯度、散度、旋度等计算,官方参考连接:

http://docs.sympy.org/latest/modules/vector/index.html

sympy中计算梯度、散度和旋度主要有两种方式:

一个是使用∇∇算子,sympy提供了类Del(),该类的方法有:cross、dot和gradient,cross就是叉乘,计算旋度的,dot是点乘,用于计算散度,gradient自然就是计算梯度的。

另一种方法就是直接调用相关的API:curl、divergence和gradient,这些函数都在模块sympy.vector 下面。

使用sympy计算梯度、散度和旋度之前,首先要确定坐标系,sympy.vector模块里提供了构建坐标系的类,常见的是笛卡尔坐标系, CoordSys3D,根据下面的例子可以了解到相应应用。

(1)计算梯度

## 1 gradient

C = CoordSys3D('C')
delop = Del() # nabla算子

# 标量场 f = x**2*y-xy
f = C.x**2*C.y - C.x*C.y

res = delop.gradient(f, doit=True) # 使用nabla算子
# res = delop(f).doit()
res = gradient(f) # 直接使用gradient

print(res) # (2*C.x*C.y - C.y)*C.i + (C.x**2 - C.x)*C.j

(2)计算散度

## divergence

C = CoordSys3D('C')
delop = Del() # nabla算子

# 向量场 f = x**2*y*i-xy*j
f = C.x**2*C.y*C.i - C.x*C.y*C.j

res = delop.dot(f, doit=True)

# res = divergence(f)

print(res) # 2*C.x*C.y - C.x,即2xy-x,向量场的散度是标量

(3)计算旋度

## curl

C = CoordSys3D('C')
delop = Del() # nabla算子

# 向量场 f = x**2*y*i-xy*j
f = C.x**2*C.y*C.i - C.x*C.y*C.j

res = delop.cross(f, doit=True)

# res = curl(f)

print(res) # (-C.x**2 - C.y)*C.k,即(-x**2-y)*k,向量场的旋度是向量

以上这篇Python Sympy计算梯度、散度和旋度的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。

 类似资料:
  • 在本节中,我们将介绍梯度下降(gradient descent)的工作原理。虽然梯度下降在深度学习中很少被直接使用,但理解梯度的意义以及沿着梯度反方向更新自变量可能降低目标函数值的原因是学习后续优化算法的基础。随后,我们将引出随机梯度下降(stochastic gradient descent)。 一维梯度下降 我们先以简单的一维梯度下降为例,解释梯度下降算法可能降低目标函数值的原因。假设连续可导

  • 本文向大家介绍梯度消失,梯度爆炸的问题,相关面试题,主要包含被问及梯度消失,梯度爆炸的问题,时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 激活函数的原因,由于梯度求导的过程中梯度非常小,无法有效反向传播误差,造成梯度消失的问题。

  • 本文向大家介绍如何解决梯度消失和梯度膨胀?相关面试题,主要包含被问及如何解决梯度消失和梯度膨胀?时的应答技巧和注意事项,需要的朋友参考一下 答: (1) 梯度消失:根据链式法则,如果每一层神经元对上一层的输出的偏导乘上权重解雇小于1的话,那么即使这个结果是0.99,经过足够多层传播之后,误差对输入层的偏导会趋于0; (2) 梯度膨胀:根据链式法则,如果每一层神经元对上一层的输出的偏导乘上权重结果都

  • 本文向大家介绍如何解决梯度消失和梯度爆炸?相关面试题,主要包含被问及如何解决梯度消失和梯度爆炸?时的应答技巧和注意事项,需要的朋友参考一下 (1)梯度消失: 根据链式法则,如果每一层神经元对上一层的输出的偏导乘上权重结果都小于1的话,那么即使这个结果是0.99,在经过足够多层传播之后,误差对输入层的偏导会趋于0 可以采用ReLU激活函数有效的解决梯度消失的情况,也可以用Batch Normaliz

  • 本文向大家介绍如何解决梯度消失和梯度膨胀?相关面试题,主要包含被问及如何解决梯度消失和梯度膨胀?时的应答技巧和注意事项,需要的朋友参考一下 梯度消失:根据链式法则,当每一层神经元对上一层的输出的偏导乘上权重结果都小于1的话,那么即使这个结果是0.99,经过多层传播之后,误差的输入层的偏导会趋于0,可以用relu激活函数来解决,因为relu=max(0,X),偏导数为1,不会造成梯度消失,而弊端是有

  • 调度框架和调度算法设计与实现