背景:大家好,我是一名物理自学Python编程的本科生。我试图找到H_lam对应于由
此处给出的方程控制的三重星系系统的极限环的值
代码
# Import solve_ivp, matplotlib, numpy
from scipy.integrate import solve_ivp
import matplotlib.pyplot as plt
import numpy as np
# Define function
def TGS(t, z):
x = np.empty(3); u = np.empty(3)
y = np.empty(3); v = np.empty(3)
x[0]= z[8]; x[1]= z[0]; x[2]= z[4]
y[0]= z[9]; y[1]= z[1]; y[2]= z[5]
u[0]= z[10]; u[1]= z[2]; u[2]= z[6]
v[0]= z[11]; v[1]= z[3]; v[2]= z[7]
G = 6.67e-17; m= [2e+43,2e+43,2e+43]
R = []
for i in [0,1,2]:
R1=[]
for j in [0,1,2]:
R1.append(np.sqrt((x[j]-x[i])**2+(y[j]-y[i])**2))
R.append(R1)
return [u[1], sum((G*m[j]*(x[j]-x[1])/((R[1][j])**3)) for j in [0,2])+(H_lam**2)*x[1],\
u[2], sum((G*m[j]*(x[j]-x[2])/((R[2][j])**3)) for j in [0,1])+(H_lam**2)*x[2],\
v[1], sum((G*m[j]*(y[j]-y[1])/((R[1][j])**3)) for j in [0,2])+(H_lam**2)*y[1],\
v[2], sum((G*m[j]*(y[j]-y[2])/((R[2][j])**3)) for j in [0,1])+(H_lam**2)*y[2]]
# Set limits for evaluation
a, b = 0,1000
# Define H_lams and set the stage for solving the Diff eq
H_lams = [61]
t = np.linspace(a, b, 50000)
# Solve the Diff eq
for H_lam in H_lams:
sol = solve_ivp(tbs, [a, b], [0.15, -0.4, 0, -90, 0, 0.8, 0, 0], t_eval=t)
plt.plot(sol.y[0],sol.y[2], "-")
# Make a little extra room for legend
plt.xlim([-1e+10,1e+10])
plt.axis("equal")
plt.legend([f"$\H_lam={m}$" for m in H_lams])
plt.axes().set_aspect(1)
我的想法和问题: x,y 是 x 和 y 坐标,而 X 和 Y 分别是沿 x 轴和 y 轴的速度。请注意,我想以零速度将第一个星系保持在原点。在这种情况下,每个物体的质量是相等的,但我想稍后更改它们。
现在,我编写的这段代码确实给了我一个情节,但我不确定它是否真的是我正在寻找的相图。有人可以建议一种方法来验证它吗?
此外,有没有办法让这段代码更有效率?
