Редактировать: в Sympy есть ошибка
Оказывается, в Sympy есть ошибка, из-за которой lambdify((n, l, r, Z), hydrogen.R_nl(n, l, r, Z))
дает неправильный результат.Я отправил отчет об ошибке .По сути, это приводит к конфликту в подписях assoc_laguerre
в Scipy и Sympy.
Пока это не будет исправлено, вам нужно будет lambdify R_nl
следующим образом:
lambdify((n, l, r, Z), hydrogen.R_nl(n, l, r, Z), ('numpy', 'math', 'sympy'))
Это явно указывает список модулей, которые lambdify
может использовать для оценки функции, которую вы передаете (аналогично коду в разделе обходной путь ниже), и говорит, что не следует использовать Scipy.
Проблема / решение
Ваш код работает как есть.Люди Sympy какое-то время активно исправляли lambdify
, поэтому у вас, вероятно, просто старая версия.Вам следует обновить версию Sympy.
Обходной путь
Если вы не можете выполнить обновление, вот обходной путь, который явно скажет lambdify
, где найти определение factorial
:
import matplotlib.pyplot as plt
import numpy as np
from sympy.abc import n, l, r, Z
from sympy.physics import hydrogen
from sympy.utilities.lambdify import lambdify
R_nl = lambdify((n, l, r, Z), hydrogen.R_nl(n, l, r, Z), ('numpy', 'math', 'sympy'))
Z = 1
n, l = 1, 0
r = np.linspace(0, 10, 1000)
plt.plot(r, R_nl(n, l, r, Z))
Вывод: