提交 bd901895 编写于 作者: 三月三net's avatar 三月三net

Python超人-宇宙模拟器

上级 2342b5c6
import numpy as np
from common.consts import AU
from sim_scenes.solar_system.halley_comet_lib import HalleyCometParams
from sim_lab.halley_comet_research_calc import calc_simulator
def target_function(x, y, z):
params = HalleyCometParams(
start_time='1982-09-24 00:00:00',
# init_velocity=[-2.836 + (x / 1000), 4.705 + (y / 1000), 8.85 + (z / 1000)],
init_velocity=[x, y, z],
init_position=[0, -5 * AU, -10 * AU]
)
return calc_simulator(params)
def loss_function(a, b, c):
# 0.586AU, 35.1AU, 13817天
target_a = 0.586
target_b = 35.1
target_c = 13817.0
loss_a = (a - target_a) ** 2
loss_b = (b - target_b) ** 2
loss_c = (c - target_c) ** 2
total_loss = loss_a + loss_b + loss_c
return total_loss
def compute_gradients(x, y, z, epsilon=1e-5):
# 数值方法计算梯度
grad_x = (loss_function(*target_function(x + epsilon, y, z)) - loss_function(*target_function(x, y, z))) / epsilon
grad_y = (loss_function(*target_function(x, y + epsilon, z)) - loss_function(*target_function(x, y, z))) / epsilon
grad_z = (loss_function(*target_function(x, y, z + epsilon)) - loss_function(*target_function(x, y, z))) / epsilon
return grad_x, grad_y, grad_z
def adaptive_learning_rate(iteration):
# 自适应学习率调整
return 0.01 / np.sqrt(iteration + 1)
def gradient_descent(init_velocity, iterations):
x, y, z = init_velocity
for i in range(1, iterations + 1): # 从1开始,避免除以0
a, b, c = target_function(x, y, z)
loss = loss_function(a, b, c)
# 计算梯度
grad_x, grad_y, grad_z = compute_gradients(x, y, z)
# 自适应学习率调整
learning_rate = adaptive_learning_rate(i)
# 更新参数
x = x - learning_rate * grad_x
y = y - learning_rate * grad_y
z = z - learning_rate * grad_z
# 打印当前迭代的结果
if i % 100 == 0:
print(f"Iteration {i}: Loss = {loss}, a = {a}, b = {b}, c = {c}")
return x, y, z
# 设置初始值
init_velocity = [-2.816, 4.725, 8.87] # 请替换为实际的初始值
iterations = 1000
# 运行梯度下降算法
final_x, final_y, final_z = gradient_descent(init_velocity, iterations)
# 打印最终结果
final_a, final_b, final_c = target_function(final_x, final_y, final_z)
print(f"Final Result: a = {final_a}, b = {final_b}, c = {final_c}")
Index:1 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
WARNING: TimeDeltaMissingUnitWarning: Numerical value without unit or explicit format passed to TimeDelta, assuming days [astropy.time.core]
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.856, 4.6850000000000005, 8.83], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.775 AU, 近日点:0.591 AU, 天数: 13542
Index:2 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.856, 4.6850000000000005, 8.84], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.900 AU, 近日点:0.591 AU, 天数: 13609
Index:3 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.856, 4.6850000000000005, 8.85], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.025 AU, 近日点:0.592 AU, 天数: 13682
Index:4 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.856, 4.6850000000000005, 8.86], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.152 AU, 近日点:0.593 AU, 天数: 13754
Index:5 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.856, 4.6850000000000005, 8.87], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.279 AU, 近日点:0.594 AU, 天数: 13827
Index:6 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.856, 4.695, 8.83], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.840 AU, 近日点:0.591 AU, 天数: 13578
Index:7 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.856, 4.695, 8.84], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.966 AU, 近日点:0.592 AU, 天数: 13645
Index:8 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.856, 4.695, 8.85], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.091 AU, 近日点:0.592 AU, 天数: 13718
Index:9 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.856, 4.695, 8.86], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.218 AU, 近日点:0.593 AU, 天数: 13791
Index:10 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.856, 4.695, 8.87], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.346 AU, 近日点:0.594 AU, 天数: 13876
Index:11 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.856, 4.705, 8.83], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.907 AU, 近日点:0.592 AU, 天数: 13615
Index:12 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.856, 4.705, 8.84], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.032 AU, 近日点:0.592 AU, 天数: 13688
Index:13 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.856, 4.705, 8.85], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.158 AU, 近日点:0.593 AU, 天数: 13761
Index:14 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.856, 4.705, 8.86], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.285 AU, 近日点:0.594 AU, 天数: 13834
Index:15 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.856, 4.705, 8.87], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.414 AU, 近日点:0.593 AU, 天数: 13913
Index:16 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.856, 4.715, 8.83], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.973 AU, 近日点:0.592 AU, 天数: 13651
Index:17 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.856, 4.715, 8.84], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.099 AU, 近日点:0.593 AU, 天数: 13724
Index:18 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.856, 4.715, 8.85], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.225 AU, 近日点:0.594 AU, 天数: 13797
Index:19 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.856, 4.715, 8.86], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.353 AU, 近日点:0.595 AU, 天数: 13876
Index:20 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.856, 4.715, 8.87], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.482 AU, 近日点:0.593 AU, 天数: 13955
Index:21 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.856, 4.725, 8.83], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.040 AU, 近日点:0.593 AU, 天数: 13694
Index:22 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.856, 4.725, 8.84], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.165 AU, 近日点:0.594 AU, 天数: 13761
Index:23 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.856, 4.725, 8.85], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.293 AU, 近日点:0.595 AU, 天数: 13840
Index:24 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.856, 4.725, 8.86], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.421 AU, 近日点:0.594 AU, 天数: 13919
Index:25 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.856, 4.725, 8.87], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.551 AU, 近日点:0.593 AU, 天数: 13998
Index:26 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.8459999999999996, 4.6850000000000005, 8.83], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.740 AU, 近日点:0.587 AU, 天数: 13517
Index:27 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.8459999999999996, 4.6850000000000005, 8.84], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.864 AU, 近日点:0.588 AU, 天数: 13584
Index:28 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.8459999999999996, 4.6850000000000005, 8.85], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.990 AU, 近日点:0.588 AU, 天数: 13657
Index:29 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.8459999999999996, 4.6850000000000005, 8.86], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.115 AU, 近日点:0.590 AU, 天数: 13730
Index:30 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.8459999999999996, 4.6850000000000005, 8.87], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.243 AU, 近日点:0.589 AU, 天数: 13809
Index:31 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.8459999999999996, 4.695, 8.83], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.805 AU, 近日点:0.588 AU, 天数: 13554
Index:32 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.8459999999999996, 4.695, 8.84], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.930 AU, 近日点:0.588 AU, 天数: 13627
Index:33 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.8459999999999996, 4.695, 8.85], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.055 AU, 近日点:0.589 AU, 天数: 13694
Index:34 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.8459999999999996, 4.695, 8.86], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.182 AU, 近日点:0.590 AU, 天数: 13773
Index:35 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.8459999999999996, 4.695, 8.87], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.309 AU, 近日点:0.589 AU, 天数: 13852
Index:36 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.8459999999999996, 4.705, 8.83], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.871 AU, 近日点:0.588 AU, 天数: 13590
Index:37 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.8459999999999996, 4.705, 8.84], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.996 AU, 近日点:0.589 AU, 天数: 13663
Index:38 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.8459999999999996, 4.705, 8.85], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.122 AU, 近日点:0.590 AU, 天数: 13736
Index:39 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.8459999999999996, 4.705, 8.86], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.249 AU, 近日点:0.590 AU, 天数: 13815
Index:40 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.8459999999999996, 4.705, 8.87], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.378 AU, 近日点:0.588 AU, 天数: 13888
Index:41 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.8459999999999996, 4.715, 8.83], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.937 AU, 近日点:0.589 AU, 天数: 13627
Index:42 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.8459999999999996, 4.715, 8.84], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.063 AU, 近日点:0.590 AU, 天数: 13700
Index:43 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.8459999999999996, 4.715, 8.85], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.189 AU, 近日点:0.591 AU, 天数: 13773
Index:44 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.8459999999999996, 4.715, 8.86], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.317 AU, 近日点:0.590 AU, 天数: 13858
Index:45 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.8459999999999996, 4.715, 8.87], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.445 AU, 近日点:0.588 AU, 天数: 13931
Index:46 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.8459999999999996, 4.725, 8.83], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.004 AU, 近日点:0.590 AU, 天数: 13669
Index:47 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.8459999999999996, 4.725, 8.84], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.129 AU, 近日点:0.591 AU, 天数: 13742
Index:48 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.8459999999999996, 4.725, 8.85], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.256 AU, 近日点:0.591 AU, 天数: 13821
Index:49 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.8459999999999996, 4.725, 8.86], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.384 AU, 近日点:0.589 AU, 天数: 13894
Index:50 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.8459999999999996, 4.725, 8.87], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.514 AU, 近日点:0.588 AU, 天数: 13967
Index:51 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.836, 4.6850000000000005, 8.83], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.705 AU, 近日点:0.584 AU, 天数: 13493
Index:52 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.836, 4.6850000000000005, 8.84], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.829 AU, 近日点:0.584 AU, 天数: 13566
Index:53 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.836, 4.6850000000000005, 8.85], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.953 AU, 近日点:0.585 AU, 天数: 13633
Index:54 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.836, 4.6850000000000005, 8.86], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.079 AU, 近日点:0.585 AU, 天数: 13712
Index:55 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.836, 4.6850000000000005, 8.87], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.206 AU, 近日点:0.584 AU, 天数: 13785
Index:56 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.836, 4.695, 8.83], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.770 AU, 近日点:0.584 AU, 天数: 13530
Index:57 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.836, 4.695, 8.84], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.894 AU, 近日点:0.585 AU, 天数: 13602
Index:58 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.836, 4.695, 8.85], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.020 AU, 近日点:0.586 AU, 天数: 13675
Index:59 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.836, 4.695, 8.86], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.146 AU, 近日点:0.585 AU, 天数: 13748
Index:60 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.836, 4.695, 8.87], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.274 AU, 近日点:0.584 AU, 天数: 13827
Index:61 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.836, 4.705, 8.83], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.836 AU, 近日点:0.585 AU, 天数: 13566
Index:62 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.836, 4.705, 8.84], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.960 AU, 近日点:0.586 AU, 天数: 13639
Index:63 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.836, 4.705, 8.85], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.086 AU, 近日点:0.586 AU, 天数: 13718
Index:64 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.836, 4.705, 8.86], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.213 AU, 近日点:0.585 AU, 天数: 13791
Index:65 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.836, 4.705, 8.87], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.341 AU, 近日点:0.584 AU, 天数: 13864
Index:66 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.836, 4.715, 8.83], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.901 AU, 近日点:0.586 AU, 天数: 13609
Index:67 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.836, 4.715, 8.84], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.027 AU, 近日点:0.587 AU, 天数: 13675
Index:68 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.836, 4.715, 8.85], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.153 AU, 近日点:0.586 AU, 天数: 13754
Index:69 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.836, 4.715, 8.86], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.281 AU, 近日点:0.585 AU, 天数: 13827
Index:70 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.836, 4.715, 8.87], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.409 AU, 近日点:0.584 AU, 天数: 13907
Index:71 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.836, 4.725, 8.83], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.969 AU, 近日点:0.587 AU, 天数: 13645
Index:72 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.836, 4.725, 8.84], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.094 AU, 近日点:0.588 AU, 天数: 13724
Index:73 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.836, 4.725, 8.85], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.221 AU, 近日点:0.586 AU, 天数: 13797
Index:74 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.836, 4.725, 8.86], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.348 AU, 近日点:0.585 AU, 天数: 13870
Index:75 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.836, 4.725, 8.87], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.478 AU, 近日点:0.584 AU, 天数: 13949
Index:76 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.826, 4.6850000000000005, 8.83], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.670 AU, 近日点:0.580 AU, 天数: 13469
Index:77 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.826, 4.6850000000000005, 8.84], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.794 AU, 近日点:0.581 AU, 天数: 13542
Index:78 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.826, 4.6850000000000005, 8.85], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.918 AU, 近日点:0.582 AU, 天数: 13615
Index:79 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.826, 4.6850000000000005, 8.86], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.044 AU, 近日点:0.580 AU, 天数: 13688
Index:80 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.826, 4.6850000000000005, 8.87], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.171 AU, 近日点:0.579 AU, 天数: 13761
Index:81 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.826, 4.695, 8.83], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.735 AU, 近日点:0.581 AU, 天数: 13505
Index:82 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.826, 4.695, 8.84], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.859 AU, 近日点:0.582 AU, 天数: 13578
Index:83 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.826, 4.695, 8.85], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.984 AU, 近日点:0.582 AU, 天数: 13657
Index:84 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.826, 4.695, 8.86], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.110 AU, 近日点:0.580 AU, 天数: 13724
Index:85 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.826, 4.695, 8.87], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.237 AU, 近日点:0.579 AU, 天数: 13803
Index:86 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.826, 4.705, 8.83], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.801 AU, 近日点:0.582 AU, 天数: 13548
Index:87 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.826, 4.705, 8.84], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.924 AU, 近日点:0.583 AU, 天数: 13615
Index:88 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.826, 4.705, 8.85], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.051 AU, 近日点:0.581 AU, 天数: 13694
Index:89 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.826, 4.705, 8.86], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.177 AU, 近日点:0.580 AU, 天数: 13767
Index:90 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.826, 4.705, 8.87], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.305 AU, 近日点:0.579 AU, 天数: 13840
Index:91 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.826, 4.715, 8.83], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.867 AU, 近日点:0.583 AU, 天数: 13584
Index:92 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.826, 4.715, 8.84], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.992 AU, 近日点:0.583 AU, 天数: 13657
Index:93 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.826, 4.715, 8.85], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.117 AU, 近日点:0.581 AU, 天数: 13730
Index:94 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.826, 4.715, 8.86], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.244 AU, 近日点:0.580 AU, 天数: 13803
Index:95 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.826, 4.715, 8.87], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.373 AU, 近日点:0.579 AU, 天数: 13882
Index:96 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.826, 4.725, 8.83], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.933 AU, 近日点:0.584 AU, 天数: 13621
Index:97 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.826, 4.725, 8.84], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.058 AU, 近日点:0.582 AU, 天数: 13700
Index:98 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.826, 4.725, 8.85], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.184 AU, 近日点:0.581 AU, 天数: 13773
Index:99 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.826, 4.725, 8.86], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.313 AU, 近日点:0.580 AU, 天数: 13846
Index:100 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.826, 4.725, 8.87], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.440 AU, 近日点:0.579 AU, 天数: 13919
Index:101 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.816, 4.6850000000000005, 8.83], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.636 AU, 近日点:0.577 AU, 天数: 13450
Index:102 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.816, 4.6850000000000005, 8.84], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.759 AU, 近日点:0.578 AU, 天数: 13517
Index:103 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.816, 4.6850000000000005, 8.85], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.883 AU, 近日点:0.577 AU, 天数: 13596
Index:104 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.816, 4.6850000000000005, 8.86], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.009 AU, 近日点:0.576 AU, 天数: 13663
Index:105 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.816, 4.6850000000000005, 8.87], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.134 AU, 近日点:0.575 AU, 天数: 13736
Index:106 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.816, 4.695, 8.83], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.701 AU, 近日点:0.578 AU, 天数: 13487
Index:107 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.816, 4.695, 8.84], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.824 AU, 近日点:0.578 AU, 天数: 13560
Index:108 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.816, 4.695, 8.85], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.949 AU, 近日点:0.577 AU, 天数: 13633
Index:109 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.816, 4.695, 8.86], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.074 AU, 近日点:0.575 AU, 天数: 13706
Index:110 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.816, 4.695, 8.87], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.202 AU, 近日点:0.575 AU, 天数: 13779
Index:111 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.816, 4.705, 8.83], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.765 AU, 近日点:0.579 AU, 天数: 13523
Index:112 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.816, 4.705, 8.84], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.890 AU, 近日点:0.578 AU, 天数: 13596
Index:113 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.816, 4.705, 8.85], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.015 AU, 近日点:0.577 AU, 天数: 13669
Index:114 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.816, 4.705, 8.86], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.142 AU, 近日点:0.575 AU, 天数: 13742
Index:115 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.816, 4.705, 8.87], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.269 AU, 近日点:0.575 AU, 天数: 13815
Index:116 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.816, 4.715, 8.83], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.831 AU, 近日点:0.579 AU, 天数: 13566
Index:117 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.816, 4.715, 8.84], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.956 AU, 近日点:0.578 AU, 天数: 13639
Index:118 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.816, 4.715, 8.85], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.083 AU, 近日点:0.576 AU, 天数: 13712
Index:119 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.816, 4.715, 8.86], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.208 AU, 近日点:0.575 AU, 天数: 13785
Index:120 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.816, 4.715, 8.87], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.337 AU, 近日点:0.575 AU, 天数: 13858
Index:121 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.816, 4.725, 8.83], init_position=[0, -747989353.5, -1495978707.0])
远日点:34.898 AU, 近日点:0.579 AU, 天数: 13602
Index:122 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.816, 4.725, 8.84], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.023 AU, 近日点:0.578 AU, 天数: 13675
Index:123 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.816, 4.725, 8.85], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.149 AU, 近日点:0.576 AU, 天数: 13748
Index:124 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.816, 4.725, 8.86], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.276 AU, 近日点:0.576 AU, 天数: 13821
Index:125 ---------------------------
北京时间: 1982-09-24 00:00:00+08:00
HalleyCometParams(start_time='1982-09-24 00:00:00', init_velocity=[-2.816, 4.725, 8.87], init_position=[0, -747989353.5, -1495978707.0])
远日点:35.405 AU, 近日点:0.575 AU, 天数: 13894
Process finished with exit code 0
import numpy as np
from common.consts import AU
from sim_scenes.solar_system.halley_comet_lib import HalleyCometParams
from sim_lab.halley_comet_research_calc import calc_simulator
def f(x, y, z):
params = HalleyCometParams(
start_time='1982-09-24 00:00:00',
# init_velocity=[-2.836 + (x / 1000), 4.705 + (y / 1000), 8.85 + (z / 1000)],
init_velocity=[x, y, z],
init_position=[0, -5 * AU, -10 * AU]
)
return calc_simulator(params)
from scipy.optimize import minimize
import numpy as np
# 定义损失函数
def loss_function(x, target):
# 定义损失函数,这里使用简单的平方差,并调整权重
weights = np.array([10, 1, 0.1]) # 调整权重,使近日点和远日点的偏差对最终结果的影响更大
return np.sum(weights * (x - target) ** 2)
# 定义目标函数
def target_function(v):
vx, vy, vz = v
result = f(vx, vy, vz)
# 计算损失函数,这里假设目标是 [0.586, 35.1, 13817]
target = np.array([0.586, 35.1, 13817])
loss = loss_function(result, target)
return loss
# 设置初始速度
initial_velocity = [-2.816, 4.725, 8.87] # 请替换为实际的初始值
# 设置初始速度时添加随机扰动
initial_velocity = [-2.816 + np.random.uniform(-1, 1), 4.725 + np.random.uniform(-1, 1), 8.87 + np.random.uniform(-1, 1)]
# 运行优化算法
result = minimize(target_function, initial_velocity, method='trust-constr', options={'maxiter': 10000, 'disp': True},
bounds=[(-100, 100), (-100, 100), (-100, 100)])
# 打印最终结果
final_velocity = result.x
print(f"Optimal Velocity: {final_velocity}")
#
# # # 定义目标函数
# # def f(vx, vy, vz):
# # # 这里需要根据你的实际情况定义哈雷彗星轨道的计算
# # # 返回近日点距离(单位:AU)、远日点距离(单位:AU)、以及哈雷彗星近日点到远日点花了多长时间(单位:天)
# # # 这里使用一个简单的示例,你需要根据实际情况修改
# # return np.array([0.586, 35.1, 13817])
#
# # 定义损失函数
# def loss_function(x, target):
# # 定义损失函数,这里使用简单的平方差
# return (x - target) ** 2
#
#
# # 定义目标函数
# def target_function(v):
# vx, vy, vz = v
# result = f(vx, vy, vz)
# # 计算损失函数,这里假设目标是 [0.586, 35.1, 13817]
# target = np.array([0.586, 35.1, 13817])
# loss = np.sum([loss_function(result[i], target[i]) for i in range(len(result))])
# return loss
#
#
# # 设置初始速度
# initial_velocity = [-2.816, 4.725, 8.87] # 请替换为实际的初始值
#
# # 运行优化算法
# # result = minimize(target_function, initial_velocity, method='BFGS',
# # options={'maxiter': 1000, 'disp': True}) # 使用BFGS优化算法,你可以尝试其他算法
#
# # 运行优化算法
# # result = minimize(target_function, initial_velocity, method='L-BFGS-B', options={'maxiter': 10000, 'disp': True})
#
# # 运行优化算法
# result = minimize(target_function, initial_velocity, method='trust-constr', options={'maxiter': 10000, 'disp': True},
# bounds=[(-100, 100), (-100, 100), (-100, 100)])
#
# # 打印最终结果
# final_velocity = result.x
# print(f"Optimal Velocity: {final_velocity}")
import numpy as np
import matplotlib.pyplot as plt
from common.consts import AU
from sim_scenes.solar_system.halley_comet_lib import HalleyCometParams
from sim_lab.halley_comet_research_calc import calc_simulator, target_function
# 支持中文
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
def plt_draw_3d():
# idx = 0
r = 1
xs = []
ys = []
zs = []
a_s = []
b_s = []
c_s = []
for xi in range(-r, r + 1):
for yi in range(-r, r + 1):
for zi in range(-r, r + 1):
x, y, z = -2.47 + (xi / 100), 5.1 + (yi / 100), 8.73 + (zi / 100)
xs.append(x)
ys.append(y)
zs.append(z)
a, b, c = target_function(x, y, z)
# a,b,c = x,y,z
a_s.append(a)
b_s.append(b)
c_s.append(c)
# 把 x y z 和 结果 a b c 进行可视化,完成代码,方便查看 x y z 和 结果 a b c 之间的关系
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot(xs, ys, zs, label="IN")
ax.plot(a_s, b_s, c_s, label="OUT")
# ax.scatter(xs, ys, zs, c='r', marker='o') # 绘制三维散点图,使用红色标记,可以根据需要更改颜色和标记类型
# ax.scatter(a_s, b_s, c_s, c='b', marker='o') # 在同样的图上,使用蓝色标记绘制函数的结果点
ax.legend()
plt.show()
import matplotlib.pyplot as plt
def plot_twin(t, _y1, _y2, _y3, xlabel, _ylabel1, _ylabel2, _ylabel3):
fig, ax1 = plt.subplots()
color = 'tab:blue'
ax1.set_xlabel(xlabel)
ax1.set_ylabel(_ylabel1, color=color)
ax1.plot(t, _y1, color=color)
ax1.tick_params(axis='y', labelcolor=color)
ax2 = ax1.twinx() # 创建共用x轴的第二个y轴
color = 'tab:red'
ax2.set_ylabel(_ylabel2, color=color)
ax2.plot(t, _y2, color=color)
ax2.tick_params(axis='y', labelcolor=color)
ax3 = ax1.twinx() # 创建共用x轴的第二个y轴
color = 'tab:green'
ax3.set_ylabel(_ylabel3, color=color)
ax3.plot(t, _y3, color=color)
ax3.tick_params(axis='y', labelcolor=color)
# fig.tight_layout()
plt.show()
def plt_draw_2d():
import numpy as np
t = np.array([1, 2, 3])
# 创建模拟数据
data1 = np.array([35.032, 35.033, 35.034])
data2 = np.array([0.477, 0.477, 0.477])
data3 = np.array([13615, 13615, 13615])
plot_twin(t, data1, data2, data3, 'exp', 'sine', 'year')
# target_function(-2.835, 4.71, 8.86) # 远日点:35.243 AU, 近日点:0.584 AU, 天数: 13809
# target_function(-2.835, 4.73, 8.85) # OK 远日点:35.251 AU, 近日点:0.585 AU, 天数: 13815
R = 3
X, Y, Z = -2.835, 4.73, 8.85
X, Y, Z = -2.835, 4.72, 8.847
# [-2.816, 4.725, 8.84]
def plt_draw_x():
x_s = []
a_s = []
b_s = []
c_s = []
for x in range(-R, R + 1):
x, y, z = X + (x / 100), Y, Z
x_s.append(x)
a, b, c = target_function(x, y, z)
a_s.append(a)
b_s.append(b)
c_s.append(c)
plot_twin(x_s, a_s, b_s, c_s, 'X', '远日点', '近日点', '天数')
def plt_draw_y():
y_s = []
a_s = []
b_s = []
c_s = []
for y in range(-R, R + 1):
x, y, z = X, Y + (y / 100), Z
y_s.append(y)
a, b, c = target_function(x, y, z)
a_s.append(a)
b_s.append(b)
c_s.append(c)
plot_twin(y_s, a_s, b_s, c_s, 'Y', '远日点', '近日点', '天数')
def plt_draw_z():
z_s = []
a_s = []
b_s = []
c_s = []
for z in range(-R, R + 1):
x, y, z = X, Y, Z + (z / 100)
z_s.append(z)
a, b, c = target_function(x, y, z)
a_s.append(a)
b_s.append(b)
c_s.append(c)
plot_twin(z_s, a_s, b_s, c_s, 'Z', '远日点', '近日点', '天数')
if __name__ == '__main__':
plt_draw_x()
plt_draw_y()
plt_draw_z()
...@@ -5,7 +5,18 @@ ...@@ -5,7 +5,18 @@
# date :2023-11-16 # date :2023-11-16
# link :https://gitcode.net/pythoncr/ # link :https://gitcode.net/pythoncr/
# python_version :3.9 # python_version :3.9
# ChatGPT
# ============================================================================== # ==============================================================================
"""
我把我的详细需求写给你,你帮我分析用什么方法。我要计算哈雷彗星在太阳系中某个位置上面的初始速度(vx, vy, vz) ,
通过万有引力的计算,哈雷彗星会在一个轨道上有2个点,近日点和远日点。哈雷彗星从近日点和远日点花了多长时间。
我现在定义了一个函数,f(vx,vy,vz) 参数就是初始速度(vx, vy, vz),
这个函数f返回3个值,分别是 近日点距离(单位:AU)、远日点距离(单位:AU)、以及哈雷彗星近日点到远日点花了多长时间(单位:天)。
我现在就是希望如果函数f返回值是 0.586AU, 35.1AU, 13817天,那么 vx,vy,vz的值是多少? 以上的需求,我用什么算法可以实现。
"""
import threading
from bodies import Body, Sun, Earth, Moon from bodies import Body, Sun, Earth, Moon
from objs import Obj, Satellite, Satellite2 from objs import Obj, Satellite, Satellite2
from common.consts import SECONDS_PER_HOUR, SECONDS_PER_DAY, SECONDS_PER_WEEK, SECONDS_PER_MONTH from common.consts import SECONDS_PER_HOUR, SECONDS_PER_DAY, SECONDS_PER_WEEK, SECONDS_PER_MONTH
...@@ -110,6 +121,8 @@ def calc_simulator(params): ...@@ -110,6 +121,8 @@ def calc_simulator(params):
sim.total_times = 0 sim.total_times = 0
sim.build() sim.build()
sim.result = None
def on_ready(context: CalcContext): def on_ready(context: CalcContext):
# for body in sim.bodies: # for body in sim.bodies:
# body.reset() # body.reset()
...@@ -198,8 +211,8 @@ def calc_simulator(params): ...@@ -198,8 +211,8 @@ def calc_simulator(params):
2023年12月9日 - 1986年2月9日 = 13817 2023年12月9日 - 1986年2月9日 = 13817
35.1AU 0.586AU 35.1AU 0.586AU
""" """
if abs(comet_peri - 0.586) < 0.01 and abs(comet_aphel - 35.1) < 0.1 and (diff_days - 13817) < 2: if abs(comet_peri - 0.586) < 0.01 and abs(comet_aphel - 35.1) < 0.1 and abs(diff_days - 13817) < 2:
print("OK ......",comet_peri,comet_aphel,diff_days) print("OK ......", comet_peri, comet_aphel, diff_days)
# print("year days:", time_data.years, time_data.days) # print("year days:", time_data.years, time_data.days)
# print("远日点: %.3f AU(%s)" % (sim.comet_aphel / AU, sim.comet_aphel_dt)) # print("远日点: %.3f AU(%s)" % (sim.comet_aphel / AU, sim.comet_aphel_dt))
# print("近日点: %.3f AU(%s)" % (sim.comet_peri / AU, sim.comet_peri_dt)) # print("近日点: %.3f AU(%s)" % (sim.comet_peri / AU, sim.comet_peri_dt))
...@@ -207,9 +220,14 @@ def calc_simulator(params): ...@@ -207,9 +220,14 @@ def calc_simulator(params):
# print("远\近日天数: %i 天 " % (sim.comet_aphel_dt[2] - sim.comet_peri_dt[2])) # print("远\近日天数: %i 天 " % (sim.comet_aphel_dt[2] - sim.comet_peri_dt[2]))
def on_finished(context: CalcContext): def on_finished(context: CalcContext):
global result
# print("on_finished", context) # print("on_finished", context)
time_data = context.get_param("time_data") time_data = context.get_param("time_data")
log(time_data) log(time_data)
comet_aphel = sim.comet_aphel / AU
comet_peri = sim.comet_peri / AU
diff_days = sim.comet_aphel_dt[2] - sim.comet_peri_dt[2]
sim.result = (comet_aphel, comet_peri, float(diff_days))
CalcSimulator.on_ready_subscription(on_ready) CalcSimulator.on_ready_subscription(on_ready)
CalcSimulator.on_after_evolve_subscription(after_evolve) CalcSimulator.on_after_evolve_subscription(after_evolve)
...@@ -218,13 +236,58 @@ def calc_simulator(params): ...@@ -218,13 +236,58 @@ def calc_simulator(params):
calc_run(sim.bodies, SECONDS_PER_YEAR, evolve_next=evolve_next) calc_run(sim.bodies, SECONDS_PER_YEAR, evolve_next=evolve_next)
return sim.result
if __name__ == '__main__':
def target_function(x, y, z):
params = HalleyCometParams( params = HalleyCometParams(
start_time='1982-09-24 00:00:00', start_time='1982-09-24 00:00:00',
init_velocity=[-2.836, 4.705, 8.85], # init_velocity=[-2.836 + (x / 1000), 4.705 + (y / 1000), 8.85 + (z / 1000)],
init_velocity=[x, y, z],
init_position=[0, -5 * AU, -10 * AU] init_position=[0, -5 * AU, -10 * AU]
) )
return calc_simulator(params)
if __name__ == '__main__':
pass
# 2023年12月9日 - 1986年2月9日 = 13817
# 35.1AU 0.586AU
# target_function(-2.836, 4.705, 8.85)
# target_function(-2.816, 4.725, 8.86) # 远日点:35.276 AU, 近日点:0.576 AU, 天数: 13821
# target_function(-2.816, 4.725, 8.855) # 远日点:35.212 AU, 近日点:0.576 AU, 天数: 13785
# target_function(-2.816, 4.725, 8.857) # 远日点:35.237 AU, 近日点:0.576 AU, 天数: 13797
# target_function(-2.816, 4.725, 8.858) # 远日点:35.251 AU, 近日点:0.576 AU, 天数: 13809
# target_function(-2.81, 4.725, 8.858) # 远日点:35.230 AU, 近日点:0.573 AU, 天数: 13791
# target_function(-2.81, 4.735, 8.858) # 远日点:35.297 AU, 近日点:0.573 AU, 天数: 13834
# target_function(-2.81, 4.73, 8.858) # 远日点:35.264 AU, 近日点:0.573 AU, 天数: 13815
# target_function(-2.820, 4.73, 8.858) # 远日点:35.298 AU, 近日点:0.578 AU, 天数: 13834
# target_function(-2.820, 4.73, 8.85) # 远日点:35.196 AU, 近日点:0.578 AU, 天数: 13779
# target_function(-2.825, 4.73, 8.85) # 远日点:35.215 AU, 近日点:0.581 AU, 天数: 13791
# target_function(-2.825, 4.73, 8.848) # 远日点:35.190 AU, 近日点:0.581 AU, 天数: 13773
# x, y, z => a, b, c
# x=a,b,c
# y=a,c
# z=a,c
# target_function(-2.835, 4.72, 8.847) # 远日点:35.144 AU, 近日点:0.586 AU, 天数: 13748
# target_function(-2.835, 4.71, 8.86) # 远日点:35.243 AU, 近日点:0.584 AU, 天数: 13809
# target_function(-2.835, 4.73, 8.85) # OK 远日点:35.251 AU, 近日点:0.585 AU, 天数: 13815
a, b, c = target_function(-2.47, 5.13, 8.73)
# [-2.5, 5.02, 8.763] 远日点:35.032 AU, 近日点:0.477 AU, 天数: 13615
# [-2.835, 4.81, 8.8] 远日点:35.161 AU, 近日点:0.591 AU, 天数: 13754
# [-2.835, 4.8, 8.81] 远日点:35.220 AU, 近日点:0.590 AU, 天数: 13797
# [-2.835, 4.8, 8.8], 远日点:35.092 AU, 近日点:0.590 AU, 天数: 13718
# [-2.835, 4.83, 8.8] 远日点:35.299 AU, 近日点:0.592 AU, 天数: 13846
# [-2.835, 4.75, 8.83] 远日点:35.132 AU, 近日点:0.588 AU, 天数: 13742
# [-2.835, 4.74, 8.84] 远日点:35.191 AU, 近日点:0.587 AU, 天数: 13779
# [-2.835, 4.79, 8.8] 远日点:35.025 AU, 近日点:0.589 AU, 天数: 13682
# params = HalleyCometParams(
# start_time='1982-09-24 00:00:00',
# init_velocity=[-2.836, 4.705, 8.85],
# init_position=[0, -5 * AU, -10 * AU]
# )
# year days: 42 6 # year days: 42 6
# 远日点: 35.086 AU((40, 346, 14946.8522)) # 远日点: 35.086 AU((40, 346, 14946.8522))
# 近日点: 0.586 AU((3, 133, 1228.3418)) # 近日点: 0.586 AU((3, 133, 1228.3418))
...@@ -233,16 +296,16 @@ if __name__ == '__main__': ...@@ -233,16 +296,16 @@ if __name__ == '__main__':
# for x in range(-2,2): # for x in range(-2,2):
# for y in range(-2, 2): # for y in range(-2, 2):
# for z in range(-2, 2): # for z in range(-2, 2):
idx = 0
r = 2 # def t():
for x in range(-r, r+1): # global idx
for y in range(-r, r+1): # params = HalleyCometParams(
for z in range(-r, r+1): # start_time='1982-09-24 00:00:00',
params = HalleyCometParams( # init_velocity=[-2.836 + (x / 100), 4.705 + (y / 100), 8.85 + (z / 100)],
start_time='1982-09-24 00:00:00', # init_position=[0, -5 * AU, -10 * AU]
init_velocity=[-2.836 + (x / 100), 4.705 + (y / 100), 8.85 + (z / 100)], # )
init_position=[0, -5 * AU, -10 * AU] # idx += 1
) # print(f"Index:{idx} ---------------------------")
idx += 1 # calc_simulator(params)
print(f"Index:{idx} ---------------------------") # # threading.Thread(target=t).start()
calc_simulator(params) # t()
...@@ -227,7 +227,8 @@ if __name__ == '__main__': ...@@ -227,7 +227,8 @@ if __name__ == '__main__':
# 2019年5月6日 34.772 # 2019年5月6日 34.772
params = HalleyCometParams( params = HalleyCometParams(
start_time='1982-09-24 00:00:00', start_time='1982-09-24 00:00:00',
init_velocity=[-2.836, 4.705, 8.85], init_velocity=[-2.835, 4.72, 8.847],
# init_velocity=[-2.836, 4.705, 8.85],
init_position=[0, -5 * AU, -10 * AU] init_position=[0, -5 * AU, -10 * AU]
) )
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册