Loading
2014. 8. 3. 03:09 - 성돌

[Mathematica 수식 다루기] 원하는 식을 푸리에 급수로(Fourier Series) 나타내는 코드




오늘 이 포스팅에서는 예전에 내가 사용하려고 만들어 놓은 주기함수의 Fourier series를 구하는 Mathematica 파일을 공유하면서, Mathematica가 수식을 계산하는 방법의 쉬운 예를 보이고자 한다.

 

아래와 같은 주기함수인 톱니파의 Fourier series를 구한다고 하자.
  

위의 함수의 주기를 T라 했을 때, -T에서 0까지 그리고 T에서 0까지 아래와 함수형태를 가진다고 하자.

여기서 A B는 문제에서 주어진 상수값이다. 그러나 여기서는 값을 대입하지 말고 풀어보자. 
Mathematica의 장점이 무엇이겠는가?
바로 이렇게
문자로 바로 연산이 가능한 symbolic연산이 최대 장점이다!
아래와 같이 Mathematica에서 y1 y2를 입력하자 
(함수를 정의하는 방법에 대해서는 다른 포스팅을 참고!).

Sawtooth_wave.nb

위에서 보면, At사이에 스페이스가 있는데, Mathematica는 이런 스페이스를 곱셈으로 인식한다.

그리고 Fourier coefficient을 구하는 공식을 바로 적용하여 아래와 같이 symbolic연산으로 Fourier series를 구할 수 있다.

FourierCoefficient.nb

 anbn을 구하기 위해 a와 b를 n에 대한 함수로 Mathematica에 입력한 점에 주의하자. 위의 방정식은 책과 비교해보면 알겠지만, 
Fourier Series식을 그냥 그대로 적은 것이다. 

이의 연산으로 Fourier coefficient를 구할 수 있는데, Mathematica가 구한 식은 다소 복잡할 것이다.
그 이유를 예를 들어 설명하자면, 우리는 
T가 양수라는 것을 알지만 Mathematica는 모르기 때문이다.
이를 위해 Simplify라는 기능을 이용해서 식을 단순화할 수 있는데, 이는 조금 후에 설명하도록 하자.

이제, 아래와 같이 Fourier Series공식에 의해서 Fourier coefficient들을 아래와 같이 합해주면 원하는 Fourier Series를 구할 수 있다.

FourierSeries.nb

 본 예에서는 n5까지만 더한 경우를 살펴보도록 하겠다. 

이 n을 얼마까지 더할 것인가는 알아서 하면되고, n이 커질수록 Fourier Series의 정확도가 높아진다.
물론 
n을 까지 더해서 완벽한 Fourier Series를 구하는 것도 가능하다. 

위의 연산을 하게되면 매우 복잡한 답이 얻어질텐데, 이는 앞서 말한바와 같이 T가 양수라는 것을 Mathematica는 모르기 때문이다. 
이에 대한 정보를 Simplify라는 기능을 아래와 같이 사용하여 알려줄 수 있다.

Simplify.nb

 이를 통해 답을 깔끔하게 정리하면, 아래와 같 Fourier Series를 Mathematica가 계산해준다.

 위의 연산으로 구해진 Fourier Series를 실제 톱니파와 비교해보도록 하자.

그래프에 그리기 위해 T=2, A=1, B=0.2라는 값을 입력하고 그래프를 그리면
아래와 같이 매우 훌륭하게 Fourier Series가 구해졌음을 확인할 수 있다.

비교를 위해 
n=10인 경우도 첨부하였다.


[n=5인 경우, 빨간색 점선이 Fourier Series이고 검은색선이 톱니파이다.]


n=10인 경우, 빨간색 점선이 Fourier Series이고 검은색선이 톱니파이다.]