sympy与余弦不能正确积分?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sympy与余弦不能正确积分?相关的知识,希望对你有一定的参考价值。
我试图用 sympy 进行积分,但用 numpy 进行了双重检查。这个积分的正确答案是 n=1 时为零,numpy 版本产生了这个答案。谁能告诉我sympy版本有什么问题?
import numpy as np
import sympy as sp
#*******************NUMPY ATTEMPT********************************************
T = 2*np.pi
n = 1 #integer
F = lambda t: t/(2*np.pi)
wT = 2*np.pi/T #frequency
def F_An(t):
return F(t)*np.cos(n*wT*t)
#F = lambda t: (t/(2*np.pi))*np.cos(n*wT*t)
An = quad(F_An,0,T)[0]
An = (2/T)*An
print('An numpy:', round(An,3))
#*******************SYMPY ATTEMPT********************************************
T = 2*sp.pi
n = sp.Symbol('n',integer=True,positive=True)
t = sp.symbols('t')
F = t/(2*sp.pi)
wT = 2*sp.pi/T #frequency
F_An=F*sp.cos(n*wT*t)
An = sp.integrate(F_An,t)
An = (2/T)*An
An=An.subs(t,T)
An=An.subs(n,1)
print('An sympy:', An)
有输出。
An numpy: 0.0
An sympy: 1/(2*pi**2)
答案
你在调用积分时没有给出极限,也没有使用两个极限。在quad中,你从0到 2*pi
In [17]: F_An.integrate(t)
Out[17]:
t⋅sin(n⋅t) cos(n⋅t)
────────── + ────────
n 2
n
─────────────────────
2⋅π
In [18]: F_An.integrate(t).subs(t, 2*pi)
Out[18]:
1
──────
2
2⋅π⋅n
In [19]: F_An.integrate(t).subs(t, 2*pi) - F_An.integrate(t).subs(t, 0)
Out[19]: 0
In [20]: F_An.integrate((t, 0, 2*pi))
Out[20]: 0
以上是关于sympy与余弦不能正确积分?的主要内容,如果未能解决你的问题,请参考以下文章