Python cos(x)&x2B的泰勒级数;1带张量流
我正在使用Tensorflow将泰勒级数展开到7阶,计算函数的近似值 我编写了以下代码: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
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)得到下一项。冲洗并重复。这样计算不应该溢出,但可能会累积更多的舍入误差。