Sympy功能具有未评估的参数



作为sympy newbie,我正在考虑以下sympy表达式(如果0<x<1,则应等于1(:

f = Sum((2/(lambda_m*besselj(1, lambda_m)))*besselj(0,x*lambda_m), (m, 1, oo))

其中 lambda_mm- besselj(0,x)的零。

现在,mpmath具有一个函数besseljzero(0,m,0),该函数准确地计算了此。

不幸的是,如果我替换(手动,我的意思是...(lambda_mbesseljzero(0,m,0)在上层公式中,Sympy给了我一个错误,因为m不是整数...

我想象通过创建应该以下功能来解决此问题:

  • 返回j0(m)如果m未评估整数
  • 返回besseljzero(0,m,0)如果它确实

,但我不知道如何进行。

这是个好主意,有人可以帮助我吗?

问题是mpmath用于数字评估,通常为您提供数值近似值,而sympy象征性地运行:任意精度与无限精度不同。您无法计算MPMATH的无限输出总和,因为您实际上必须处理无限的许多总结。

要象征性地计算您的总和,Sympy必须具有所有参数的表示,并意识到您描述的身份(如果0<x<1,则f(x)==1(或能够得出它。似乎并非如此。

因此,您所能做的就是使用MPMATH的实现:

来近似结果。
from mpmath import besseljzero, besselj
from itertools import count
threshold = 1e-5
min_m = 100
def f(x):
    Sum = 0
    for m in count(1):
        lambda_m = besseljzero(0,m,0)
        summand = 2/(lambda_m*besselj(1, lambda_m))*besselj(0,x*lambda_m)
        Sum += summand
        if m>min_m and abs(summand)<threshold:
            break
    return Sum

相关内容

  • 没有找到相关文章

最新更新