泰勒近似期间的类型错误
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
情节是:
对于 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
情节是: