gpt4 book ai didi

python - Julia 球谐函数与 python 不同

转载 作者:行者123 更新时间:2023-12-05 03:17:40 24 4
gpt4 key购买 nike

我想用 Julia 计算球谐函数。我使用以下代码完成了此操作:

using GSL

function radius(x, y, z)
return sqrt(x^2 + y^2 + z^2)
end

function theta(x, y, z)
return acos(z / radius(x, y, z))
end

function phi(x, y, z)
return atan(y, x)
end

function harmonics(l, m, x, y, z)
return (-1)^(m) * GSL.sf_legendre_sphPlm(l, m, cos(theta(x,y,z)))*ℯ^(im*m*phi(x,y,z))
end

harmonics(1, 1, 11.66, -35, -35)
harmonics(1, 1, -35, -35, -35)

输出如下:

0.07921888327321648 - 0.23779253126608726im
-0.1994711402007164 - 0.19947114020071643im

但是用下面的 python 代码做同样的事情:

import scipy.special as spe
import numpy as np

def radius(x, y, z):
return np.sqrt(x**2 + y**2 + z**2)

def theta(x, y, z):
return np.arccos(z / radius(x, y, z))

def phi(x, y, z):
return np.arctan(y / x)

def harmonics(l, m, x, y, z):
return spe.sph_harm(m, l, phi(x, y, z), theta(x, y, z))

harmonics(1, 1, 11.66, -35, -35)
harmonics(1, 1, -35, -35, -35)

结果如下:

(-0.07921888327321645+0.23779253126608718j)
(-0.19947114020071638-0.19947114020071635j)

所以第一个结果的符号是不同的。但由于只有一个结果有不同的符号,原因不可能在前置因素 (-1)^m 中。我再也看不透了,也无法解释为什么结果不同。

最佳答案

@Oscar Smith 的评论让我开始寻找解决方案。 Julia 对 atan 返回的角度使用不同的约定,前提是传递了两个参数 [ Julia , Numpy ].如果我们在 Julia 中使用 atan(y/x) 而不是 atan(y, x) 我们会得到相同的结果。

关于python - Julia 球谐函数与 python 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74026454/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com