June 30th, 2024

A simplified Python simulation of diffusion

Physicist Richard Feynman's teaching style is explored through Python simulations on diffusion. The tutorial simplifies physics concepts, emphasizing coding and optimization with Python modules like turtle, NumPy, and Matplotlib.

Read original articleLink Icon
A simplified Python simulation of diffusion

The article discusses the potential teaching approach of physicist Richard Feynman using Python simulations, focusing on diffusion. The author, a physicist, highlights the value of Feynman's teaching style in deepening understanding. The Python tutorial simplifies physics concepts, emphasizing coding and optimization. The simulation involves particles moving randomly in a closed container, colliding with each other and the container's sides. The tutorial uses the turtle module to create animations and plans to explore NumPy and Matplotlib in Part 2. It explains creating a 2D simulation area, defining particle attributes, setting positions and velocities, and animating particle movements. The tutorial also addresses handling collisions with container edges and between particles. The code snippets provided demonstrate creating the simulation area, particles, and animating their movements. The tutorial aims to make Python coding accessible and engaging, even for those not well-versed in physics.

Related

Link Icon 8 comments
By @SushiHippie - 5 months
This somehow reminds me of the Coding Challenges from The Coding Train:

https://youtube.com/playlist?list=PLRqwX-V7Uu6ZiZxtDDRCi6uhf...

Though he uses https://p5js.org/ for most if not all of his challenges (at least the last time I watched his videos).

By @forgotpwd16 - 5 months
An excellently presented article. Impressed by the usage of `turtle` module. Didn't knew it was that capable.
By @programjames - 5 months
I think it'd be really cool to add a histogram of particle speeds with an entropy counter. To control temperature, make particles gain a little momentum in a random direction when they hit the sides of the box.
By @spacecadet - 5 months
Reminds me of the 2D universe simulator I wrote over Christmas last year. Mine consists of square entities (going for a pixel art aesthetic) of random initial size that have a weak gravity, slowly bumping into each other, condensing down into small objects with very strong gravity... you can imagine where thats going. The code is god awful but it was fun to hack through and it looks cute. I used Pygame, but it also spits out some matplot visualizations for a historical pov.
By @semi-extrinsic - 5 months
I'm sorry, but this is not good code for teaching anyone about anything to do with physics. It manages to be both verbose, non-idiomatic, slow and wrong. Feynman would not touch this with a ten foot pole.

First ditch all the object orientation and encapsulation and stuff. Your data is a 2xN Numpy array. Your visualization is a scatter plot in Matplotlib. Voila, 80% of the code is gone.

For the position updates, you either use a repulsive potential to approximate the hard spheres and do molecular dynamics, showing how to integrate Newton's second law and the Verlet scheme and ergodicity and the whole shebang. Or you do Monte Carlo for the positional updates and keep the exact hard spheres. You discuss statistical mechanics concepts like ensembles and thermostats and stuff.

Then you produce results like the pair correlation function and compare it with the Carnahan-Starling equation, dig into the really cool stuff. Compute velocity autocorrelation functions, test what happens when you change density and temperature, talk about phase diagrams, etc.

This is actually an amazingly deep subject, yet very accessible and intuitive, that sits on the border between physics and chemistry. Sad to see it treated like this. Would suggest that people have a look at the book by Allen and Tildesley which is much much better. They have both Python and Fortran example code on Github.

By @youssefabdelm - 5 months
which feynman lecture is he referencing (on diffusion)?

edit: there's one called "#43 Diffusion (5/1/62)" here: https://www.feynmanlectures.caltech.edu/flptapes.html#restor... so I assume that

By @block_dagger - 5 months
If Feynman _were_ teaching today.
By @cocodill - 5 months
I really underestimated the turtle package.