Waste less time on Facebook — follow Brilliant.

Computation as a tool(Part 1):Basics of simulations,falling balls and Euler's algorithm

Hey Brilliant!In this note I will try to introduce the basic techniques of computer simulations and give a few elementary examples to illustrate the power of computation.


Scientists of many disciplines are often fond of saying that mathematics is a 'tool' they use for solving problems.While 'tool' is not a name most mathematicians are comfortable with,I would like to introduce an equally powerful but lesser known 'tool',computation.

Computers were used to simulate the behaviour of this little guy

Computers were used to simulate the behaviour of this little guy

Computation is now an integral part of contemporary science and it is having a profound effect on the way we do science. We are starting to advance from traditional 'wet labs' where physical objects are used for performing experiments,towards 'dry labs' where equivalent experiments are crunched using a computer model.

We are now at a time where scientists have managed to simulate complete organisms,portions of the universe and even brains!While traditional tools such as numerical analysis and symbolic manipulation are important in computation,the key difference is that simulations are done with a minimum of analysis,they focus on explanatory modes of learning

\[\huge{\text{Choosing a language}}\]



There is no single best programming language like there is no single best natural language. However I will be using python in this note series.Sure, it might be a relatively slow language,but it is also very readable.

Python enthusiasts like to say that languages like C and C++ were made to make life easier for the computer but python was made to make life easier for the programmer.We will also be using external python libraries like pygame and matplotlib for creating animations and visuals to go along with the simulations.Now that we are done with the prerequisites,let's get cracking.

\[\huge{\text{2D Motion}}\]



Consider a particle near the surface of the Earth exhibiting projectile motion and subject to a single force,the force of gravity.If we assume that air resistance is negligible,from Newton's second law,we can get the particle's position as a function of time.

\[g=-\frac{d^{2}x}{dt^{2}} \]

This is a statement of a model of the motion of the ball.You are probably familiar with it and know the analytical solutions:

\[x(t) = v_{x}(0)t \]

\[v_x(t) = v_x(0) \]

\[y(t)=y(0) + u_{y}t - \frac{1}{2}gt^{2} \]

\[v_y(t) = v_y(0) - gt\]

Where \(x,y,v_x,v_y\) are the horizontal position,vertical position,horizontal velocity and vertical velocity respectively.Also \(v_x(t)=v_x(t)cos(\theta)\) and \(v_y(t)=v_y(t)sin(\theta)\).

You are probably familiar with the model above but nevertheless,we will determine the motion of the particle numerically in order to introduce the tools that we will need in a familiar context. We begin by expressing the equations as first order differential equations:





We next approximate the derivatives by small finite differences.

\[ \frac{y(t+\Delta t) - y(t)}{\Delta t} = v(t) \]

\[ \frac{v(t+\Delta t) - v(t)}{\Delta t} = -g \]

Note that in the limit \( \Delta t\) approaches \(0\). We can rewrite the above as. \[y(t+\Delta t)=y(t) + v(t)\Delta t\]

\[v(t+\Delta t)=v(t) - g \Delta t\] We can write our equations in this form \[y(t+\Delta t)=y(t) + v_y(t)\Delta t\]

\[v_y(t+\Delta t)=v_y(t) - g \Delta t\]

\[x(t+\Delta t)=x(t) + v_x(t)\Delta t\]

\[v_x(t+\Delta t)=v_x(t)\] The finite difference approximation we used to obtain these equations is an example of the Euler algorithm.

In general, for the first order differential: \[\frac{dy}{dx}=f(x)\] Where \(f(x)\) is a function of \(x\) \[y_{n+1}=y_{n}+f(x_n)\Delta x\]

In computation we can only deal with a countable number of input(as continuous input would require infinite computing power),thus such types of numerical algorithms,where we can obtain a desired value from previous values,are essential when running simulations.

\[\huge{\text{Coding it all up}}\]

Our equations above are examples of finite difference equations and \(\Delta t\) is the time step.We can now follow \(y(t),x(t),v_x(t)\) and \(v_y(t)\) in time. We begin with initial values and then iterate.If \(\Delta t\) is sufficiently small we will obtain numerical answers close to the solutions of the original differential equations.

Euler's method

Euler's method

The image above demonstrates the discrepancy between the curve and its polygonal approximation.

I shall describe the syntax used in each line of the program using comments.

from math import *
theta = pi/4 #Initial angle of launch
dt = 0.0001 #The time step of the motion
u = 10 #Launch velocity
g = 9.8 #Gravitational Acceleration
t = 0 #Starting time
x , y = 0,0 #Starting coordinates
vx,vy=u*cos(theta),u*sin(theta) #Initial vertical and horizontal speeds
Max_Height = 0 #Maximum Height,initially set to zero

