Demonstrate the 2D trajectory optimization function for low thrust.
This demo is the same as the built-in demo in TrajectoryOptimization, a low-thrust transfer to Mars. This is a well-studied problem. The method used is downhill simplex.
Things to try: see how the methods do with different initial costates.
See also Constant, Planets, TrajectoryOptimization
Contents
%-------------------------------------------------------------------------- % Copyright (c) 2005 Princeton Satellite Systems, Inc. % All rights reserved. %-------------------------------------------------------------------------- % Since version 7. %-------------------------------------------------------------------------- disp('This demo takes several minutes to run.') d = struct; d.d = CostLowThrust2D( 'get' );
This demo takes several minutes to run.
1. Use downhill simplex (fminsearch)
%--------------------------------- tic d.method = 'downhill simplex'; % On the next pass use the newly computed lambda as the first guess %------------------------------------------------------------------ d.repeat = 1; % Spacecraft properties %---------------------- m0 = 10000*Constant('lb force to kg'); % kg d.d.thrust = 0.0005; % N d.d.mDot = 6.7727e-5; % thrust/uE % Target planet %-------------- [name,a] = Planets('rad',4); % Mars % Heliocentric system %--------------------- d.d.mu = Constant('mu sun'); aU = Constant('au'); aF = a(1)*aU; d.d.rF = aF; % Dynamics function %------------------ d.d.rhsFun = @FLowThrust2D; d.d.plotFun = @Plot2DTrajectory; % Simplex parameters %------------------- d.d.stateTol = 1e-6; d.d.funTol = 1e-6; d.d.nIts = 2500; % Cost function called by simplex %-------------------------------- d.d.costFun = @CostLowThrust2D; % Getting messages about integration toleranges which do not affect solver warning off MATLAB:ode113:IntegrationTolNotMet; % Initial costate guess %---------------------- d.d.lambda0 = [0;-1;1]*1e5; Plot2DTrajectory(d.d.lambda0,d.d) % [r;rDot;v;m] %--------------------------------------------- v0 = VOrbit(aU,aU,d.d.mu); vF = VOrbit(aF,aF,d.d.mu); d.d.x0 = [aU;0;v0;m0]; d.d.xF = [d.d.rF;0;vF]; % Integration (ode113) parameters %-------------------------------- d.d.data.absTol = 1e-10; d.d.data.relTol = 2.5e-8; d.d.data.maxStep = 0.1; % ode113 will never take a step bigger than this % fraction of the end time d.d.tEnd = 1000*86400; % (s) % Weights for the costates and error in the mass equation %-------------------------------------------------------- d.d.errorScale = [1; 3e6; 1e7; 1e-2]; % Optimize the trajectory. It will use Plot2DTrajectory to plot the results %------------------------------------------------------- TrajectoryOptimization( d ); toc %-------------------------------------- % PSS internal file version information %--------------------------------------
Radial position error = 57463397.1744 (km)
Radial velocity error = -0.2684 (km/s)
Tangential velocity error = 1.7734 (km/s)
Time of minimum error = 7.5254 month
ans =
1.7047e+08
-0.26837
25.903
Case 1: Method: downhill simplex
Iteration Func-count min f(x) Procedure
0 1 6.01431e+07
1 4 5.95565e+07 initial simplex
2 6 5.80463e+07 expand
3 7 5.80463e+07 reflect
4 9 5.61238e+07 expand
5 11 5.29135e+07 expand
6 12 5.29135e+07 reflect
7 14 4.71632e+07 expand
8 16 4.18598e+07 expand
9 17 4.18598e+07 reflect
10 19 3.56763e+07 expand
11 21 3.32293e+07 expand
12 22 3.32293e+07 reflect
13 24 3.18217e+07 expand
14 26 3.12576e+07 expand
15 27 3.12576e+07 reflect
16 29 3.10677e+07 expand
17 31 3.08714e+07 expand
18 32 3.08714e+07 reflect
19 33 3.08714e+07 reflect
20 35 3.07756e+07 expand
21 36 3.07756e+07 reflect
22 38 3.06753e+07 expand
23 39 3.06753e+07 reflect
24 40 3.06753e+07 reflect
25 42 3.05868e+07 expand
26 44 3.04588e+07 expand
27 45 3.04588e+07 reflect
28 47 3.03918e+07 expand
29 49 3.0165e+07 expand
30 50 3.0165e+07 reflect
31 51 3.0165e+07 reflect
32 53 3.0165e+07 contract inside
33 55 3.0165e+07 contract inside
34 56 3.0165e+07 reflect
35 58 3.0165e+07 contract inside
36 60 3.0165e+07 contract inside
37 61 3.0165e+07 reflect
38 63 3.00939e+07 expand
39 65 3.00939e+07 contract inside
40 66 3.00939e+07 reflect
41 68 3.00939e+07 contract inside
42 69 3.00939e+07 reflect
43 71 2.9158e+07 expand
44 72 2.9158e+07 reflect
45 74 2.9158e+07 contract inside
46 76 2.9158e+07 contract inside
47 78 2.9158e+07 contract inside
48 80 2.9158e+07 contract inside
49 82 2.9158e+07 contract inside
50 84 2.67832e+07 reflect
51 86 2.67832e+07 contract inside
52 88 2.67832e+07 contract inside
53 90 2.67832e+07 contract inside
54 92 2.59737e+07 reflect
55 94 2.59737e+07 contract inside
56 96 2.59737e+07 contract inside
57 98 2.59737e+07 contract inside
58 100 2.40979e+07 reflect
59 102 2.40979e+07 contract inside
60 104 2.40979e+07 contract inside
61 106 2.15696e+07 reflect
62 108 2.15696e+07 contract inside
63 110 2.15696e+07 contract inside
64 112 2.15696e+07 contract inside
65 114 2.05799e+07 contract inside
66 116 2.04896e+07 contract outside
67 118 2.04896e+07 contract inside
68 120 1.94198e+07 expand
69 122 1.93601e+07 reflect
70 124 1.53758e+07 expand
71 125 1.53758e+07 reflect
72 127 1.46632e+07 reflect
73 128 1.46632e+07 reflect
74 130 1.38465e+07 reflect
75 132 1.25003e+07 expand
76 134 1.25003e+07 contract inside
77 135 1.25003e+07 reflect
78 136 1.25003e+07 reflect
79 138 1.09084e+07 expand
80 139 1.09084e+07 reflect
81 141 1.09084e+07 contract inside
82 143 7.42771e+06 expand
83 144 7.42771e+06 reflect
84 146 7.42771e+06 contract inside
85 148 7.42771e+06 contract inside
86 149 7.42771e+06 reflect
87 151 7.42771e+06 contract inside
88 153 7.09489e+06 expand
89 155 7.09489e+06 contract inside
90 157 5.65987e+06 contract inside
91 159 2.31801e+06 reflect
92 161 2.31801e+06 contract inside
93 162 2.31801e+06 reflect
94 163 2.31801e+06 reflect
95 164 2.31801e+06 reflect
96 166 2.31801e+06 contract inside
97 168 2.25997e+06 contract inside
98 170 2.25997e+06 contract inside
99 172 2.25997e+06 contract inside
100 174 1.7459e+06 reflect
101 176 1.7459e+06 contract outside
102 178 1.34852e+06 reflect
103 179 1.34852e+06 reflect
104 181 1.34852e+06 contract inside
105 183 615983 contract inside
106 185 615983 contract inside
107 187 615983 contract inside
108 189 615983 contract outside
109 191 204658 reflect
110 193 204658 contract inside
111 194 204658 reflect
112 196 204658 contract inside
113 197 204658 reflect
114 199 204658 contract inside
115 201 204658 contract inside
116 203 134713 contract inside
117 205 134713 contract inside
118 210 94667 shrink
119 212 94667 contract outside
120 213 94667 reflect
121 214 94667 reflect
122 219 94667 shrink
123 221 48301.9 reflect
124 223 48301.9 contract outside
125 228 48301.9 shrink
126 229 48301.9 reflect
127 231 48301.9 contract inside
128 232 48301.9 reflect
129 233 48301.9 reflect
130 238 48301.9 shrink
131 243 48301.9 shrink
132 248 46075 shrink
133 253 46075 shrink
134 258 46075 shrink
135 263 46075 shrink
136 268 46075 shrink
137 273 46075 shrink
138 278 46075 shrink
139 283 46075 shrink
140 288 46075 shrink
141 289 46075 reflect
142 291 46063.9 expand
143 292 46063.9 reflect
144 294 46049.5 expand
145 296 46049.5 contract inside
146 297 46049.5 reflect
147 299 46049.5 contract inside
148 301 46033.5 expand
149 303 46014.6 expand
150 305 46014.6 contract inside
151 307 45991.2 expand
152 309 45991.2 contract inside
153 311 45966.4 expand
154 313 45917 expand
155 315 45901.8 reflect
156 317 45802.9 expand
157 319 45688.9 expand
158 321 45559.6 expand
159 323 45465.9 reflect
160 325 45340.2 reflect
161 327 45340.2 contract inside
162 329 45338.4 reflect
163 331 45025.2 expand
164 333 45003.4 reflect
165 335 45003.4 contract inside
166 337 44835 reflect
167 339 44401.5 expand
168 341 44401.5 contract inside
169 342 44401.5 reflect
170 344 44212.9 reflect
171 346 43357.3 expand
172 347 43357.3 reflect
173 349 42339 expand
174 351 40846.3 expand
175 353 39412.2 expand
176 355 35922.4 expand
177 357 35922.4 contract inside
178 358 35922.4 reflect
179 360 33986.3 reflect
180 362 27665.6 expand
181 363 27665.6 reflect
182 365 24447.5 reflect
183 367 14713.5 expand
184 368 14713.5 reflect
185 370 14713.5 contract inside
186 372 14713.5 contract inside
187 374 14713.5 contract inside
188 376 14713.5 contract inside
189 378 14713.5 contract inside
190 380 14713.5 contract inside
191 382 14713.5 contract inside
192 384 14713.5 contract inside
193 386 14713.5 contract inside
194 387 14713.5 reflect
195 389 14713.5 contract inside
196 391 14713.5 contract inside
197 393 14713.5 contract inside
198 395 14713.5 contract inside
199 397 14713.5 contract inside
200 399 14713.5 contract inside
201 401 14713.5 contract inside
202 403 14713.5 contract inside
203 405 14713.5 contract inside
204 407 14713.5 contract inside
205 409 14713.5 contract inside
206 411 14713.5 contract inside
207 413 14713.5 contract inside
208 415 14713.5 contract inside
209 417 14706.1 reflect
210 419 14706.1 contract inside
211 421 14706.1 contract inside
212 423 14706.1 contract inside
213 425 14706.1 contract inside
214 427 14706.1 contract inside
215 429 14701.8 reflect
216 431 14701.8 contract inside
217 433 14701.8 contract inside
218 435 14701.8 contract inside
219 437 14701.8 contract inside
220 439 14701.8 contract inside
221 441 14701.6 reflect
222 443 14701.6 contract inside
223 445 14701.6 contract inside
224 450 14701.6 shrink
225 452 14701.6 contract inside
226 454 14701 reflect
227 459 14701 shrink
228 460 14701 reflect
229 462 14701 contract inside
230 467 14701 shrink
231 472 14701 shrink
232 477 14701 shrink
233 482 14701 shrink
234 487 14701 shrink
235 492 14701 shrink
236 497 14701 shrink
237 502 14701 shrink
238 507 14701 shrink
239 508 14701 reflect
240 513 14701 shrink
241 518 14701 shrink
242 523 14701 shrink
243 528 14701 shrink
244 533 14701 shrink
245 535 14701 contract inside
246 540 14701 shrink
247 545 14701 shrink
248 550 14701 shrink
249 552 14701 contract inside
250 557 14701 shrink
251 558 14701 reflect
252 563 14701 shrink
253 564 14701 reflect
254 566 14701 contract inside
255 567 14701 reflect
256 569 14701 reflect
257 574 14701 shrink
258 576 14701 contract outside
259 578 14701 contract inside
260 583 14701 shrink
261 584 14701 reflect
262 589 14701 shrink
263 591 14701 contract outside
264 596 14701 shrink
265 598 14701 reflect
266 603 14701 shrink
267 604 14701 reflect
268 609 14701 shrink
269 611 14701 contract outside
Optimization terminated:
the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e-06
and F(X) satisfies the convergence criteria using OPTIONS.TolFun of 1.000000e-06
Radial position error = 2187.3965 (km)
Radial velocity error = -0.0036 (km/s)
Tangential velocity error = -0.0010 (km/s)
Time of minimum error = 1.3053 year
Elapsed time is 13.078521 seconds.