yan123yan commited on
Commit
cc9df09
·
1 Parent(s): af53761

update midpoint function

Browse files
Files changed (2) hide show
  1. pages/inference.py +25 -27
  2. utils/midpoint.py +112 -71
pages/inference.py CHANGED
@@ -130,7 +130,6 @@ def high_level(option_time, slider_sample_orbit, progress_bar):
130
  def midpoint(option_time, slider_sample_orbit, progress_bar):
131
  time.sleep(0.1)
132
  mid_point_total_start_time = time.time()
133
- mid_point_30000_start_time = time.time()
134
 
135
  midpointhelper = MidPoint(j=slider_sample_orbit)
136
  j, h, b, n, x, y, z, xa, ya, za, px, py, pz, pxa, pya, pza = midpointhelper.initial()
@@ -147,25 +146,26 @@ def midpoint(option_time, slider_sample_orbit, progress_bar):
147
 
148
  original_mid_point_data = []
149
 
 
 
150
  while t < float(option_time):
151
- x, y, z, px, py, pz, xa, ya, za, pxa, pya, pza = midpointhelper.symplectic(h * a1, x, y, z, px, py, pz, xa, ya,za, pxa, pya, pza, b)
152
- x, y, z, px, py, pz, xa, ya, za, pxa, pya, pza = midpointhelper.symplectic(h * a2, x, y, z, px, py, pz, xa, ya,za, pxa, pya, pza, b)
153
- x, y, z, px, py, pz, xa, ya, za, pxa, pya, pza = midpointhelper.symplectic(h * a1, x, y, z, px, py, pz, xa, ya,za, pxa, pya, pza, b)
154
- x, y, z, px, py, pz, xa, ya, za, pxa, pya, pza = midpointhelper.rejust(x, y, z, px, py, pz, xa, ya, za, pxa,pya, pza)
155
 
156
  t = t + h
157
 
158
  if jn % 10 == 0:
159
  original_mid_point_data.append([b, x, y, z, px, py, pz])
 
 
 
160
  if jn == 300000:
161
  mid_point_30000_end_time = time.time()
162
  mid_point_30000_execute_time = mid_point_30000_end_time - mid_point_30000_start_time
163
  mid_point_2000_start_time = time.time()
164
  jn = jn + 1
165
 
166
- # Update progress bar
167
- progress_percentage = int((current_iteration / total_iterations) * 100)
168
- progress_bar.progress(progress_percentage)
169
  current_iteration += 1
170
 
171
  #mid_point_df.to_excel('mid_point_df_output.xlsx', index=False)
@@ -277,10 +277,9 @@ def mid_point_lstm(slider_sample_orbit, lstm_progress_bar):
277
  mid_point_start_time = time.time()
278
 
279
  while t < float(30000):
280
- x, y, z, px, py, pz, xa, ya, za, pxa, pya, pza = midpointhelper.symplectic(h * a1, x, y, z, px, py, pz, xa, ya,za, pxa, pya, pza, b)
281
- x, y, z, px, py, pz, xa, ya, za, pxa, pya, pza = midpointhelper.symplectic(h * a2, x, y, z, px, py, pz, xa, ya,za, pxa, pya, pza, b)
282
- x, y, z, px, py, pz, xa, ya, za, pxa, pya, pza = midpointhelper.symplectic(h * a1, x, y, z, px, py, pz, xa, ya,za, pxa, pya, pza, b)
283
- x, y, z, px, py, pz, xa, ya, za, pxa, pya, pza = midpointhelper.rejust(x, y, z, px, py, pz, xa, ya, za, pxa,pya, pza)
284
 
285
  t = t + h
286
 
@@ -429,10 +428,9 @@ def mid_point_tcn(slider_sample_orbit, tcn_progress_bar):
429
 
430
  # Perform classical method prediction for the initial segment
431
  while t < float(30000):
432
- x, y, z, px, py, pz, xa, ya, za, pxa, pya, pza = midpointhelper.symplectic(h * a1, x, y, z, px, py, pz, xa, ya,za, pxa, pya, pza, b)
433
- x, y, z, px, py, pz, xa, ya, za, pxa, pya, pza = midpointhelper.symplectic(h * a2, x, y, z, px, py, pz, xa, ya,za, pxa, pya, pza, b)
434
- x, y, z, px, py, pz, xa, ya, za, pxa, pya, pza = midpointhelper.symplectic(h * a1, x, y, z, px, py, pz, xa, ya,za, pxa, pya, pza, b)
435
- x, y, z, px, py, pz, xa, ya, za, pxa, pya, pza = midpointhelper.rejust(x, y, z, px, py, pz, xa, ya, za, pxa, pya, pza)
436
 
