Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python cos(x)&x2B的泰勒级数;1带张量流_Python_Tensorflow - Fatal编程技术网

Python cos(x)&x2B的泰勒级数;1带张量流

Python cos(x)&x2B的泰勒级数;1带张量流,python,tensorflow,Python,Tensorflow,我正在使用Tensorflow将泰勒级数展开到7阶,计算函数的近似值 我编写了以下代码: x=tf.constant(3.14159,dtype=tf.float32) result = tf.constant(2,dtype=tf.float32) if i % 2 == 1: num=tf.math.pow(x, i*2) den=math.factorial(i*2) result=tf.math.subtract(result

我正在使用Tensorflow将泰勒级数展开到7阶,计算函数的近似值

我编写了以下代码:

x=tf.constant(3.14159,dtype=tf.float32)
result = tf.constant(2,dtype=tf.float32)

    if i % 2 == 1:
        num=tf.math.pow(x, i*2)

        den=math.factorial(i*2)

        result=tf.math.subtract(result,tf.math.divide(num,den))

    else:
        num=tf.math.pow(x, i*2)
        

        den=math.factorial(i*2)

        result=tf.math.add(result,tf.math.divide(num,den))
函数的泰勒级数为

但是,当
x=3.14
时,我得到了相互矛盾的结果:

MY CODE       ---> -0.21135163
Actual answer ---> 3.52077e-12

有人能帮我指出哪里出了问题吗?

这个泰勒级数发散得很快。要获得正确的输入结果,需要使用更高的顺序

以下是一个例子:

2 - x**2/2! + x**4/4! - x**6/6!                       ---> -0.2105183783
2 - x**2/2! + x**4/4! - x**6/6! + x**8/8!             --->  0.0238595229
2 - x**2/2! + x**4/4! - x**6/6! + ... - x**10/10!     ---> -0.0018168365
2 - x**2/2! + x**4/4! - x**6/6! + ... + x**12/12!     --->  0.0001010319
2 - x**2/2! + x**4/4! - x**6/6! + ... - x**14/14!     ---> -2.865991e-06
2 - x**2/2! + x**4/4! - x**6/6! + ... + x**16/16!     --->  1.402307e-06
这种方法的另一个问题是,它不是很精确,即使是高阶也是如此,因为它的条件数很高,可能会遇到浮点累加问题。因此,简而言之:不要使用这种方法


您可以在上找到有关它的详细信息。

我还没有检查您的代码,但这可能是一个数学问题。泰勒级数是围绕一个点(这里是原点)展开的。对于给定数量的项,它在该点附近最为准确,而越远离该点,准确度越低。当距离足够远时,它甚至可能无法收敛(请参见:收敛半径)。原则上,通过使用更多的展开项可以得到更精确的结果(试试看),但在有限精度浮点算术计算中,可能会遇到舍入误差的累积和灾难性的相消。是的,先生,您完全正确!代码是正确的,但当订单超过77时,此代码将返回NaN。我的意思是,在这一点上,我只是好奇为什么它会返回一个值,你可能想在展开式中打印每个项的分子和分母。我怀疑它们都会在某个点溢出到无穷大(
INF
),并且
INF
/
INF
=
NaN
,因为除法的结果未定义。是的,您是对的,可以使用tf.custom\u梯度绕过此操作吗?对不起。我对Tensorflow一无所知。不要单独计算分子和分母,取最后一个tern乘以x**2,然后除以下一对整数。因此,当当前项为x**2/2!,将其乘以x**2,再除以(5*6)得到下一项。冲洗并重复。这样计算不应该溢出,但可能会累积更多的舍入误差。