DEV Community

Cover image for Mandelbrot set with Numerical Elixir and Zigler
NDREAN
NDREAN

Posted on • Edited on

Mandelbrot set with Numerical Elixir and Zigler

We build a Mandelbrot set explorer with a Livebook. It is an Elixir code runner that lets you write Elixir in the browser.

Algorithm

An explanation can be found here

Given an image with dimensions (eg w x h of 1500 x 1000), max iteration (eg 100), we want to assign to each pixel a colour which represents the "stability" of the orbit of the underlying point.

Iterate over each pixel (i,j):

  • map it into the 2D plane: compute its "complex coordinates"
  • compute the iteration number
  • compute a colour
  • Sum-up and draw.

Explorer

We have to parts:

  • one Livebook to visualise the orbits of a point, the iterates
  • one Livebook to visualise the Mandelbrot set and zoom into any point.

This is done with the Numerical Elixir library Nx. A solution is also proposed using embedded Zig within the Livebook.

The Kino.JS.Live library makes it possible to interact with the browser.

Exploring orbits

Image description

In this Livebook, you click on a point c of the 2D-plane and it computes the succession of points, the orbit, under the iterative map z(n+1) = z(n) * z(n) + c and z(0)=c.

Run in Livebook

Code source: https://github.com/ndrean/mandelbrot/blob/main/livebook/orbits.livemd

Explore the Mandelbrot set

Image description

In this Livebook, you can click into the 2D-plane to zoom into the area of interest.

We propose two solutions:

  • one using only Elixir for the computations,
  • one using Zig for the heavy computations (you need to have Zig installed).

Although Zig gives you a huge boost, the performance of the Elixir code is good. This is because we use the numerical library Nx with the EXLA backend.

Run in Livebook

Code source: https://github.com/ndrean/mandelbrot/blob/main/livebook/mandelbrot.livemd

Top comments (0)