[비망록] Sympy.rewrite()로 지수함수 ⇆삼각함수의 표기 재기록

타이틀에도 있는 대로 개인적인 비망록으로서의 기사입니다.
명백한 오류 등이 있으면 지적해 주시면 매우 도움이됩니다.

Sympy 정보



SymPy 1.5 documentation

Sympy는 Python에서 기호 계산을 할 수 있는 라이브러리로, 종이 노트와 펜을 사용하여 식을 변형하여 방정식의 해를 구하는 흐름을 프로그램상에서 할 수 있습니다.
학술서나 기술서 등에서 해설되는 이론의 도출과정을 추후 학습할 때나 편의상 필요한 수식을 준비할 필요가 있을 때 등에 편리한 것이 아닐까 생각해 주목하고 있습니다.

Sympy.rewrite()



sympy.core.basic.Basic.rewrite
이 메소드는, 지정한 함수를 다른 형태의 함수에 다시 표현할 때에 사용합니다.
파동이나 복소함수 등의 계산 과정에서 지수함수⇆삼각함수의 식변형을 잘 한다고 생각합니다만, 식간략화의 sympy.simplify() 등과 조합하여 사용하면 편리할 것 같습니다.

예제



다음 식의 복소함수 w에 대해 실부와 허부로 나누는 장면을 생각합니다. (U, α는 상수)
$$
w = U e^{-i\alpha }\tag{1}
$$
식 (1)에 대해,
$$u = Re[w], v= -Im[w] $$
그리고 식 (1)을 다음 식과 같이 표현하기로 합니다.
$$
w = u - iv\tag{2}
$$
이 식 (2)의 u, v를 구합니다.

식 (1)에 대해 다음 식의 오일러 공식 (Euler 's formula)을 사용하여 지수 함수를 실수 항과 허수 항의 합으로 다시 씁니다.
$$
e^{i\theta} =\cos{\theta} + i\sin{\theta}\tag{3}
$$
식 (3)을 식 (1)에 적용하여,
$$
w = U (\cos{\alpha} - i\sin{\alpha})\tag{4}
$$
그러므로
$$
u = Re\left[w\right]=U\cos{\alpha},$$$$v = -Im\left[w\right]=U\sin{\alpha}
$$

Sympy로 작성


# ライブラリとモジュールのインポート
import sympy as sp
from sympy import * 

# 定数U, α用の記号を定義
U, alpha = symbols('U alpha')

# 関数wを定義
w = Function("w")
w = U*exp(-I*alpha)

표시


print(w)  # wを文字で表示
w         # wを数式の書体で表示

결과

여기서 삼각 함수(sin, cos)를 사용하여 다시 표현하기 위해 rewrite()를 사용합니다.
w.rewrite(exp, sin, cos)

결과

또한 expand()를 사용하면 표현식을 확장할 수 있습니다.
expand(w.rewrite(exp, sin, cos))

결과


또한 re()를 사용하면 식의 실부와 허부를 명시해 줍니다.
re(expand(w.rewrite(exp, sin, cos)))

결과


요약



손수 계산에 의한 계산 실수가 많기 때문에 그것을 파이썬에 대행시킬 수 없을까 생각한 것이 계기로 Sympy를 만났습니다. (글쓰기 시점에서 아직 만난 지 3일 정도입니다만...)
계산 과정의 각부에 있어서의 검산이나, 예제의 자취등에도 사용할 수 있을 것 같기 때문에, 학생 시절에 만나 두면 여러가지 깨달았겠지라고 스며들 생각했습니다.
학습 노트도 부피가 큰 종이의 노트가 아니고 Jupyter 사용해 .ipynb에 써 Github로 관리하면 학습 과정도 기록할 수 있고, 이렇게 기사의 초고에도 사용되게 하기 때문에 편리하네요.
필기 노트 어플리의 Notability등도(어느 쪽인가 하면 강연회라든지의 그림들이 메모 취급) 있습니다만, 결국 계산 미스로 막히는 과제가 있었으므로, Sympy와 같은 라이브러리의 존재는 살아납니다.
앞으로 더 취급에 익숙해 가려고 생각합니다.

좋은 웹페이지 즐겨찾기