0

在圆柱坐标中使用时,我发现 sympy.vector.divergence 函数存在问题。

有时它会给出正确的答案,但有时会给出错误的答案。

请参见下面的示例。

分歧(1 * rhat)返回0,当它应该返回1/R

分歧(R * rhat)返回2,正确答案。

from sympy.vector import CoordSys3D, divergence

N = CoordSys3D('N', transformation='cylindrical', vector_names=("r", "phi", "z"), variable_names=("R", "PHI", "Z"))

#  Variables
R = N.R
PHI = N.PHI
Z = N.Z

#  Basis Unit Vectors
rhat = N.r
phihat = N.phi
zhat = N.z

print( divergence( R * rhat )
#  2   correct answer
print( divergence( 1 * rhat )
#  0  WRONG!!  should be 1/R

我已将问题报告为 sympy github 问题页面上的错误。

对于我尝试过的各种多项式,diverence() 在柱坐标中给出了正确的答案,例如:

散度(R**3 * rhat)

4 R^2

因此,它似乎使用了正确的柱坐标发散公式。我查看了divergence() 源代码。圆柱坐标没有特定的代码。相反,它通过使用蹩脚系数对任何曲线坐标系进行一般情况变换。

当参数中有一个变量 R 时,divergence() 可以正常工作,但是当只给出一个常量时它会给出错误的答案。

散度( R * rhat ) # 2 正确

分歧( 7 * rhat ) # 0 错误!应该是 7/R

我的第一个猜测是,divergence() 代码正在尝试使用它期望成为变量一部分的某些属性(即 R._CoordSys),但在传递常量时找不到它。

4

0 回答 0