【发布时间】:2019-07-11 06:29:05
【问题描述】:
我正在尝试将正弦函数实现为泰勒级数逼近。我无法使用泰勒级数近似形式得到合理的结果。我不明白为什么。
我的 Python 代码在这里:
import numpy as np
import matplotlib.pyplot as plt
import functools
f_reduce = functools.reduce
pow = np.power
from math import factorial
def f(t):
return 2*t + np.pi / 2
# sine function in Taylor series form
def t_sin(t):
def inner(n):
return pow(-1, n) * pow(t, 2*n + 1) / factorial(2*n + 1)
return f_reduce( lambda x,y: x + y, [ inner(step) for step in range(80) ] )
time = np.arange(-10*np.pi, 10 * np.pi, 0.1)
# x = np.sin(f(time))
x = t_sin(f(time))
plt.plot(time, x)
plt.show()
我的代码有什么问题?我错过了什么吗?
【问题讨论】:
-
如果将 y 轴限制在合理值范围内,绘图会是什么样子?
-
@mkrieger1 根据公式,它应该一直到无穷大。但是阶乘结果在一个点之后变得非常大(stackoverflow.com/q/16174399/6013366)。所以我选择了 80 作为最高数字,认为它是无穷大 :))
-
对于
n= 80,您已经在计算factorial(161)。也许你应该从n= 1、2、3 等开始,看看会发生什么。 -
请在关闭前先尝试。您不是在绘制
sin,而是在绘制多项式的总和,该多项式 近似 x 值 接近 0 的正弦曲线。对于远离 0 的 x 值,曲线明显偏离正弦曲线。您期望 y 值从 -1 到 1,因此如果绘图范围变为 1e11,您将看不到任何内容。
标签: python numpy trigonometry taylor-series