Probleme mit scipy.integrate.odeint
Verfasst: Donnerstag 5. Juni 2014, 12:10
Hallo liebes Forum,
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:
Ich versuch jetzt schon ne ganze Weile daran herum, aber anscheinend übergebe ich irgendetwas nicht in der richtigen shape oder Dimension.
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
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