@@ -13,81 +13,120 @@ include("../../src/CTDiffFlow.jl")
1313using . CTDiffFlow
1414include (" ../../src/myode43/myode43.jl" )
1515
16- function my_euler (fun,t0,x0,tf,λ,N)
17- ti = t0; xi = x0
16+ function my_euler (fun, t0, x0, tf, λ, N)
17+ ti = t0;
18+ xi = x0
1819 h = (tf- t0)/ N
1920 for i in 1 : N
20- xi += h* fun (xi,λ, ti)
21+ xi += h* fun (xi, λ, ti)
2122 ti = ti+ h
2223 end
2324 return xi
2425end
2526
26-
2727# Definition of the edo
28- A (λ) = [λ[1 ] 0 0 ; 0 λ[2 ] 0 ; 0 0 λ[1 ]- λ[2 ]]
29- fun1 (x,λ, t) = A (λ)* x
30- funx0 (λ) = [λ[2 ],1. , 1 ];
28+ A (λ) = [λ[1 ] 0 0 ; 0 λ[2 ] 0 ; 0 0 λ[1 ]- λ[2 ]]
29+ fun1 (x, λ, t) = A (λ)* x
30+ funx0 (λ) = [λ[2 ], 1.0 , 1 ];
3131N = 10
32- t0 = 0. ; tf = 1. ; tspan = (t0,tf);
33- λ = [1. ,2 ];
32+ t0 = 0.0 ;
33+ tf = 1.0 ;
34+ tspan = (t0, tf);
35+ λ = [1.0 , 2 ];
3436reltol = 1.e-8
3537abstol = reltol
3638# ∂λ_flow(λ)
37- sol_∂λ_flow = [λ[2 ]* exp (λ[1 ]* tf) exp (λ[1 ]* tf)
38- 0. tf* exp (λ[2 ]* tf)
39- tf* exp ((λ[1 ]- λ[2 ])* tf) - tf* exp ((λ[1 ]- λ[2 ])* tf)]
40-
39+ sol_∂λ_flow = [
40+ λ[2 ]* exp (λ[1 ]* tf) exp (λ[1 ]* tf)
41+ 0.0 tf* exp (λ[2 ]* tf)
42+ tf* exp ((λ[1 ]- λ[2 ])* tf) - tf* exp ((λ[1 ]- λ[2 ])* tf)
43+ ]
4144
4245# dict_Zygote = Dict(:∂λ_sol => sol_∂λ_flow)
4346# dict_ForwardDiff = Dict(:∂λ_sol => sol_∂λ_flow)
4447
45- df = DataFrame (AutoDiff = String[], algo= String[], Jacobian = Matrix{<: Real }[])
48+ df = DataFrame (; AutoDiff = String[], algo= String[], Jacobian= Matrix{<: Real }[])
4649push! (df, (" solution" , " " , sol_∂λ_flow))
4750
4851# Zygote with my_euler
49- _flow (λ) = my_euler (fun1,t0,funx0 (λ),tf,λ, N)
52+ _flow (λ) = my_euler (fun1, t0, funx0 (λ), tf, λ, N)
5053# dict_Zygote[:my_euler] = jacobian(_flow,AutoZygote(),λ)
5154# dict_ForwardDiff[:my_euler] = jacobian(_flow,AutoForwardDiff(),λ)
52- push! (df, (" Zygote" , " my-euler" , jacobian (_flow,AutoZygote (),λ)))
53- push! (df, (" ForwardDiff" , " my-euler" , jacobian (_flow,AutoForwardDiff (),λ)))
55+ push! (df, (" Zygote" , " my-euler" , jacobian (_flow, AutoZygote (), λ)))
56+ push! (df, (" ForwardDiff" , " my-euler" , jacobian (_flow, AutoForwardDiff (), λ)))
5457# Zygote with numerical integration
5558function _flow_int (λ)
56- ivp = ODEProblem (fun1, funx0 (λ), (t0,tf), λ)
57- # algo = get(ode_kwargs, :alg, Tsit5())
58- # println("algo = ", algo)
59-
60- sol = solve (ivp, alg = Euler (),reltol= reltol,abstol= abstol,adaptive= false , dt = (tf- t0)/ N)
61- return sol. u[end ]
59+ ivp = ODEProblem (fun1, funx0 (λ), (t0, tf), λ)
60+ # algo = get(ode_kwargs, :alg, Tsit5())
61+ # println("algo = ", algo)
62+
63+ sol = solve (
64+ ivp; alg= Euler (), reltol= reltol, abstol= abstol, adaptive= false , dt= (tf- t0)/ N
65+ )
66+ return sol. u[end ]
6267end
6368
6469# dict_Zygote[:Euler] = jacobian(_flow_int,AutoZygote(),λ)
6570# dict_ForwardDiff[:Euler] = jacobian(_flow_int,AutoForwardDiff(),λ)
66- push! (df, (" Zygote" , " Euler" , jacobian (_flow_int,AutoZygote (),λ)))
67- push! (df, (" ForwardDiff" , " Euler" , jacobian (_flow_int,AutoForwardDiff (),λ)))
71+ push! (df, (" Zygote" , " Euler" , jacobian (_flow_int, AutoZygote (), λ)))
72+ push! (df, (" ForwardDiff" , " Euler" , jacobian (_flow_int, AutoForwardDiff (), λ)))
6873# Zygote with ∂λ_flow
69- ∂λ_flow = CTDiffFlow. build_∂λ_flow (fun1,t0,funx0,tf,λ; backend= AutoZygote ())
74+ ∂λ_flow = CTDiffFlow. build_∂λ_flow (fun1, t0, funx0, tf, λ; backend= AutoZygote ())
7075# dict_Zygote[:CTDiffFlowZygoteEuler] = ∂λ_flow(t0,funx0,tf,λ;reltol=reltol,abstol=abstol, alg = Euler(),adaptive=false, dt = (tf-t0)/N)#,print_times=false)
71- push! (df, (" Zygote" , " CTDiffFlow-Euler" , ∂λ_flow (t0,funx0,tf,λ;reltol= reltol,abstol= abstol, alg = Euler (),adaptive= false , dt = (tf- t0)/ N)))
76+ push! (
77+ df,
78+ (
79+ " Zygote" ,
80+ " CTDiffFlow-Euler" ,
81+ ∂λ_flow (
82+ t0,
83+ funx0,
84+ tf,
85+ λ;
86+ reltol= reltol,
87+ abstol= abstol,
88+ alg= Euler (),
89+ adaptive= false ,
90+ dt= (tf- t0)/ N,
91+ ),
92+ ),
93+ )
7294
7395# ForwardDiff with ∂λ_flow
74- ∂λ_flow = CTDiffFlow. build_∂λ_flow (fun1,t0,funx0,tf,λ; backend= AutoForwardDiff ())
96+ ∂λ_flow = CTDiffFlow. build_∂λ_flow (fun1, t0, funx0, tf, λ; backend= AutoForwardDiff ())
7597# dict_ForwardDiff[:CTDiffFlowForwardDiffEuler] = ∂λ_flow(t0,funx0,tf,λ;reltol=reltol,abstol=abstol, alg = Euler(),adaptive=false, dt = (tf-t0)/N)#,print_times=false)
76- push! (df, (" ForwardDiff" , " my-euler" , ∂λ_flow (t0,funx0,tf,λ;reltol= reltol,abstol= abstol, alg = Euler (),adaptive= false , dt = (tf- t0)/ N)))
98+ push! (
99+ df,
100+ (
101+ " ForwardDiff" ,
102+ " my-euler" ,
103+ ∂λ_flow (
104+ t0,
105+ funx0,
106+ tf,
107+ λ;
108+ reltol= reltol,
109+ abstol= abstol,
110+ alg= Euler (),
111+ adaptive= false ,
112+ dt= (tf- t0)/ N,
113+ ),
114+ ),
115+ )
77116
78117function _flow (λ)
79- T, X = myode43 (fun1,funx0 (λ),λ, (t0,tf),abstol,reltol)
118+ T, X = myode43 (fun1, funx0 (λ), λ, (t0, tf), abstol, reltol)
80119 return X[end ]
81120end
82121
83122# dict_Zygote[:myode43Zygote] = jacobian(_flow,AutoZygote(),λ)
84123# dict_ForwardDiff[:myode43ForwardDiff] = jacobian(_flow,AutoForwardDiff(),λ)
85124push! (df, (" Zygote" , " my-ode43" , [NaN ;;]))
86- push! (df, (" ForwardDiff" , " my-ode43" , jacobian (_flow,AutoForwardDiff (),λ)))
125+ push! (df, (" ForwardDiff" , " my-ode43" , jacobian (_flow, AutoForwardDiff (), λ)))
87126
88- jacobian (_flow,AutoForwardDiff (),λ)
127+ jacobian (_flow, AutoForwardDiff (), λ)
89128
90- latexify (df, arraystyle= :pmatrix ,env= :tabular )
129+ latexify (df; arraystyle= :pmatrix , env= :tabular )
91130
92- sol_Zygote = df[in .(df. AutoDiff, Ref ([" solution" ," Zygote" ])),:]
93- sol_ForwardDiff = df[in .(df. AutoDiff, Ref ([" solution" , " ForwardDiff" ])),:]
131+ sol_Zygote = df[in .(df. AutoDiff, Ref ([" solution" , " Zygote" ])), :]
132+ sol_ForwardDiff = df[in .(df. AutoDiff, Ref ([" solution" , " ForwardDiff" ])), :]
0 commit comments