Simulating cymatics

Due to popular demand I put the source for the script I used here up to github:

I was browsing around youtube when I stumbled upon this nice video on Chladni patterns (there are quite a few there). Here’s the video, it’s apparently part of some demonstration for students:


Sound propagates in solids, similarly as to how it does in air. If we were to slow down the plate in the video above, we would see it vibrating at the frequency of the sound you can hear being played (check another post of mine).

Just as is the case in air, standing waves can form in solids. In solids, the details are quite different, but the basic principle holds. When a standing wave forms, there are locations where the amplitudes of the vibrations have their maximum values, and locations where the amplitudes of the vibrations are very close to zero.

Imagine placing a lot of small particles on the surface in the image. The particles would be tossed around, until they finally find a resting place close to the red circle. This is how all of the patterns are formed, but the way the plate vibrates varies with frequency.

Simulating cymatics

The experiment setup is very clearly defined; a rectangular steel plate is clamped in the middle. This makes for a perfect case to test out some finite element analysis of plate structures!

I used steel as the material of choice for the simulation and Reissner-Mindlin bilinear plate elements, with a lumped mass matrix. I programmed the simulation using Python. By tweaking around with the material properties and dimensions, I managed to roughly match the frequencies to the experiment from the first video. I think it’s really cool how the simulation matches the patterns you can see in the video (up until a point where it’s apparent that there are some asymmetries in the setup).

I made a gif out of the video too, just for the hell of it.

You might have noticed that there are a whole lot of patterns there, which aren’t visible in the video. The standing waves which create the patterns form much more strongly when the frequency is closer to the modal frequencies of the plate (when the plate resonates). The following plot roughly shows these resonant frequencies. The y-axis doesn’t really mean anything significant here, so just pay attention to the peaks. Also, damping hasn’t been taking into account here, making the peaks unrealistically sharp. When the excitation frequency is close to one of those peaks, Chladni patterns should be clearly visible.


The frequencies these patterns form on depends completely on the material properties and dimensions of the plate, if we assume that the basic setup is the same (a rectangular plate is clamped at the middle). There are a lot of structures which can be analysed in a similar way (albeit with a more complex analysis for applicable results): floors, windows, doors, the list goes on and on. In this case, the results were very consistent with the video as the physical problem was very clearly defined.

26 thoughts on “Simulating cymatics

      1. David

        I’d love a copy of the source code. I think you should post it publicly! I tutor gifted kids and would totally use this in lessons, with your blessing.

  1. Joni Dambre

    Hi Kai,

    I’d like to play around with Chadli patterns to explore some ideas I have. It would greatly speed up things if I could start from your code, so I would be very grateful if I could get it.

    Thanks in advance!

    Joni Dambre

  2. Broussaudier

    Hi, I’m a french student and I am studying Chladni’s patterns for school, but I could use some help with the Python programs … Would you share your code with me ? It would be very appreciated !

    Thanks in advance,

  3. jose rodrigo

    Very interested experiment.
    Could yo send me the code, to play with it. I will inform to you about my advances.. Thank you

  4. Gregory House

    I have made a mechanical model representing Chladni patterns. I was just hoping to compare and contrast the experimental results with the theoretical. If you could please email me the source code for your program, I’d greatly appreciate it.

  5. Hetalia

    dear, i am research about cymatic. can you share the copy of your source code.
    credit for your name in my project.

  6. Daniel León

    Hi, I’m Daniel León, and I’m doing some research about how to compose music based in physical principles like quantum physics. (Search for Fuga Cuántica in YouTube if you want to listen to a piece created using that equations). Would you send me the source code of the project? It would be really useful for me, because I’m researching too what are the effects of that kind of science-based music in biological tissues, and cymatics are very important.


  7. C. Antonini

    You have produced a wonderful cinematic.

    I’m a teacher interested in numeric patterns and would be very interested by your source-code (at least, the numeric part of it).

    Would you mind sending me your python’s code ?

    Thanks a lot.

  8. Jason Birbal

    current_f = 160**(1.01+f/400.0)

    Can you explain this? I have been looking high and low to see the derivative of this equation. Thanks. Very impressive and looking forward for a bright future for you 🙂

    1. Kai

      Hi! Heh, that is a purely “empirical” equation, if I remember correctly, just to get a nice interval between the frequencies of the sweep.

  9. Daniel Casey

    Hi Kai,

    I was playing around with your code for a project I’m working on and I was wondering what physical parameters of the plate do the letters k and q represent?
    You also mentioned that you modeled the plate using FEM, I was also wondering did you use an specific plate or membrane theory in conjunction with this?

    Thanks in advance

    1. Kai


      I used steel as the material of choice for the simulation and Reissner-Mindlin bilinear plate elements, with a lumped mass matrix.

      q represents the force vector, k the stiffness of the plate.

    1. Kai

      Hi Vasily. Pure C++ implementation would be cool, although it requires a lot of work esp. in the numpy/sympy -part of the code. Regrettably I do not have the possibility to look into this right now, please feel free to contribute to the repository if you look into it. Thanks.


Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.