2014-01-18 2 views
5

Sympy는 trig 함수 Fourier transform을 계산하는 데 실수를 저질렀다고 생각합니다. 예를 들어 :Sympy에서 삼각 함수를 푸리에 변환하면 예상치 못한 결과가 발생합니다.

from sympy import fourier_transform, sin 
from sympy.abc import x, k 
print fourier_transform(sin(x), x, k) 

예상 답변을 via Mathematica

enter image description here

하지만 Sympy 0 때때로 함수가 fourier_transform(Heaviside(t)*cos(t),t,omega) 때문에 아주 잘 작동하고 올바른 답을 반환 fourier_transform(Heaviside(t)*sin(t),t,omega) 반환합니다. 나는 Sympy가 푸리에 변환을 계산하기 위해 라플라스 변환을 사용하고 있다고 생각한다.

+0

음, '죄'의 푸리에 변환은 델타 함수의 합입니다. Sympy가 델타 기능을 표현하는 데 어려움이있을 수 있습니다. Mathematica에서는'sympath.fourier_transform ('Heaviside (t)', 't', 'omega')'는'-I/(2 * pi * omega)'를 산출하는 반면,'FourierTransform [HeavisideTheta [ DiracDelta [w]'(그래서 sympy는 델타 함수를 여기에서도 삭제하고있다). – senshin

+0

sympy에는 델타 함수'DiracDelta'가 있기 때문에 이렇게하는 것은 매우 이상합니다. – Kattern

답변

2

SymPy는 말 그대로 정수를 계산하여 푸리에 변환을 계산합니다. 이 버그를 버그라고 생각하기 때문에 an issue을 자유롭게 열어보십시오.

+0

이미 완료되었습니다. – Kattern

+0

@kattern이 상태에 따라 업데이트 할 수 있도록 문제의 링크를 제공해야합니다. – Hooked

+0

@Hooked 좋은 아이디어, 문제에 대한 링크는 입니다. – Kattern

2

변환 루틴에 noconds=False을 추가하여 변환 적분이 수렴하는 조건을 찾을 수 있습니다. asmeurer가 말하듯이, 우리는 문자 그대로 정의 적분을 계산하기 때문에 델타 함수가 나오지 않을 것입니다. cos의 푸리에 변환의 경우, 조건은 "결코"말하지 않는 복잡한 방식이며, 불행히도 sympy는 인식하지 못합니다. (즉, 알고리즘은 "적분은 0 일 때와 같이 무언가를 말합니다."라고 말합니다.

단계 함수의 푸리에 변환의 경우 z가 음수 인수를 갖는 경우이 조건이 작동한다는 조건이 나타납니다 각도) 너무 크지는 않습니다. 이것은 실제로 변환 적분이 수렴 할 때 발생합니다 (b/c 양의 실수에 대해 지수 지수를 떨어 뜨릴 필요가 있음). 이 경우에 계산이 올바른지 생각할 시간이 없습니다.

+0

나는 또한 옵션을 볼 수 있지만, 나는'fourier_transform'을 컨디셔닝 된 0 대신에'DiracDelta' 함수를 반환하고 싶습니다. – Kattern

관련 문제