1 USING: kernel io accessors arrays math.runge-kutta sequences math math.matrices
2 ui.gadgets ui.gadgets.charts ui.gadgets.panes ui.gadgets.charts.lines ui.theme ;
3 IN: math.runge-kutta.examples
5 : lorenz-dx/dt ( tx..n -- dx )
9 : lorenz-dy/dt ( tx..n -- dy )
11 28 swap - swapd * swap - ;
13 : lorenz-dz/dt ( tx..n -- dz )
17 : <lorenz> ( -- dx..n/dt delta tx..n t-limit )
18 { [ lorenz-dx/dt ] [ lorenz-dy/dt ] [ lorenz-dz/dt ] } 0.01 { 0 0 1 21/20 } 150 ;
22 chart new { { -20 20 } { -20 20 } } >>axes
23 line new link-color >>color
24 <lorenz> <runge-kutta-4> { 0 3 } cols-except >>data
29 :: rf-dx/dt ( tx..n gamma -- dx )
30 tx..n rest first3 :> ( x y z )
31 y z 1 - x sq + * gamma x * + ;
33 :: rf-dy/dt ( tx..n gamma -- dy )
34 tx..n rest first3 :> ( x y z )
35 x 3 z * 1 + x sq - * gamma y * + ;
37 :: rf-dz/dt ( tx..n alpha -- dz )
38 tx..n rest first3 :> ( x y z )
39 -2 z * alpha x y * + * ;
41 :: <rabinovich-fabrikant> ( gamma alpha -- dx..n/dt delta tx..n t-limit )
42 gamma '[ _ rf-dx/dt ] gamma '[ _ rf-dy/dt ] alpha '[ _ rf-dz/dt ]
44 0.01 { 0 -1 0 0.5 } 150 ;
47 : rabinovich-fabrikant. ( -- )
48 chart new { { -2 2 } { -2 2 } } >>axes
49 line new link-color >>color
50 0.1 0.14 <rabinovich-fabrikant> <runge-kutta-4> { 0 3 } cols-except >>data