Sympy를 사용하여 단일 진동 미분 방정식의 해를 Asin (t) + Bcos (t)의 형태로 변형합시다.

아무래도, 안녕하세요 숲의 생활자의 가마 선인입니다.
단일 진동의 미분 방정식
$$\frac{d^{2}}{d t^{2}} x{\left (t\right )} = - ω^{2} x{\left (t\right )}$$

sympy로 풀면 다음과 같습니다.
from sympy import *
init_printing(use_latex=True)

x = Symbol('x') #振動の位置
w = Symbol('ω') #角速度
t = Symbol('t') #時間

#単振動の微分方程式を定義する
eq = Eq(x(t).diff(t,2), -w**2*x(t))

#微分方程式を解いてみよう
ans =dsolve(eq,x(t))

#結果を表示してみる
display(ans)

{x{\left (t \right )} = C_{1} e^{- i t ω} + C_{2} e^{i t ω}}

이것이라고 익숙한 사람에게는 좋습니다.
독수리 같은 일반인에게는 조금 눈에 아프다.
sin(t)과 cos(t)가 섞인 식 쪽이 친근감이 있네요.

거기서
이것을 바꾸려고 생각했던 것이었습니다.
에서 오일러 공식
e^{i x}=cos{x}+isin(x)

를 사용하여 대체하기 위해 .replace 메소드로 여러 가지를 시도했습니다.
eix=lambda t: (cos(t) + i*sin(t))
ans.replace(exp(i*x),eix)

이런 글을 쓸 수는 없어.
절망적인 기분으로 레퍼런스를 읽고 있으면 좋은 것을 발견했습니다.
.rewarite 메서드입니다.
이것을 사용하면 exp->sin
또 그 반대도 여러가지 할 것 같아요.
ans.rewrite(sin)

라고 하면, 다시 이상해.
이런 식으로 변환되는군요.
조금 감동해 버렸다.
x{\left (t \right )} = C_{1} \left(- i \sin{\left (t ω \right )} + \cos{\left (t ω \right )}\right) + C_{2} \left(i \sin{\left (t ω \right )} + \cos{\left (t ω \right )}\right)

그렇다면 우선 이것이 괜찮습니다.
모처럼이므로 조금 더 간단하게 만들고 싶습니다.
그래서 적분 상수 C1, C2를 복소 공액으로 묶어 주면 좋겠지요.
C1=(a+ib)/2
C2=(a-ib)/2
이것을 식에 대입하면 다음과 같은 결과가 됩니다.
a,b,C1,C2 = symbols(['a','b','C1','C2'])
ans3 =ans2.subs([(C1,(a+I*b)/2),(C2,(a-I*b)/2)])
ans3
x{\left (t \right )} = \left(\frac{a}{2} - \frac{i b}{2}\right) \left(i \sin{\left (t ω \right )} + \cos{\left (t ω \right )}\right) + \left(\frac{a}{2} + \frac{i b}{2}\right) \left(- i \sin{\left (t ω \right )} + \cos{\left (t ω \right )}\right)

이것을 간단하게 간단하게하면
ans4=simplify(ans3)
ans4
x{\left (t \right )} = a \cos{\left (t ω \right )} + b \sin{\left (t ω \right )}

되는 것입니다.
이른바 보통 진동의 식이 되었네요.
축하합니다.
아니, 여기까지 오는데 상당히 시간이 걸렸습니다.

덤이지만
결과를 그래프로 만들어 보겠습니다.
ω=2,a=1.b=1로 한 그래프입니다.
plot(ans4.rhs.subs([(w,2),(a,1),(b,1)]),(t,0,10))



조금 달리기로 설명했습니다.
보충 설명이 필요한 부분도 있을 것 같습니다.
알아차리면 가필, 수정하네요.

이상.

좋은 웹페이지 즐겨찾기