Графическое решение уравнения с функциями Бесселя в Python - PullRequest
0 голосов
/ 19 декабря 2018

Я хотел бы построить решения:

J1 (x) / (x * J0 (x)) + K1 (y) / (y * K0 (y)) = 0

с использованием Python

Если бы plot_implicit из sympy работал с функциями Бесселя следующим образом:

plot_implicit(Eq(besselj(1,x)/(x*besselj(0,x))+besselk(1,y)/(y*besselk(0,y))))

что-то вроде этого было бы тем, что я хочу.Но это не сработало для меня - вероятно, plot_implicit не может принять besselj и besselk от mpmath (по крайней мере, не таким тривиальным образом).

Как я могу сделать это правильно?

РЕДАКТИРОВАТЬ В случае, если вышеуказанное сбивает с толку.Вызов besselj и besselk не сработал, потому что я использовал mpmath их версию, существует sympy их версия, которую можно использовать.В вышеупомянутой версии я также пропускаю , 0, как было указано по тел.

1 Ответ

0 голосов
/ 19 декабря 2018

На самом деле вы можете использовать Sympy и plot_implicit, чтобы получить то, что вы хотите.Вам просто нужно использовать версии функций Бесселя, поставляемых самой Sympy.Тем не менее, plot_implicit, похоже, борется с этим конкретным уравнением:

import sympy as sym
x,y = sym.symbols('x y')

sym.plot_implicit(sym.Eq(sym.besselj(1,x)/(x*sym.besselj(0,x))+sym.besselk(1,y)/(y*sym.besselk(0,y)), 0), adaptive=False, points=100)

Вывод:

enter image description here

Я также получилпредупреждение:

/Users/tel/git/sympy/sympy/plotting/experimental_lambdify.py:165: UserWarning: The evaluation of the expression is problematic. We are trying a failback method that may still work. Please report this as a bug.
  warnings.warn('The evaluation of the expression is'

Вы можете повысить точность результата, увеличив значение аргумента points в вызове до implicit_plot.Имейте в виду, что если вы сильно увеличите его, вычисление может занять много времени (например, пока не сгорит солнце).

...