@@ -37,7 +37,7 @@ x0 = [ r0, v0, m0 ]
37
37
38
38
x (t0) == [ r0, v0, m0 ]
39
39
0 ≤ u (t) ≤ 1
40
- r0 ≤ r (t) ≤ Inf , (1 )
40
+ r (t) ≥ r0, (1 )
41
41
0 ≤ v (t) ≤ vmax, (2 )
42
42
mf ≤ m (t) ≤ m0, (3 )
43
43
@@ -78,7 +78,7 @@ objective!(ocp_f, :mayer, (x0, xf, tf) -> xf[1], :max)
78
78
79
79
# Direct solve
80
80
ocp = ocp_f
81
- N = 10
81
+ N = 50
82
82
direct_sol = solve (ocp, grid_size= N)
83
83
84
84
# Plot
@@ -90,17 +90,14 @@ md""
90
90
u0 = 0
91
91
u1 = 1
92
92
93
- H0 = Lift (F0)
94
- H1 = Lift (F1)
93
+ H0 (x, p) = Lift (F0)(x, p )
94
+ H1 (x, p) = Lift (F1)(x, p )
95
95
H01 = @Poisson {H0, H1}
96
96
H001 = @Poisson {H0, H01}
97
97
H101 = @Poisson {H1, H01}
98
98
us (x, p) = - H001 (x, p) / H101 (x, p)
99
99
100
- # remove_constraint!(ocp, :eq1)
101
- # remove_constraint!(ocp, :eq3)
102
- # constraint!(ocp, :final, Index(3), mf, :eq4)
103
- g (x) = vmax - constraint (ocp, :eq2 )(x, Real[])
100
+ g (x) = vmax - constraint (ocp, :eq2 )(x, - 1 )
104
101
ub (x) = - Lie (F0, g)(x) / Lie (F1, g)(x)
105
102
μ (x, p) = H01 (x, p) / Lie (F1, g)(x)
106
103
@@ -115,7 +112,7 @@ shoot!(s, p0, t1, t2, t3, tf) = begin
115
112
x2, p2 = fs (t1, x1, p1, t2)
116
113
x3, p3 = fb (t2, x2, p2, t3)
117
114
xf, pf = f0 (t3, x3, p3, tf)
118
- s[1 ] = constraint (ocp, :eq4 )(xf) - mf
115
+ s[1 ] = xf[ 3 ] - mf # final mass constraint active
119
116
s[2 : 3 ] = pf[1 : 2 ] - [ 1 , 0 ]
120
117
s[4 ] = H1 (x1, p1)
121
118
s[5 ] = H01 (x1, p1)
@@ -128,12 +125,13 @@ end
128
125
t = direct_sol. times
129
126
x = direct_sol. state
130
127
u = direct_sol. control
131
- p = direct_sol. adjoint
128
+ p = direct_sol. costate
129
+ H1 (t) = H1 (x (t), p (t))
132
130
133
- u_plot = plot (t, u, label = " u(t)" )
134
- H1_plot = plot (t, t -> H1 ( x (t), p (t)), label = " H₁(x(t), p(t))" )
135
- g_plot = plot (t, g ∘ x, label = " g(x(t))" )
136
- display (plot (u_plot, H1_plot, g_plot, layout= (3 ,1 ), size= (400 , 300 )))
131
+ u_plot = plot (t, t -> u (t)[ 1 ], label = " u(t)" )
132
+ H1_plot = plot (t, H1, label = " H₁(x(t), p(t))" )
133
+ g_plot = plot (t, g ∘ x, label = " g(x(t))" )
134
+ display (plot (u_plot, H1_plot, g_plot, layout= (3 ,1 ), size= (700 , 600 )))
137
135
savefig (" goddard_fig2.png" )
138
136
md " "
139
137
0 commit comments