[gloss로 실험] 판델폴 진동자
\frac{d^2x}{dt^2} - \mu (1 - x^2)\frac{dx}{dt} + x = 0
이것을 Haskell로 구현하면 다음과 같습니다.
type Point = (Double, Double)
vanderpol :: Float -> Point -> Point
vanderpol dt (x, x') = let mu = 2.5
x'' = mu * (1 - x^2) * x' - x
in (x + dt * x', x' + dt * x'')
Point
는 (位置, 速度)
라는 좌표를 나타내는 튜플입니다. 미분 방정식에서 2층 미분 값을 계산하고 오일러 방법에 의해 다음 단계의 좌표를 계산합니다.이 미분 방정식의 시간 발전을 실제로 gloss 2 로 그려서 바라봅시다.
main :: IO ()
main = simulate inWindow white 24 initModel draw (\_ -> step)
where
inWindow = InWindow "Haskell Day 2018" (640, 480) (100, 100)
initModel = [(1.0, 0.0)] -- 初期状態
draw = scale 50 50 . line -- そのままだと小さいので50倍に拡大する
step dt ps@(p:_) = vanderpol dt p : ps
(1.0, 0.0)
에서 시작하여 시간 발전을 line
로 그립니다. step
는 vanderpol
에 의해 계산한 다음 단계의 상태를 지금까지의 계산 이력의 리스트의 선두에 덧붙이고 있습니다. 이것을 실행하면 다음과 같은 시뮬레이션이 됩니다.여러분도 꼭 스스로 구현해 보고 초기 상태나 $\mu$의 값을 바꾸거나 해 놀아 보세요.
[참고] Wikipedia: 판델폴 진동자
x 축에 위치, y 축에 속도를 취한 공간 ↩
gloss로 시작하는 그래픽 그리기 :: Haskell 입문 다음 읽기 기사 - Qiita ↩
Reference
이 문제에 관하여([gloss로 실험] 판델폴 진동자), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/lotz/items/7a1e04eb846214b775de텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)