while y >= 0: #Follow the ball while it hasn't gone below the y position of its initial position
     y = y + vy*dt #use Euler's algorithm
     x = x + vx*dt
     vy = vy - g*dt
     t = t + dt #Step up the time
     if y > Max_Height: #Update the value of the Maximum Height whenever a larger value of y is found
          Max_Height = y

print """Total flight time:%.3f seconds
Range of projectile:%.3f meters
Maximum height is:%.3f meters
""" %(t,x,Max_Height)

In the code above a projectile is launched at an angle \(\theta\). The while loop iterates through each time interval \(dt\) and computes the position and velocity of the ball at that time.It stops when the ball returns to the ground(\(y<0\)).I used \(\Delta t=0.0001\) which gave results accurate to three decimal places.

Just by tracking the ball's position and velocity we have found information such as the total flight time,the range of the projectile,its mean height throughout the motion and its maximum height without involving ourselves too much in the mathematics.

Though doing the math itself is very easy here,such simulations are really helpful for more realistic situations where there are too many factors(drag,altitude,even the gravitational attraction of the moon) that affect the system.In those cases we can easily extend our simulation to get acceptable approximations in an easy way.

Using external libraries we can obtain plots of the \((x,y)\) coordinates as well as animations of the simulation.

Plot of the height of the projectile

Plot of the height of the projectile


The goal of our investigation here was to show how simulations can be used to simplify problems.Computer simulations,like laboratory experiments are not substitutes for thinking but are tools we can use to understand natural phenomena.

Hopefully I will soon write notes on simulations of more realistic physical systems(Motion with drag,Damped oscillatory motion,chaotic systems..etc). Thank you for bearing with me through out this long note and I hope I managed to give you a glimpse of how cool computation can be.

Note by Thaddeus Abiy
3 years ago

No vote yet
1 vote


Sort by:

Top Newest

Combining Physics and Computers ... That makes already cool Physics cooler !!! Soutrik Bandyopadhyay · 3 years ago

Log in to reply

Very nice! Michael Mendrin · 3 years ago

Log in to reply

HI, try visiting www.sciencefront.webs.com for cool ideas and interesting news and facts of science Kshitij Khandelwal · 3 years ago

Log in to reply

very good work my son is 17 and use simulations in physics Aliki Patsalidou · 3 years ago

Log in to reply

Please keep writing. This was really nice and interesting. Himanshu Arora · 3 years ago

Log in to reply

This was info of great value. Thanx Shekhar Lolage · 2 years, 11 months ago

Log in to reply

Physics with computer, world is getting digital now. Oh yeah! Nirupam Singh · 2 years, 12 months ago

Log in to reply

I'mso damn cconfused Äräháàñ Shâh · 2 years, 12 months ago

Log in to reply

I am trying to find a new language for programming, as you didn't mention java in your note, what do you think would best if I want to pursue programming for making apps. Hardipinder Singh · 3 years ago

Log in to reply

@Hardipinder Singh It depends on what platform you are coding for.Android or IOS? Thaddeus Abiy · 3 years ago

Log in to reply

@Thaddeus Abiy I am more interested in android but if time comes I would like to go for ios also Hardipinder Singh · 3 years ago

Log in to reply

@Hardipinder Singh I'm no expert on this but I have heard that Java is Definitely the way to go for Android development and Objective-C is absolutely necessary for IOS development. Of-course there are other options.. Thaddeus Abiy · 3 years ago

Log in to reply

@Thaddeus Abiy Thank you sir, and if you may please elaborate these other options. Hardipinder Singh · 3 years ago

Log in to reply

@Hardipinder Singh Following the release of the ASE platform,it was made possible to code for Android in Python,Perl,Lua,Beanshell...etc.. Thaddeus Abiy · 3 years ago

Log in to reply

@Thaddeus Abiy Thank you again :-) Hardipinder Singh · 3 years ago

Log in to reply

Good Platinum Grieger · 3 years ago

Log in to reply

Great post! Awaiting part 2. Anthony Georgilas · 3 years ago

Log in to reply

Very nice! Congrats! Bruna Torman · 3 years ago

Log in to reply

Great Note! Ameya Salankar · 3 years ago

Log in to reply

Awesome note-Keep up the good work!!

Can you please tell me how to add the block of code in the note?? Eddie The Head · 3 years ago

Log in to reply

@Eddie The Head You can add code by placing your code in between two lines of ```. Look at this for clarification Thaddeus Abiy · 3 years ago

Log in to reply

Really helpful thanks Mardokay Mosazghi · 3 years ago

Log in to reply

@Mardokay Mosazghi Glad you think so. :) Thaddeus Abiy · 3 years ago

Log in to reply

(y) Dhanush Wali · 3 years ago

Log in to reply


Problem Loading...

Note Loading...

Set Loading...