94 lines
3.5 KiB
Python
94 lines
3.5 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
测试三体问题求解器导入和基本功能
|
|
"""
|
|
|
|
import sys
|
|
import os
|
|
|
|
# 添加当前目录到路径
|
|
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
|
|
|
print("测试三体问题求解器导入...")
|
|
print("=" * 60)
|
|
|
|
try:
|
|
# 测试导入
|
|
from three_body_problem import Particle, ThreeBodySolver, ThreeBodyConfig, ThreeBodyVisualizer
|
|
print("✓ 成功导入核心模块")
|
|
|
|
# 测试创建质点
|
|
p = Particle(mass=1.0, position=[1, 0, 0], velocity=[0, 1, 0], name='Test Star')
|
|
print(f"✓ 成功创建质点: {p.name}, 质量: {p.mass}, 位置: {p.position}")
|
|
|
|
# 测试能量计算
|
|
energy = p.get_energy()
|
|
print(f"✓ 质点动能: {energy:.6f}")
|
|
|
|
# 测试创建配置
|
|
particles = ThreeBodyConfig.create_figure8_config()
|
|
print(f"✓ 成功创建8字形轨道配置: {len(particles)}个质点")
|
|
for i, particle in enumerate(particles):
|
|
print(f" 质点{i+1}: {particle.name}, 质量: {particle.mass:.3f}")
|
|
|
|
# 测试创建求解器
|
|
solver = ThreeBodySolver(particles, dt=0.001)
|
|
print(f"✓ 成功创建求解器,时间步长: {solver.dt}")
|
|
|
|
# 测试单步积分
|
|
initial_positions = [particle.position.copy() for particle in particles]
|
|
new_particles = solver.step()
|
|
print(f"✓ 单步积分完成,时间: {solver.time:.4f}年")
|
|
|
|
# 检查位置是否变化
|
|
for i, (old_pos, new_particle) in enumerate(zip(initial_positions, new_particles)):
|
|
moved = not all(abs(old_pos[j] - new_particle.position[j]) < 1e-10 for j in range(3))
|
|
print(f" 质点{i+1} 位置变化: {'是' if moved else '否'}")
|
|
|
|
# 测试质心计算
|
|
com = solver.get_center_of_mass()
|
|
print(f"✓ 系统质心: [{com[0]:.6f}, {com[1]:.6f}, {com[2]:.6f}]")
|
|
|
|
# 测试能量计算
|
|
energy = solver._calculate_total_energy()
|
|
print(f"✓ 系统总能量: {energy:.6e}")
|
|
|
|
# 测试守恒误差计算
|
|
momentum_error, angular_momentum_error, energy_error = solver.get_conservation_errors()
|
|
print(f"✓ 守恒定律误差:")
|
|
print(f" 动量误差: {momentum_error:.2e}")
|
|
print(f" 角动量误差: {angular_momentum_error:.2e}")
|
|
print(f" 能量相对误差: {energy_error:.2e}")
|
|
|
|
# 测试配置管理
|
|
print("\n测试配置管理...")
|
|
random_particles = ThreeBodyConfig.create_random_config()
|
|
print(f"✓ 成功创建随机配置: {len(random_particles)}个质点")
|
|
|
|
lagrange_particles = ThreeBodyConfig.create_lagrange_point_config(lagrange_point=4)
|
|
print(f"✓ 成功创建拉格朗日点L4配置: {len(lagrange_particles)}个质点")
|
|
|
|
# 测试可视化器创建
|
|
visualizer = ThreeBodyVisualizer()
|
|
print("✓ 成功创建可视化器")
|
|
|
|
print("\n" + "=" * 60)
|
|
print("所有测试通过! 三体问题求解器工作正常。")
|
|
print("=" * 60)
|
|
|
|
# 显示使用示例
|
|
print("\n使用示例:")
|
|
print("1. 运行简单示例: python three_body_problem/run_example.py")
|
|
print("2. 运行8字形轨道: python three_body_problem/examples/figure8.py")
|
|
print("3. 运行拉格朗日点示例: python three_body_problem/examples/lagrange.py")
|
|
print("4. 运行随机系统示例: python three_body_problem/examples/random.py")
|
|
print("5. 运行测试: python three_body_problem/tests/test_solver.py")
|
|
|
|
except ImportError as e:
|
|
print(f"✗ 导入失败: {e}")
|
|
print("请确保在项目根目录下运行此测试")
|
|
|
|
except Exception as e:
|
|
print(f"✗ 测试失败: {e}")
|
|
import traceback
|
|
traceback.print_exc() |