437
  t = t + h
438
 
@@ -490,18 +488,18 @@ with st.sidebar:
490
  st.write(f'Total Time Step: {option_time}')
491
  options_method = st.multiselect(
492
  'Compared Methods',
493
- ['Low-Level', 'High-Level', 'Midpoint', 'Low-Level with LSTM', 'Low-Level with TCN', 'Midpoint with LSTM', 'Midpoint with TCN'],
494
- ['Low-Level'])
495
  btn_go = st.button("Go", type="primary", use_container_width=True)
496
 
497
  if btn_go:
498
- if 'Low-Level' in options_method:
499
  with container1:
500
- st.write('Low Level Progress Bar')
501
  low_level_progress_bar = st.progress(0)
502
  low_level_30000_time, low_level_2000_time, low_level_total_time, low_level_result = low_level(option_time, slider_sample_orbit, low_level_progress_bar)
503
  with container2:
504
- st.table(pd.DataFrame({'Model':"Low Level", '30000 Time Steps (s)': [low_level_30000_time], '2000 Time Steps (s)': [low_level_2000_time], 'Total Time (s)': [low_level_total_time]}))
505
  if 'High-Level' in options_method:
506
  with container1:
507
  st.write('High Level Progress Bar')
@@ -516,20 +514,20 @@ if btn_go:
516
  mid_point_30000_time, mid_point_2000_time, mid_point_total_time, mid_point_result = midpoint(option_time, slider_sample_orbit, mid_point_progress_bar)
517
  with container2:
518
  st.table(pd.DataFrame({'Model':"Midpoint", '30000 Time Steps (s)': [mid_point_30000_time], '2000 Time Steps (s)': [mid_point_2000_time], 'Total Time (s)': [mid_point_total_time]}))
519
- if 'Low-Level with LSTM' in options_method:
520
  with container1:
521
- st.write('Low Level LSTM Progress Bar')
522
  low_level_lstm_progress_bar = st.progress(0)
523
  lstm_30000_time, lstm_2000_time, lstm_total_time, lstm_result = low_level_lstm(slider_sample_orbit, low_level_lstm_progress_bar)
524
  with container2:
525
- st.table(pd.DataFrame({'Model':"Low Level + LSTM", '30000 Time Steps (s)': [lstm_30000_time], '2000 Time Steps (s)': [lstm_2000_time], 'Total Time (s)': [lstm_total_time]}))
526
- if 'Low-Level with TCN' in options_method:
527
  with container1:
528
- st.write('Low Level TCN Progress Bar')
529
  low_level_tcn_progress_bar = st.progress(0)
530
  tcn_30000_time, tcn_2000_time, tcn_total_time, tcn_result = low_level_tcn(slider_sample_orbit, low_level_tcn_progress_bar)
531
  with container2:
532
- st.table(pd.DataFrame({'Model':"Low Level + TCN", '30000 Time Steps (s)': [tcn_30000_time], '2000 Time Steps (s)': [tcn_2000_time], 'Total Time (s)': [tcn_total_time]}))
533
  if 'Midpoint with LSTM' in options_method:
534
  with container1:
535
  st.write('Midpoint LSTM Progress Bar')
 
130
  def midpoint(option_time, slider_sample_orbit, progress_bar):
131
  time.sleep(0.1)
132
  mid_point_total_start_time = time.time()
 
133
 
134
  midpointhelper = MidPoint(j=slider_sample_orbit)
135
  j, h, b, n, x, y, z, xa, ya, za, px, py, pz, pxa, pya, pza = midpointhelper.initial()
 
146
 
147
  original_mid_point_data = []
148
 
149
+ mid_point_30000_start_time = time.time()
150
+
151
  while t < float(option_time):
152
+ x, y, z, px, py, pz = midpointhelper.implecitsymplectic(a1 * h, x, y, z, px, py, pz, b)
153
+ x, y, z, px, py, pz = midpointhelper.implecitsymplectic(a2 * h, x, y, z, px, py, pz, b)
154
+ x, y, z, px, py, pz = midpointhelper.implecitsymplectic(a1 * h, x, y, z, px, py, pz, b)
 
