11using ModelingToolkit
2+ using IfElse
3+ using Symbolics
4+ using Symbolics: unwrap
25using DiffEqBase, StaticArrays, LinearAlgebra
36
47@variables t y (t)[1 : 10 ]
@@ -444,13 +447,13 @@ nc5sys = let
444447 0.0000517759138449
445448 0.00000277777777778 ]
446449
447- r = [sum (i-> y[i, j]^ 2 , 1 : 3 ) for j in 1 : 5 ]
450+ r = [sqrt ( sum (i-> y[i, j]^ 2 , 1 : 3 ) ) for j in 1 : 5 ]
448451 d = [sqrt (sum (i-> (y[i, k] - y[i, j])^ 2 , 1 : 3 )) for k in 1 : 5 , j in 1 : 5 ]
449452 ssum (i, j) = sum (1 : 5 ) do k
450453 k == j && return 0
451454 ms[k] * (y[i, k] - y[i, j]) / d[j, k]^ 3
452455 end
453- nc5eqs = [D (D (y[i, j])) . ~ k_2 * (- (m_0 + ms[j]) * y[i, j])/ r[j]^ 3 + ssum (i, j) for i in 1 : 3 , j in 1 : 5 ]
456+ nc5eqs = [D (D (y[i, j])) ~ k_2 * (- (m_0 + ms[j]) * y[i, j])/ r[j]^ 3 + ssum (i, j) for i in 1 : 3 , j in 1 : 5 ]
454457 structural_simplify (ODESystem (nc5eqs, t, name = :nc5 ))
455458end
456459
@@ -466,4 +469,118 @@ ys′ = [-0.557160570446, 0.505696783289, 0.230578543901,
466469 - 0.176860753121 , - 0.216393453025 , - 0.0148647893090 ,]
467470y0 = y .=> reshape (ys, 3 , 5 )
468471y0′ = D .(y) .=> reshape (ys′, 3 , 5 )
472+ # The orginal paper has t_f = 20, but 1000 looks way better
469473nc5prob = ODEProblem {false} (nc5sys, [y0; y0′], (0 , 20.0 ), cse = true )
474+
475+ @variables y (t)[1 : 4 ]
476+ y = collect (y)
477+ @parameters ε
478+ nd1sys = let
479+ r = sqrt (y[1 ]^ 2 + y[2 ]^ 2 )^ 3
480+ nd1eqs = [D (y[1 ]) ~ y[3 ],
481+ D (y[2 ]) ~ y[4 ],
482+ D (y[3 ]) ~ (- y[1 ]) / r,
483+ D (y[4 ]) ~ (- y[2 ]) / r,
484+ ]
485+ ODESystem (nd1eqs, t, name = :nd1 )
486+ end
487+
488+ function make_ds (nd1sys, e)
489+ y = collect (@nonamespace nd1sys. y)
490+ y0 = [y[1 ] => 1 - e; y[2 : 3 ] .=> 0.0 ; y[4 ] => sqrt ((1 + e) / (1 - e))]
491+ ODEProblem {false} (nd1sys, y0, (0 , 20.0 ), [ε => e], cse = true )
492+ end
493+ nd1prob = make_ds (nd1sys, 0.1 )
494+ nd2prob = make_ds (nd1sys, 0.3 )
495+ nd3prob = make_ds (nd1sys, 0.5 )
496+ nd4prob = make_ds (nd1sys, 0.7 )
497+ nd5prob = make_ds (nd1sys, 0.9 )
498+
499+ ne1sys = let
500+ ne1eqs = [D (y[1 ]) ~ y[2 ],
501+ D (y[2 ]) ~ - (y[2 ] / (t + 1 ) + (1 - 0.25 / (t + 1 )^ 2 ) * y[1 ]),
502+ ]
503+ ODESystem (ne1eqs, t, name = :ne1 )
504+ end
505+
506+ y0 = [y[1 ] => 0.6713967071418030 ; y[2 ] => 0.09540051444747446 ]
507+ ne1prob = ODEProblem {false} (ne1sys, y0, (0 , 20.0 ), cse = true )
508+
509+ ne2sys = let
510+ ne2eqs = [D (y[1 ]) ~ y[2 ],
511+ D (y[2 ]) ~ (1 - y[1 ]^ 2 ) * y[2 ] - y[1 ],
512+ ]
513+ ODESystem (ne2eqs, t, name = :ne2 )
514+ end
515+
516+ y0 = [y[1 ] => 2.0 ; y[2 ] => 0.0 ]
517+ ne2prob = ODEProblem {false} (ne2sys, y0, (0 , 20.0 ), cse = true )
518+
519+ ne3sys = let
520+ ne3eqs = [D (y[1 ]) ~ y[2 ],
521+ D (y[2 ]) ~ y[1 ]^ 3 / 6 - y[1 ] + 2 * sin (2.78535 t),
522+ ]
523+ ODESystem (ne3eqs, t, name = :ne3 )
524+ end
525+
526+ ne3prob = ODEProblem {false} (ne3sys, y[1 : 2 ] .=> 0 , (0 , 20.0 ), cse = true )
527+
528+ ne4sys = let
529+ ne4eqs = [D (y[1 ]) ~ y[2 ],
530+ D (y[2 ]) ~ 0.032 - 0.4 * y[2 ]^ 2 ,
531+ ]
532+ ODESystem (ne4eqs, t, name = :ne4 )
533+ end
534+
535+ ne4prob = ODEProblem {false} (ne4sys, [y[1 ] => 30.0 , y[2 ] => 0.0 ], (0 , 20.0 ), cse = true )
536+
537+ ne5sys = let
538+ ne5eqs = [D (y[1 ]) ~ y[2 ],
539+ D (y[2 ]) ~ sqrt (1 - y[2 ]^ 2 ) / (25 - t),]
540+ ODESystem (ne5eqs, t, name = :ne5 )
541+ end
542+
543+ ne5prob = ODEProblem {false} (ne5sys, y[1 : 2 ] .=> 0.0 , (0 , 20.0 ), cse = true )
544+
545+ nf1sys = let
546+ a = 0.1
547+ cond = term (iseven, term (floor, Int, unwrap (t), type = Int), type = Bool)
548+ b = 2 a * y[2 ] - (pi ^ 2 + a^ 2 ) * y[1 ]
549+ nf1eqs = [D (y[1 ]) ~ y[2 ],
550+ D (y[2 ]) ~ b + IfElse. ifelse (cond, 1 , - 1 )]
551+ ODESystem (nf1eqs, t, name = :nf1 )
552+ end
553+
554+ nf1prob = ODEProblem {false} (nf1sys, y[1 : 2 ] .=> 0.0 , (0 , 20.0 ))
555+
556+ nf2sys = let
557+ cond = term (iseven, term (floor, Int, unwrap (t), type = Int), type = Bool)
558+ nf2eqs = [D (y[1 ]) ~ 55 - IfElse. ifelse (cond, 2 y[1 ]/ 2 , y[1 ]/ 2 )]
559+ ODESystem (nf2eqs, t, name = :nf2 )
560+ end
561+
562+ nf2prob = ODEProblem {false} (nf2sys, [y[1 ] .=> 110.0 ], (0 , 20.0 ), cse = true )
563+
564+ nf3sys = let
565+ nf3eqs = [D (y[1 ]) ~ y[2 ],
566+ D (y[2 ]) ~ 0.01 * y[2 ] * (1 - y[1 ]^ 2 ) - y[1 ] - abs (sin (pi * t))]
567+ ODESystem (nf3eqs, t, name = :nf3 )
568+ end
569+
570+ nf3prob = ODEProblem {false} (nf3sys, y[1 : 2 ] .=> 0.0 , (0 , 20.0 ), cse = true )
571+
572+ nf4sys = let
573+ nf4eqs = [D (y[1 ]) ~ IfElse. ifelse (t <= 10 , - 2 / 21 - (120 * (t - 5 )) / (1 + 4 * (t - 5 )^ 2 ), - 2 y[1 ])]
574+ ODESystem (nf4eqs, t, name = :nf4 )
575+ end
576+
577+ nf4prob = ODEProblem {false} (nf4sys, [y[1 ] => 1.0 ], (0 , 20.0 ), cse = true )
578+
579+ nf5sys = let
580+ c = sum (i-> cbrt (i)^ 4 , 1 : 19 )
581+ p = sum (i-> cbrt (t - i)^ 4 , 1 : 19 )
582+ nf5eqs = [D (y[1 ]) ~ inv (c) * Symbolics. derivative (p, t) * y[1 ]]
583+ ODESystem (nf5eqs, t, name = :nf5 )
584+ end
585+
586+ nf5prob = ODEProblem {false} (nf5sys, [y[1 ] => 1.0 ], (0 , 20.0 ), cse = true )
0 commit comments