代码之家  ›  专栏  ›  技术社区  ›  ZHANG Juenjie

如何在tensorflow中实现BesselJ函数

  •  0
  • ZHANG Juenjie  · 技术社区  · 6 年前

    tensorflow内部函数支持Bessel函数BesselI tensorflow besseli0 .

    但是,它没有BesselJ函数(尤其是BesselJ[2,x])。

    If 在tensorflow中,这是无效的。

    tensorflow是否有任何可推荐的替代方法或其他方法?

    1 回复  |  直到 6 年前
        1
  •  2
  •   ZHANG Juenjie    6 年前

    经过多次搜索,我找到了一个令人满意的解决方案:

    def BesselJ0(x):
        PI=3.1415926
        temp = tf.cast(tf.less(x,tf.ones_like(x)*4.7),dtype=tf.float32)
        temp1 = tf.abs(temp-1)
        left_part = tf.multiply(1-x**2/4+x**4/64-x**6/2304+x**8/147456-x**10/14745600,temp)
        right_part = tf.multiply(tf.sqrt(2/PI/x)*tf.cos(x-PI/4),temp1)
        return left_part+right_part
    def BesselJ1(x):
        PI=3.1415926
        temp = tf.cast(tf.less(x,tf.ones_like(x)*3.8),dtype=tf.float32)
        temp1 = tf.abs(temp-1)
        left_part = tf.multiply(x/2-x**3/16+x**5/384-x**7/18432+x**9/1474560-x**11/176947200+x**13/29727129600,temp)
        right_part = tf.multiply(tf.sqrt(2/PI/x)*tf.cos(x-PI/2-PI/4),temp1)
        return left_part+right_part
    

    不过,这不是很快。