155
 
156
  t = t + h
157
 
158
  if jn % 10 == 0:
159
  original_mid_point_data.append([b, x, y, z, px, py, pz])
160
+ # Update progress bar
161
+ progress_percentage = int((current_iteration / total_iterations) * 100)
162
+ progress_bar.progress(progress_percentage)
163
  if jn == 300000:
164
  mid_point_30000_end_time = time.time()
165
  mid_point_30000_execute_time = mid_point_30000_end_time - mid_point_30000_start_time
166
  mid_point_2000_start_time = time.time()
167
  jn = jn + 1
168
 
 
 
 
169
  current_iteration += 1
170
 
171
  #mid_point_df.to_excel('mid_point_df_output.xlsx', index=False)
 
277
  mid_point_start_time = time.time()
278
 
279
  while t < float(30000):
280
+ x, y, z, px, py, pz = midpointhelper.implecitsymplectic(a1 * h, x, y, z, px, py, pz, b)
281
+ x, y, z, px, py, pz = midpointhelper.implecitsymplectic(a2 * h, x, y, z, px, py, pz, b)
282
+ x, y, z, px, py, pz = midpointhelper.implecitsymplectic(a1 * h, x, y, z, px, py, pz, b)
 
283
 
284
  t = t + h
285
 
 
428
 
429
  # Perform classical method prediction for the initial segment
430
  while t < float(30000):
431
+ x, y, z, px, py, pz = midpointhelper.implecitsymplectic(a1 * h, x, y, z, px, py, pz, b)
432
+ x, y, z, px, py, pz = midpointhelper.implecitsymplectic(a2 * h, x, y, z, px, py, pz, b)
433
+ x, y, z, px, py, pz = midpointhelper.implecitsymplectic(a1 * h, x, y, z, px, py, pz, b)
 
434
 
435
  t = t + h
436
 
 
488
  st.write(f'Total Time Step: {option_time}')
489
  options_method = st.multiselect(
490
  'Compared Methods',
491
+ ['EPS', 'Midpoint', 'EPS with LSTM', 'EPS with TCN', 'Midpoint with LSTM', 'Midpoint with TCN'],
492
+ ['EPS'])
493
  btn_go = st.button("Go", type="primary", use_container_width=True)
494
 
495
  if btn_go:
496
+ if 'EPS' in options_method:
497
  with container1:
498
+ st.write('EPS Progress Bar')
499
  low_level_progress_bar = st.progress(0)
500
  low_level_30000_time, low_level_2000_time, low_level_total_time, low_level_result = low_level(option_time, slider_sample_orbit, low_level_progress_bar)
501
  with container2:
502
+ st.table(pd.DataFrame({'Model':"EPS", '30000 Time Steps (s)': [low_level_30000_time], '2000 Time Steps (s)': [low_level_2000_time], 'Total Time (s)': [low_level_total_time]}))
503
  if 'High-Level' in options_method:
504
  with container1:
505
  st.write('High Level Progress Bar')
 
514
  mid_point_30000_time, mid_point_2000_time, mid_point_total_time, mid_point_result = midpoint(option_time, slider_sample_orbit, mid_point_progress_bar)
515
  with container2:
516
  st.table(pd.DataFrame({'Model':"Midpoint", '30000 Time Steps (s)': [mid_point_30000_time], '2000 Time Steps (s)': [mid_point_2000_time], 'Total Time (s)': [mid_point_total_time]}))
517
+ if 'EPS with LSTM' in options_method:
518
  with container1:
519
+ st.write('EPS LSTM Progress Bar')
520
  low_level_lstm_progress_bar = st.progress(0)
521
  lstm_30000_time, lstm_2000_time, lstm_total_time, lstm_result = low_level_lstm(slider_sample_orbit, low_level_lstm_progress_bar)
522
  with container2:
523
+ st.table(pd.DataFrame({'Model':"EPS + LSTM", '30000 Time Steps (s)': [lstm_30000_time], '2000 Time Steps (s)': [lstm_2000_time], 'Total Time (s)': [lstm_total_time]}))
524
+ if 'EPS with TCN' in options_method:
525
  with container1:
