Skip to content

Commit db52c70

Browse files
YingboMaChrisRackauckas
authored andcommitted
Add the rest
1 parent 126dc79 commit db52c70

File tree

1 file changed

+119
-2
lines changed

1 file changed

+119
-2
lines changed

src/ode/enright_pryce.jl

Lines changed: 119 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
using ModelingToolkit
2+
using IfElse
3+
using Symbolics
4+
using Symbolics: unwrap
25
using 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))
455458
end
456459

@@ -466,4 +469,118 @@ ys′ = [-0.557160570446, 0.505696783289, 0.230578543901,
466469
-0.176860753121, -0.216393453025, -0.0148647893090,]
467470
y0 = y .=> reshape(ys, 3, 5)
468471
y0′ = D.(y) .=> reshape(ys′, 3, 5)
472+
# The orginal paper has t_f = 20, but 1000 looks way better
469473
nc5prob = 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.78535t),
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 = 2a * 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, 2y[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), -2y[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

Comments
 (0)