Skip to content

Commit da699f8

Browse files
committed
added Arentsorf Orbit Problem, needs custom Phaseplot with masses as point plots
1 parent 4c0d7aa commit da699f8

File tree

4 files changed

+73
-0
lines changed

4 files changed

+73
-0
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
classdef Canonical < otp.arenstorf.ArenstorfProblem
2+
methods
3+
function obj = Canonical
4+
params.m1 = 0.012277471;
5+
params.m2 = 1-0.012277471;
6+
7+
y0 = [0.994; 0; 0; -2.00158510637908252240537862224];
8+
tspan = [0,20];
9+
10+
obj = obj@otp.arenstorf.ArenstorfProblem(tspan, y0, params);
11+
end
12+
13+
end
14+
end
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
classdef ArenstorfProblem < otp.Problem
2+
% The classic 3-body problem with parameters from
3+
% Reference: Hairer, Ernst, Syvert Paul Nørsett, and Gerhard Wanner.
4+
% Solving Ordinary Differential Equations I: Nonstiff Problems Springer-Verlag, 1987.
5+
% CH II, p. 129.
6+
methods
7+
function obj = ArenstorfProblem(timeSpan, y0, parameters)
8+
obj@otp.Problem('Arenstorf Orbit Problem', 4, timeSpan, y0, parameters);
9+
end
10+
end
11+
12+
methods (Access=protected)
13+
14+
function onSettingsChanged(obj)
15+
m1 = obj.Parameters.m1;
16+
m2 = obj.Parameters.m2;
17+
18+
obj.Rhs = otp.Rhs( @(t, y) otp.arenstorf.f(t, y, m1, m2), ...
19+
otp.Rhs.FieldNames.Jacobian, @(t, y) otp.arenstorf.jac(t, y, m1, m2));
20+
end
21+
22+
23+
function validateNewState(obj, newTimeSpan, newY0, newParameters)
24+
validateNewState@otp.Problem(obj, newTimeSpan, newY0, newParameters);
25+
26+
otp.utils.StructParser(newParameters) ...
27+
.checkField('m1', 'scalar', 'real', 'finite', 'positive') ...
28+
.checkField('m2', 'scalar', 'real', 'finite', 'positive');
29+
30+
end
31+
32+
33+
% function fig = internalPlotPhaseSpace(obj, sol, varargin)
34+
% fig = internalPlotPhaseSpace@otp.Problem(obj, sol, 1:2, varargin{:});
35+
% end
36+
37+
end
38+
end

src/+otp/+arenstorf/f.m

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
function dy = f(~, y, m1 ,m2)
2+
3+
4+
% a=0.012277471; b=1.0-a;
5+
6+
D1= ((y(1)+m1)^2+y(2)^2)^(3/2);
7+
D2= ((y(1)-m2)^2+y(2)^2)^(3/2);
8+
9+
dy = [y(3);y(4);y(1)+2*y(4)-m2/D1*(y(1)+m1)-m1/D2*(y(1)-m2);y(2)-2*y(3)-m2/D1*y(2)-m1/D2*y(2)];
10+
11+
12+
end

src/+otp/+arenstorf/jac.m

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
function dfy = jac(~, y, m1 ,m2)
2+
3+
dfy =[
4+
0, 0, 1, 0;
5+
0, 0, 0, 1;
6+
(3*m1*(2*m2 - 2*y(1))*(m2 - y(1)))/(2*((m2 - y(1))^2 + y(2)^2)^(5/2)) - m1/((m2 - y(1))^2 + y(2)^2)^(3/2) - m2/((m1 + y(1))^2 + y(2)^2)^(3/2) + (3*m2*(2*m1 + 2*y(1))*(m1 + y(1)))/(2*((m1 + y(1))^2 + y(2)^2)^(5/2)) + 1, (3*m2*y(2)*(m1 + y(1)))/((m1 + y(1))^2 + y(2)^2)^(5/2) - (3*m1*y(2)*(m2 - y(1)))/((m2 - y(1))^2 + y(2)^2)^(5/2), 0, 2;
7+
(3*m2*y(2)*(m1 + y(1)))/((m1 + y(1))^2 + y(2)^2)^(5/2) - (3*m1*y(2)*(2*m2 - 2*y(1)))/(2*((m2 - y(1))^2 + y(2)^2)^(5/2)), (3*m1*y(2)^2)/((m2 - y(1))^2 + y(2)^2)^(5/2) - m1/((m2 - y(1))^2 + y(2)^2)^(3/2) - m2/((m1 + y(1))^2 + y(2)^2)^(3/2) + (3*m2*y(2)^2)/((m1 + y(1))^2 + y(2)^2)^(5/2) + 1, -2, 0];
8+
9+
end

0 commit comments

Comments
 (0)