Hallo,
ich habe ein kleines Python Skript geschrieben, welches die Planetenbewegung in unserem Sonnensystem näherungsweise iterativ berechnet. Den Quellcode stelle ich ans Ende der Nachricht. Wenn ich das Skript in idle ausführe dauert das richtig lange, aber wenn ich es über das Terminal ausführe geht es deutlich schneller. Ist das nur bei mir so, oder gibt es dafür einen speziellen Grund. Ich finde das jedenfalls sehr merkürdig
#!/usr/bin/python
# -*- coding: utf-8 -*-
import pylab as p
#Zeit
t = 0 #Startzeitpunkt in s
dt = 600 #Schrittweite in s
#Zaehlvariabeln
n = 0 #zum Durchnummerieren der Datenpunkte
nmax = 100000 #maximale Anzahl an Datenpunkten 364.25 Tage im Moment eingestellt
p.figure() #Vorbereiten der Plotumgebung
p.axis('equal')
#Datenstruktur eines Himmelskoerpers
#Himmelskoerper werden als punktfoermig angenommen
#[m,x(t),y(t),z(t),vx(t),vy(t),vz(t),ax(t),ay(t),az(t)]
#Eigenschaften der Planete inklusive Startwerte fuer Ort und Geschwindigkeit
sonne = [1.989e+30,0,0,0,0,0,0,0,0,0]
p.plot(sonne[1],sonne[2],'ro')
merkur = [3.302e+23,-37449168079.612564,33209727006.346676,6150208418.4676857,-42226.897568386266,-34457.14453273495,1061.0004965017185,0,0,0]
p.plot(merkur[1],merkur[2],'ro')
venus = [4.869e+24,2614686063.0530491,-108719150858.89833,-1636857141.0127885,34777.124350352031,712.66306286163467,-1997.6069808201082,0,0,0]
p.plot(venus[1],venus[2],'ro')
erde = [5.974e+24,-136013121796.84563,58583630256.046036,94805.523089182578,-12268.831234169136,-27470.465893276898,0.052645279810512258,0,0,0]
p.plot(erde[1],erde[2],'ro')
mars = [6.419e+23,179969011093.2977,117701923408.90912,-1958307297.8778749,-12335.692665458746,22344.760531129818,771.32022022001979,0,0,0]
p.plot(mars[1],mars[2],'ro')
jupiter = [1.899e+27,558459921160.26126,491401057921.47339,-14543339471.914845,-8807.135818544607,10434.241302627917,153.93268171932721,0,0,0]
#p.plot(jupiter[1],jupiter[2],'ro')
saturn = [5.685e+26,922184369423.20618,1014567342545.135,-54325644704.612656,-7664.8662067153955,6488.3738587465905,191.83360598568288,0,0,0]
#p.plot(saturn[1],saturn[2],'ro')
uranus = [8.683e+25,2181089020585.9395,-2032317602696.3196,-35829088776.942276,4584.0387288777683,4676.06722875983,-42.010121449713587,0,0,0]
#p.plot(uranus[1],uranus[2],'ro')
neptun = [1.024e+26,2536427740250.1294,-3723883453716.0317,18235080464.202614,4447.5004645613062,3101.9086839700012,-166.16816989661567,0,0,0]
#p.plot(neptun[1],neptun[2],'ro')
pluto = [1.250e+22,-1452258465874.196,-4195321739652.6172,869306741021.47546,5253.3343875933115,-2634.621032608708,-1239.0976225808072,0,0,0]
#p.plot(pluto[1],pluto[2],'ro')
#zusammenfassen der Himmeskoerper in einer Liste
hk = [sonne,merkur,venus,erde,mars,jupiter,saturn,uranus,neptun,pluto]
def beschl(hk,i):
G = 6.67428e-11 #Gravitationskonstante in m^3/(kg*s^2)
hki = hk[i]
k = 0
summe_x,summe_y,summe_z = 0,0,0
for k in range(len(hk)):
hkk = hk[k]
if k != i:
faktor = hkk[0]/(((hki[1]-hkk[1])**2+(hki[2]-hkk[2])**2+(hki[3]-hkk[3])**2)**(1.5))
summe_x += (hki[1]-hkk[1])*faktor
summe_y += (hki[2]-hkk[2])*faktor
summe_z += (hki[3]-hkk[3])*faktor
return [-G*summe_x,-G*summe_y,-G*summe_z]
x0,x1,x2,x3,x4 = [],[],[],[],[]
y0,y1,y2,y3,y4 = [],[],[],[],[]
z0,z1,z2,z3,z4 = [],[],[],[],[]
while n < nmax:
k = 0
for k in range(len(hk)):
hkk = hk[k]
a = beschl(hk,k)
hkk[7],hkk[8],hkk[9] = a[0],a[1],a[2]
hkk[4],hkk[5],hkk[6] = hkk[4]+a[0]*dt,hkk[5]+a[1]*dt,hkk[6]+a[2]*dt
hkk[1],hkk[2],hkk[3] = hkk[1]+hkk[4]*dt,hkk[2]+hkk[5]*dt,hkk[3]+hkk[6]*dt
if k == 0: #aktuelle Koordinaten der Sonne an Liste anhängen
x0.append(hkk[1])
y0.append(hkk[2])
z0.append(hkk[3])
elif k == 1: #aktuelle Koordinaten des Merkur an Liste anhängen
x1.append(hkk[1])
y1.append(hkk[2])
z1.append(hkk[3])
elif k == 2: #aktuelle Koordinaten der Venus an Liste anhängen
x2.append(hkk[1])
y2.append(hkk[2])
z2.append(hkk[3])
elif k == 3: #aktuelle Koordinaten der Erde an Liste anhängen
x3.append(hkk[1])
y3.append(hkk[2])
z3.append(hkk[3])
elif k == 4: #aktuelle Koordinaten des Mars an Liste anhängen
x4.append(hkk[1])
y4.append(hkk[2])
z4.append(hkk[3])
n += 1
print(n)
p.plot(x0,y0,'black')
p.plot(x1,y1,'gray')
p.plot(x2,y2,'green')
p.plot(x3,y3,'blue')
p.plot(x4,y4,'red')
p.show()