526
+ st.write('EPS TCN Progress Bar')
527
  low_level_tcn_progress_bar = st.progress(0)
528
  tcn_30000_time, tcn_2000_time, tcn_total_time, tcn_result = low_level_tcn(slider_sample_orbit, low_level_tcn_progress_bar)
529
  with container2:
530
+ st.table(pd.DataFrame({'Model':"EPS + TCN", '30000 Time Steps (s)': [tcn_30000_time], '2000 Time Steps (s)': [tcn_2000_time], 'Total Time (s)': [tcn_total_time]}))
531
  if 'Midpoint with LSTM' in options_method:
532
  with container1:
533
  st.write('Midpoint LSTM Progress Bar')
utils/midpoint.py CHANGED
@@ -1,3 +1,4 @@
 
1
 
2
  class MidPoint():
3
 
@@ -91,74 +92,114 @@ class MidPoint():
91
 
92
  e = ht + hv + h1pn
93
 
94
- vnpx=px
95
- v1pnpx=4*px*((3*n)/8 - 1/8)*(px**2 + py**2 + pz**2) - (px*(n + 3) + (n*x*((px*x)/(x**2 + y**2 + z**2)**(1/2) + (py*y)/(x**2 + y**2 + z**2)**(1/2) + (pz*z)/(x**2 + y**2 + z**2)**(1/2)))/(x**2 + y**2 + z**2)**(1/2))/(x**2 + y**2 + z**2)**(1/2)
96
- vpx=vnpx+v1pnpx
97
-
98
- vnpy=py
99
- v1pnpy=4*py*((3*n)/8 - 1/8)*(px**2 + py**2 + pz**2) - (py*(n + 3) + (n*y*((px*x)/(x**2 + y**2 + z**2)**(1/2) + (py*y)/(x**2 + y**2 + z**2)**(1/2) + (pz*z)/(x**2 + y**2 + z**2)**(1/2)))/(x**2 + y**2 + z**2)**(1/2))/(x**2 + y**2 + z**2)**(1/2)
100
- vpy=vnpy+v1pnpy
101
-
102
- vnpz=pz
103
- v1pnpz=4*pz*((3*n)/8 - 1/8)*(px**2 + py**2 + pz**2) - (pz*(n + 3) + (n*z*((px*x)/(x**2 + y**2 + z**2)**(1/2) + (py*y)/(x**2 + y**2 + z**2)**(1/2) + (pz*z)/(x**2 + y**2 + z**2)**(1/2)))/(x**2 + y**2 + z**2)**(1/2))/(x**2 + y**2 + z**2)**(1/2)
104
- vpz=vnpz+v1pnpz
105
-
106
- vnx=x/(x**2 + y**2 + z**2)**(3/2)
107
- v1pnx=(x*((n*((px*x)/(x**2 + y**2 + z**2)**(1/2) + (py*y)/(x**2 + y**2 + z**2)**(1/2) + (pz*z)/(x**2 +y**2 + z**2)**(1/2))**2)/2 + ((n + 3)*(px**2 + py**2 + pz**2))/2))/(x**2 + y**2 + z**2)**(3/2) -(4*x)/(2*x**2 + 2*y**2 + 2*z**2)**2 + (n*((px*x)/(x**2 + y**2 + z**2)**(1/2) + (py*y)/(x**2 + y**2 + z**2)**(1/2) + (pz*z)/(x**2 + y**2 + z**2)**(1/2))*((px*x**2)/(x**2 + y**2 + z**2)**(3/2) -px/(x**2 + y**2 + z**2)**(1/2) + (py*x*y)/(x**2 + y**2 + z**2)**(3/2) + (pz*x*z)/(x**2 + y**2 +z**2)**(3/2)))/(x**2 + y**2 + z**2)**(1/2)
108
- vx=vnx+v1pnx
109
-
110
- vny=y/(x**2 + y**2 + z**2)**(3/2)
111
- v1pny=(y*((n*((px*x)/(x**2 + y**2 + z**2)**(1/2) + (py*y)/(x**2 + y**2 + z**2)**(1/2) + (pz*z)/(x**2 +y**2 + z**2)**(1/2))**2)/2 + ((n + 3)*(px**2 + py**2 + pz**2))/2))/(x**2 + y**2 + z**2)**(3/2) -(4*y)/(2*x**2 + 2*y**2 + 2*z**2)**2 + (n*((px*x)/(x**2 + y**2 + z**2)**(1/2) + (py*y)/(x**2 + y**2 + z**2)**(1/2) + (pz*z)/(x**2 + y**2 + z**2)**(1/2))*((py*y**2)/(x**2 + y**2 + z**2)**(3/2) -py/(x**2 + y**2 + z**2)**(1/2) + (px*x*y)/(x**2 + y**2 + z**2)**(3/2) + (pz*y*z)/(x**2 + y**2 +z**2)**(3/2)))/(x**2 + y**2 + z**2)**(1/2)
112
- vy=vny+v1pny
113
-
114
- vnz=z/(x**2 + y**2 + z**2)**(3/2)
115
- v1pnz=(z*((n*((px*x)/(x**2 + y**2 + z**2)**(1/2) + (py*y)/(x**2 + y**2 + z**2)**(1/2) + (pz*z)/(x**2 +y**2 + z**2)**(1/2))**2)/2 + ((n + 3)*(px**2 + py**2 + pz**2))/2))/(x**2 + y**2 + z**2)**(3/2) -(4*z)/(2*x**2 + 2*y**2 + 2*z**2)**2 + (n*((px*x)/(x**2 + y**2 + z**2)**(1/2) + (py*y)/(x**2 + y**2 + z**2)**(1/2) + (pz*z)/(x**2 + y**2 + z**2)**(1/2))*((pz*z**2)/(x**2 + y**2 + z**2)**(3/2) -pz/(x**2 + y**2 + z**2)**(1/2) + (px*x*z)/(x**2 + y**2 + z**2)**(3/2) + (py*y*z)/(x**2 + y**2 +z**2)**(3/2)))/(x**2 + y**2 + z**2)**(1/2)
116
- vz=vnz+v1pnz
117
-
118
- return vx,vy,vz,vpx,vpy,vpz,e
119
-
120
- def rejust(self, x, y, z, px, py, pz, xa, ya, za, pxa, pya, pza):
121
-
122
- x = (x + xa) / 2
123
- y = (y + ya) / 2
124
- z = (z + za) / 2
125
-
126
- px = (px + pxa) / 2
127
- py = (py + pya) / 2
128
- pz = (pz + pza) / 2
129
- xa = x
130
- ya = y
131
- za = z
132
- pxa = px
133
- pya = py
134
- pza = pz
135
-
136
- return x, y, z, px, py, pz, xa, ya, za, pxa, pya, pza
137
-
138
- def symplectic(self, h, x, y, z, px, py, pz, xa, ya, za, pxa, pya, pza, b):
139
-
140
- vxa, vya, vza, vpx, vpy, vpz, e = self.f(xa, ya, za, px, py, pz, b)
141
- x = x + h / 2 * vpx
142
- y = y + h / 2 * vpy
143
- z = z + h / 2 * vpz
144
- pxa = pxa - h / 2 * vxa
145
- pya = pya - h / 2 * vya
146
- pza = pza - h / 2 * vza
147
-
148
- vx, vy, vz, vpxa, vpya, vpza, e = self.f(x, y, z, pxa, pya, pza, b)
149
- xa = xa + h * vpxa
150
- ya = ya + h * vpya
151
- za = za + h * vpza
152
- px = px - h * vx
153
- py = py - h * vy
154
- pz = pz - h * vz
155
-
156
- vxa, vya, vza, vpx, vpy, vpz, e = self.f(xa, ya, za, px, py, pz, b)
157
- x = x + h / 2 * vpx
158
- y = y + h / 2 * vpy
159
- z = z + h / 2 * vpz
160
- pxa = pxa - h / 2 * vxa
161
- pya = pya - h / 2 * vya
162
- pza = pza - h / 2 * vza
163
-
164
- return x, y, z, px, py, pz, xa, ya, za, pxa, pya, pza
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
 
