【问题标题】:sine function in Python as Taylor Series ApproximationPython中的正弦函数作为泰勒级数逼近
【发布时间】: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 作为最高数字,认为它是无穷大 :))
  • 和公式可以在这里看到people.math.sc.edu/girardi/m142/handouts/…
  • 对于n = 80,您已经在计算factorial(161)。也许你应该从n = 1、2、3 等开始,看看会发生什么。
  • 请在关闭前先尝试。您不是在绘制sin,而是在绘制多项式的总和,该多项式 近似 x 值 接近 0 的正弦曲线。对于远离 0 的 x 值,曲线明显偏离正弦曲线。您期望 y 值从 -1 到 1,因此如果绘图范围变为 1e11,您将看不到任何内容。

标签: python numpy trigonometry taylor-series


【解决方案1】:

感谢@mkrieger,函数没有问题,但范围非常愚蠢。现在,它实际上看起来像这样:

谢谢@mkrieger! :))

【讨论】:

  • 我敢打赌,对于更小的 n,它看起来会更好。看起来更像是数值溢出问题,而不是偏离真实正弦曲线的泰勒级数。
  • :D 是的,我同意 :)) 我如何选择您的答案作为“答案”?有这样的选择吗?
  • 那么,你想删除问题还是我应该为问题做点什么?
猜你喜欢
  • 1970-01-01
  • 2022-07-10
  • 2015-11-21
  • 2021-08-12
  • 2021-08-13
  • 2017-06-06
  • 2017-12-02
  • 2021-02-19
  • 1970-01-01
相关资源
最近更新 更多