用Python中的Bessel函数以图形方式解决方程式

时间:2018-12-19 01:44:18

标签: python plot sympy

我想画出以下解决方案:

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

使用Python

如果plot_implicit中的sympy通过这种方式与Bessel函数一起使用:

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

这就是我想要的东西。但这对我不起作用-可能plot_implicit无法接受besselj的{​​{1}}和besselk(至少不是这样简单)。

我该如何正确做?

编辑如果以上情况令人困惑。调用mpmathbesselj无效,因为我使用的是besselk版本,可以使用它们的mpmath版本。 在上述版本中,我也缺少tel指出的sympy

1 个答案:

答案 0 :(得分:1)

实际上,您可以使用Sympy和plot_implicit来获取所需的内容。您只需要使用Sympy本身提供的Bessel函数的版本。但是,plot_implicit似乎在使用这种特殊的eq时遇到困难:

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 arg的值来提高结果的准确性。请注意,如果将其增加很多,可能要花费很长时间(例如直到太阳烧掉)。