泰勒近似期间的类型错误

Typeerror during Taylor-approximation

对于 Uni,我正在做这个作业,我必须对正弦函数和它的第 n 个泰勒近似值之间的差异进行近似。当 运行ning 绘制这两个函数的代码时,我 运行 出现以下错误:

TypeError: ufunc 'add' output (typecode 'O') could not be coerced to provided output parameter (typecode 'd') according to the casting rule ''same_kind''

奇怪的是(在我看来)该程序在 n <= 20 上工作正常,但是当我选择高于此的任何内容时,它会抛出此错误。

有谁知道我的代码哪里出了问题?提前致谢。

import matplotlib.pyplot as plt
import numpy as np
import math

def constant(n, x):
    return np.full(x.shape, (2*math.pi)**(n+1)/(math.factorial(n+1)))

def taylor_n(n,x):
    val = 0
    for i in range(1, n+1):
        if i%2 == 1:
            val += (-1)**((i-1)/2)* x**i/math.factorial(i)
    return val

N = [1, 5, 10, 20, 50]
x = np.linspace(0,2*math.pi,100)


for n in N:
    plt.plot(x, abs(np.sin(x) - taylor_n(n, x)))
    plt.plot(x, constant(n, x))

看起来像浮动下溢。如果转换为十进制则有效:

import decimal

...

def taylor_n(n,x):
    val = 0
    for i in range(1, n+1):
        if i%2 == 1:
            val += np.array((-1) ** ((i - 1) / 2) * x ** i / math.factorial(i), dtype=np.dtype(decimal.Decimal))
    return val

内部 taylor_n 函数表达式 ((-1) ** ((i - 1) / 2) * x ** i / math.factorial(i)) 具有类型 float64,但是当 i 变得更大时,表达式的类型变为 complex128 并且这些类型不能'求和。

问题仅出现在 N=50(实际上是 N>20)时,另一个值计算正确。 N=50 情节是: