TDT4109/Exercise 7/1c.py

52 lines
1.7 KiB
Python

import numpy as np
import matplotlib.pyplot as plt
def EulerCromer( tmax, x0, y0, v0, u0, m, tau):
# tmax er tiden jorden bruker rundt solen
# x0 og y0 er startbetingelser for jordens posisjon
# v0 og u0 er starbetingelser for farten til jorden
# m er massen til jorden og tau er steglengden.
N = int(round(tmax/tau)) #np.zeros(N) lager en liste bestående av bare 0ere av lengde N
x = np.zeros(N)
y = np.zeros(N)
u = np.zeros(N)
v = np.zeros(N)
radiuser = np.zeros(N)
# startbetingelser
u[0] = u0
v[0] = v0
x[0] = x0
y[0] = y0
radiuser[0] = np.sqrt((x[0]) ** 2 + (y[0]) ** 2)
for n in range(1, N):
u[n] = u[n - 1] - 4 * np.pi ** 2 * x[n - 1] * tau / (radiuser[n - 1] ** 3)
v[n] = v[n - 1] - 4 * np.pi ** 2 * y[n - 1] * tau / (radiuser[n - 1] ** 3)
x[n] = x[n - 1] + u[n] * tau
y[n] = y[n - 1] + v[n] * tau
radiuser[n] = np.sqrt((x[n]) ** 2 + (y[n]) ** 2)
return x, y # posisjons- og farts-lister
# startbetingelser:
x0 = 1 # Tenk deg at solen er i origo og at jorden starter i posisjon(1,0)
y0 = 0
u0 = 0 # startfarten i x-retning er 0
v0 = 2*3.1415623 # startfarten i y-retning er 2*pi
m = 1 / 333480 # dette er massen til Jorden i forhold til massen til Solen
tmax = 1 # Omløpstiden rundt Solen er 1(år)
tau = 0.01 # denne skrittlengden er såpass liten at plottet blir fint nok
x1, y1 = EulerCromer(tmax, x0, y0, v0, u0, m, tau)
# Plotter banen til planeten rundt sola
plt.figure()
plt.plot(x1, y1)
circle = plt.Circle((0, 0), radius=0.06, fc='yellow')
plt.gca().add_patch(circle)
plt.xlabel(r'x [AU]')
plt.ylabel(r'y [AU]')
plt.show()