3
  class MidPoint():
4
 
 
92
 
93
  e = ht + hv + h1pn
94
 
95
+ vnpx = px
96
+ v1pnpx = 4 * px * ((3 * n) / 8 - 1 / 8) * (px ** 2 + py ** 2 + pz ** 2) - (px * (n + 3) + (n * x * (
97
+ (px * x) / (x ** 2 + y ** 2 + z ** 2) ** (1 / 2) + (py * y) / (x ** 2 + y ** 2 + z ** 2) ** (
98
+ 1 / 2) + (pz * z) / (x ** 2 + y ** 2 + z ** 2) ** (1 / 2))) / (x ** 2 + y ** 2 + z ** 2) ** (
99
+ 1 / 2)) / (
100
+ x ** 2 + y ** 2 + z ** 2) ** (1 / 2)
101
+ vpx = vnpx + v1pnpx
102
+
103
+ vnpy = py
104
+ v1pnpy = 4 * py * ((3 * n) / 8 - 1 / 8) * (px ** 2 + py ** 2 + pz ** 2) - (py * (n + 3) + (n * y * (
105
+ (px * x) / (x ** 2 + y ** 2 + z ** 2) ** (1 / 2) + (py * y) / (x ** 2 + y ** 2 + z ** 2) ** (
106
+ 1 / 2) + (pz * z) / (x ** 2 + y ** 2 + z ** 2) ** (1 / 2))) / (x ** 2 + y ** 2 + z ** 2) ** (
107
+ 1 / 2)) / (
108
+ x ** 2 + y ** 2 + z ** 2) ** (1 / 2)
109
+ vpy = vnpy + v1pnpy
110
+
111
+ vnpz = pz
112
+ v1pnpz = 4 * pz * ((3 * n) / 8 - 1 / 8) * (px ** 2 + py ** 2 + pz ** 2) - (pz * (n + 3) + (n * z * (
113
+ (px * x) / (x ** 2 + y ** 2 + z ** 2) ** (1 / 2) + (py * y) / (x ** 2 + y ** 2 + z ** 2) ** (
114
+ 1 / 2) + (pz * z) / (x ** 2 + y ** 2 + z ** 2) ** (1 / 2))) / (x ** 2 + y ** 2 + z ** 2) ** (
115
+ 1 / 2)) / (
116
+ x ** 2 + y ** 2 + z ** 2) ** (1 / 2)
117
+ vpz = vnpz + v1pnpz
118
+
119
+ vnx = x / (x ** 2 + y ** 2 + z ** 2) ** (3 / 2)
120
+ v1pnx = (x * ((n * (
121
+ (px * x) / (x ** 2 + y ** 2 + z ** 2) ** (1 / 2) + (py * y) / (x ** 2 + y ** 2 + z ** 2) ** (
122
+ 1 / 2) + (pz * z) / (x ** 2 + y ** 2 + z ** 2) ** (1 / 2)) ** 2) / 2 + (
123
+ (n + 3) * (px ** 2 + py ** 2 + pz ** 2)) / 2)) / (x ** 2 + y ** 2 + z ** 2) ** (
124
+ 3 / 2) - (4 * x) / (2 * x ** 2 + 2 * y ** 2 + 2 * z ** 2) ** 2 + (n * (
125
+ (px * x) / (x ** 2 + y ** 2 + z ** 2) ** (1 / 2) + (py * y) / (x ** 2 + y ** 2 + z ** 2) ** (
126
+ 1 / 2) + (pz * z) / (x ** 2 + y ** 2 + z ** 2) ** (1 / 2)) * ((px * x ** 2) / (
127
+ x ** 2 + y ** 2 + z ** 2) ** (3 / 2) - px / (x ** 2 + y ** 2 + z ** 2) ** (1 / 2) + (py * x * y) / (
128
+ x ** 2 + y ** 2 + z ** 2) ** (
129
+ 3 / 2) + (
130
+ pz * x * z) / (
131
+ x ** 2 + y ** 2 + z ** 2) ** (
132
+ 3 / 2))) / (
133
+ x ** 2 + y ** 2 + z ** 2) ** (1 / 2)
134
+ vx = vnx + v1pnx
135
+
136
+ vny = y / (x ** 2 + y ** 2 + z ** 2) ** (3 / 2)
137
+ v1pny = (y * ((n * (
138
+ (px * x) / (x ** 2 + y ** 2 + z ** 2) ** (1 / 2) + (py * y) / (x ** 2 + y ** 2 + z ** 2) ** (
139
+ 1 / 2) + (pz * z) / (x ** 2 + y ** 2 + z ** 2) ** (1 / 2)) ** 2) / 2 + (
140
+ (n + 3) * (px ** 2 + py ** 2 + pz ** 2)) / 2)) / (x ** 2 + y ** 2 + z ** 2) ** (
141
+ 3 / 2) - (4 * y) / (2 * x ** 2 + 2 * y ** 2 + 2 * z ** 2) ** 2 + (n * (
142
+ (px * x) / (x ** 2 + y ** 2 + z ** 2) ** (1 / 2) + (py * y) / (x ** 2 + y ** 2 + z ** 2) ** (
143
+ 1 / 2) + (pz * z) / (x ** 2 + y ** 2 + z ** 2) ** (1 / 2)) * ((py * y ** 2) / (
144
+ x ** 2 + y ** 2 + z ** 2) ** (3 / 2) - py / (x ** 2 + y ** 2 + z ** 2) ** (1 / 2) + (px * x * y) / (
145
+ x ** 2 + y ** 2 + z ** 2) ** (
146
+ 3 / 2) + (
147
+ pz * y * z) / (
148
+ x ** 2 + y ** 2 + z ** 2) ** (
149
+ 3 / 2))) / (
150
+ x ** 2 + y ** 2 + z ** 2) ** (1 / 2)
151
+ vy = vny + v1pny
152
+
153
+ vnz = z / (x ** 2 + y ** 2 + z ** 2) ** (3 / 2)
154
+ v1pnz = (z * ((n * (
155
+ (px * x) / (x ** 2 + y ** 2 + z ** 2) ** (1 / 2) + (py * y) / (x ** 2 + y ** 2 + z ** 2) ** (
156
+ 1 / 2) + (pz * z) / (x ** 2 + y ** 2 + z ** 2) ** (1 / 2)) ** 2) / 2 + (
157
+ (n + 3) * (px ** 2 + py ** 2 + pz ** 2)) / 2)) / (x ** 2 + y ** 2 + z ** 2) ** (
158
+ 3 / 2) - (4 * z) / (2 * x ** 2 + 2 * y ** 2 + 2 * z ** 2) ** 2 + (n * (
159
+ (px * x) / (x ** 2 + y ** 2 + z ** 2) ** (1 / 2) + (py * y) / (x ** 2 + y ** 2 + z ** 2) ** (
160
+ 1 / 2) + (pz * z) / (x ** 2 + y ** 2 + z ** 2) ** (1 / 2)) * ((pz * z ** 2) / (
161
+ x ** 2 + y ** 2 + z ** 2) ** (3 / 2) - pz / (x ** 2 + y ** 2 + z ** 2) ** (1 / 2) + (px * x * z) / (
162
+ x ** 2 + y ** 2 + z ** 2) ** (
163
+ 3 / 2) + (
164
+ py * y * z) / (
165
+ x ** 2 + y ** 2 + z ** 2) ** (
166
+ 3 / 2))) / (
167
+ x ** 2 + y ** 2 + z ** 2) ** (1 / 2)
168
+ vz = vnz + v1pnz
169
+ return vx, vy, vz, vpx, vpy, vpz, e
170
+
171
+ def implecitsymplectic(self, h, x, y, z, px, py, pz, b):
172
+
173
+ x1 = x
174
+ y1 = y
175
+ z1 = z
176
+ px1 = px
177
+ py1 = py
178
+ pz1 = pz
179
+ num = 0
180
+ d = 1.1
181
+ while (d > 1e-16 and num < 1000):
182
+ px2 = px
183
+ py2 = py
184
+ pz2 = pz
185
+ x2 = x
186
+ y2 = y
187
+ z2 = z
188
+ x = (x1 + x) / 2
189
+ y = (y1 + y) / 2
190
+ z = (z1 + z) / 2
191
+ px = (px1 + px) / 2
192
+ py = (py1 + py) / 2
193
+ pz = (pz1 + pz) / 2
194
+ vx, vy, vz, vpx, vpy, vpz, e = self.f(x, y, z, px, py, pz, b)
195
+ x = x1 + h * vpx
196
+ y = y1 + h * vpy
197
+ z = z1 + h * vpz
198
+ px = px1 - h * vx
199
+ py = py1 - h * vy
200
+ pz = pz1 - h * vz
201
+ d = np.sqrt(np.abs(x - x2) + np.abs(y - y2) + np.abs(z - z2) + np.abs(px - px2) + np.abs(py - py2) + np.abs(
202
+ pz - pz2))
203
+ num += 1
204
+ #print(num, d)
205
+ return x, y, z, px, py, pz