Comp Sci Orbit of Earth: Plotting Trajectory

Click For Summary
SUMMARY

The forum discussion focuses on plotting the trajectory of Earth using Python libraries Matplotlib and SciPy. The user initially encountered issues with the plot not displaying the complete trajectory due to incorrect velocity and time parameters. After correcting the velocity to 3.0287*104 and adjusting the time stop to 24 * 365 * 0.99 * h, the plot successfully depicted the Earth's orbit. Suggestions were made to enhance the plot by illustrating a non-circular shape and adding a circular orbit for clarity.

PREREQUISITES
  • Proficiency in Python programming
  • Familiarity with Matplotlib for plotting
  • Understanding of numerical integration using SciPy
  • Knowledge of gravitational physics and orbital mechanics
NEXT STEPS
  • Explore advanced plotting techniques in Matplotlib for better visual representation
  • Learn about numerical methods for solving differential equations in SciPy
  • Research gravitational physics to understand orbital shapes and dynamics
  • Investigate how to simulate other celestial bodies' orbits using similar methods
USEFUL FOR

Students in physics or astronomy, data scientists working with simulations, and developers interested in scientific computing and visualization.

Graham87
Messages
72
Reaction score
16
Homework Statement
Write a program to calculate the orbit of the Earth using leapfrog and plot it
Relevant Equations
-GM r/r^3
1.jpg


I am attempting this homework exercise but my plot does not show the whole trajectory. I don't know if it is something wrong with my equations or if it is a plotting matter.
earth trajectory.png

Cheers!This is my code:
Python:
import matplotlib.pyplot as plt
import numpy as np
import scipy.integrate as spi

G = 6.6738*10**-11
M = 1.9891*10**30
h = 3600
y = 1.4710*10**11
vx = 3.0287*20**4

def LeapFrog(f, t_start, t_stop, z0, h):

    t_vec = np.arange(t_start, t_stop, h)
    n = len(t_vec)
    d = len(z0) 
    z_vec = np.zeros((n, d))
    z_vec[0,:] = z0
    z_half_step=z_vec[0 , :] + (1/2)*h*f(z0,t_vec[0])    for i in range(0, n - 1):
        z_vec[i+1,:]=z_vec[i,:] + h*f(z_half_step, t_vec[i])
        z_half_step += h*f(z_vec[i+1,:], t_vec[i])   

    return t_vec, z_vec,def f(z,t):   

    x=z[0]
    y=z[1]
    vx=z[2]
    vy=z[3]
    r=np.sqrt(x**2+y**2)

    dz=np.zeros(4)

    dz[0]=vx
    dz[1]=vy
    dz[2]=-G*M*x/r**3
    dz[3]=-G*M*y/r**3

    return dz

t_start = 0
t_stop = 24*365*5
z0 = np.array([0,y,vx,0])
t_vec, z_vec = LeapFrog(f, t_start, t_stop, z0, h)

plt.plot(z_vec[:,0],z_vec[:,1], 'g', markersize=1, label='Earth trajectory')
plt.plot(0,0,'yo', label = 'Sun positon') 
plt.show()
 
Physics news on Phys.org
vx = 3.0287*20**4
 
  • Like
Likes PeroK and Graham87
drmalawi said:
vx = 3.0287*20**4
Ah!

Should be vx=3.0287*10**4 and
t_stop = 24 * 365 * 0.99 * h

Now it's correct.

Thanks!
 
Graham87 said:
Now it's correct.

Plot works now?
 
  • Like
Likes Graham87
drmalawi said:
Plot works now?
Works neatly !
5C7C0380-6069-49B0-B446-E61E2538233B.jpeg
 
  • Like
  • Love
Likes PeroK and malawi_glenn
Great job!

Could you fix the plot so that the non-cicrular shape is manifest?
Perhaps also you can plot a circular orbit centered around the sun with the Earth's average orbital distance as well
 
  • Like
Likes Graham87
drmalawi said:
Great job!

Could you fix the plot so that the non-cicrular shape is manifest?
Perhaps also you can plot a circular orbit centered around the sun with the Earth's average orbital distance as well
Great idea.
This is much clearer.
C17ADAC9-4085-4512-8CD8-E97F9772736E.jpeg
 
  • Like
Likes malawi_glenn

Similar threads

  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 6 ·
Replies
6
Views
2K
  • · Replies 12 ·
Replies
12
Views
2K
Replies
18
Views
3K
  • · Replies 6 ·
Replies
6
Views
4K
  • · Replies 2 ·
Replies
2
Views
4K
  • · Replies 6 ·
Replies
6
Views
2K