ich habe ein paar Probleme mit der Benutzung von scipy.integrate.odeint.
Grundsätzlich geht es um ein Dreikörperproblem. Die drei Körper ziehen sich gravitativ an. Das entsprechende System gekoppelter ODEs soll dann mit scipy.integrate.odeint gelöst und die Bahnen geplottet werden:
Code: Alles auswählen
import scipy as scp
from scipy.integrate import odeint
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
"""
dr1/dt = r1'
dr2/dt = r2'
dr3/dt = r3'
dr1'/dt = - G*m2*(r1-r2)/|r1-r2|^3 - G*m3*(r1-r3)/|r1-r3|^3
dr2'/dt = - G*m3*(r2-r3)/|r2-r3|^3 - G*m1*(r2-r1)/|r2-r1|^3
dr3'/dt = - G*m1*(r3-r1)/|r3-r1|^3 - G*m2*(r3-r2)/|r3-r2|^3
Definiere:
z[0] = r1
z[1] = r1'
z[2] = r2
z[3] = r2'
z[4] = r3
z[5] = r3'
ODE-System:
dz[0]/dt = z[1]
dz[2]/dt = z[3]
dz[4]/dt = z[5]
dz[1]/dt = - G*m2*(z[0]-z[2])/|z[0]-z[2]|^3 - G*m3*(z[0]-z[4])/|z[0]-z[4]|^3
dz[3]/dt = - G*m2*(z[2]-z[4])/|z[2]-z[4]|^3 - G*m3*(z[2]-z[0])/|z[2]-z[0]|^3
dz[5]/dt = - G*m2*(z[4]-z[0])/|z[4]-z[0]|^3 - G*m3*(z[4]-z[0])/|z[4]-z[0]|^3
"""
m1 = 1
m2 = 1
m3 = 1
def deriv(z, t):
G = 6.573*10**(-11)
dz = scp.array([z[1], z[3], z[5], \
- G*m2*(z[0]-z[2])/scp.fabs(z[0]-z[2])**3 - G*m3*(z[0]-z[4])/scp.fabs(z[0]-z[4])**3,\
- G*m2*(z[2]-z[4])/scp.fabs(z[2]-z[4])**3 - G*m3*(z[2]-z[0])/scp.fabs(z[2]-z[0])**3,\
- G*m2*(z[4]-z[0])/scp.fabs(z[4]-z[0])**3 - G*m3*(z[4]-z[0])/scp.fabs(z[4]-z[0])**3])
return dz
time = scp.linspace(0.0, 10.0, 100)
# init values
zinit = scp.array([ 0.0, -1.5, 3.0, -1.12, 10.32, 0.1,\
-2.0, 3.5, 1.0, 0.65, -1.112, 1.43,\
1.5, 0.0, -0.5, 0.23, 0.231, -1.545 ])
r = odeint(deriv, zinit, time)
x1 = r[:][0]
y1 = r[:][1]
z1 = r[:][2]
x2 = r[:][6]
y2 = r[:][7]
z2 = r[:][8]
x3 = r[:][12]
y3 = r[:][13]
z3 = r[:][14]
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
plt.plot(x1, y1, z1, 'blue', x2, y2, z3, 'red', x3, y3, z3, 'yellow')
plt.show()
Hier der Plot:
http://www.directupload.net/file/d/3644 ... bx_png.htm
Falls mir da jemand einen Tipp geben könnte wäre ich sehr dankbar