1+ using  ModelingToolkit, OrdinaryDiffEq, ODEInterfaceDiffEq, SpecialFunctions
2+ using  Test
3+ 
4+ #  Testing for α < 1
5+ #  Uses example 1 from Section 7 of https://arxiv.org/pdf/2506.04188
6+ @independent_variables  t
7+ @variables  x (t)
8+ D =  Differential (t)
9+ tspan =  (0. , 1. )
10+ 
11+ function  expect (t, α)
12+     return  (3 / 2 * t^ (α/ 2 ) -  t^ 4 )^ 2 
13+ end 
14+ 
15+ α =  0.5 
16+ eqs =  (9 * gamma (1  +  α)/ 4 ) -  (3 * t^ (4  -  α/ 2 )* gamma (5  +  α/ 2 )/ gamma (5  -  α/ 2 ))
17+ eqs +=  (gamma (9 )* t^ (8  -  α)/ gamma (9  -  α)) +  (3 / 2 * t^ (α/ 2 )- t^ 4 )^ 3  -  x^ (3 / 2 )
18+ sys =  fractional_to_ordinary (eqs, x, α, 10 ^- 7 , 1 )
19+ 
20+ prob =  ODEProblem (sys, [], tspan)
21+ sol =  solve (prob, radau5 (), abstol =  1e-10 , reltol =  1e-10 )
22+ 
23+ time =  0 
24+ while (time <=  1 )
25+     @test  isapprox (expect (time, α), sol (time, idxs= x), atol= 1e-3 )
26+     time +=  0.1 
27+ end 
28+ 
29+ α =  0.3 
30+ eqs =  (9 * gamma (1  +  α)/ 4 ) -  (3 * t^ (4  -  α/ 2 )* gamma (5  +  α/ 2 )/ gamma (5  -  α/ 2 ))
31+ eqs +=  (gamma (9 )* t^ (8  -  α)/ gamma (9  -  α)) +  (3 / 2 * t^ (α/ 2 )- t^ 4 )^ 3  -  x^ (3 / 2 )
32+ sys =  fractional_to_ordinary (eqs, x, α, 10 ^- 7 , 1 )
33+ 
34+ prob =  ODEProblem (sys, [], tspan)
35+ sol =  solve (prob, radau5 (), abstol =  1e-10 , reltol =  1e-10 )
36+ 
37+ time =  0 
38+ while (time <=  1 )
39+     @test  isapprox (expect (time, α), sol (time, idxs= x), atol= 1e-3 )
40+     time +=  0.1 
41+ end 
42+ 
43+ α =  0.9 
44+ eqs =  (9 * gamma (1  +  α)/ 4 ) -  (3 * t^ (4  -  α/ 2 )* gamma (5  +  α/ 2 )/ gamma (5  -  α/ 2 ))
45+ eqs +=  (gamma (9 )* t^ (8  -  α)/ gamma (9  -  α)) +  (3 / 2 * t^ (α/ 2 )- t^ 4 )^ 3  -  x^ (3 / 2 )
46+ sys =  fractional_to_ordinary (eqs, x, α, 10 ^- 7 , 1 )
47+ 
48+ prob =  ODEProblem (sys, [], tspan)
49+ sol =  solve (prob, radau5 (), abstol =  1e-10 , reltol =  1e-10 )
50+ 
51+ time =  0 
52+ while (time <=  1 )
53+     @test  isapprox (expect (time, α), sol (time, idxs= x), atol= 1e-3 )
54+     time +=  0.1 
55+ end 
56+ 
57+ #  Testing for example 2 of Section 7
58+ @independent_variables  t
59+ @variables  x (t) y (t)
60+ D =  Differential (t)
61+ tspan =  (0. , 220. )
62+ 
63+ sys =  fractional_to_ordinary ([1  -  4 * x +  x^ 2  *  y, 3 * x -  x^ 2  *  y], [x, y], [1.3 , 0.8 ], 10 ^- 6 , 220 ; initials= [[1.2 , 1 ], 2.8 ])
64+ prob =  ODEProblem (sys, [], tspan)
65+ sol =  solve (prob, radau5 (), abstol =  1e-8 , reltol =  1e-8 )
66+ 
67+ @test  isapprox (1.0097684171 , sol (220 , idxs= x), atol= 1e-3 )
68+ @test  isapprox (2.1581264031 , sol (220 , idxs= y), atol= 1e-3 )
0 commit comments