• Stars
    star
    114
  • Rank 308,031 (Top 7 %)
  • Language
    Julia
  • License
    MIT License
  • Created over 7 years ago
  • Updated 9 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Fatou sets in Julia (Fractals, Newton basins, Mandelbrot)

Fatou.jl

Build Status Build status Coverage Status codecov.io

Julia package for Fatou sets. Install using Pkg.add("Fatou") in Julia. See Explore Fatou sets & Fractals in Wiki for detailed examples. This package provides: fatou, juliafill, mandelbrot, newton, basin, plot, and orbit; along with various internal functionality using Reduce and Julia expressions to help compute Fatou.FilledSet efficiently. Full documentation is included. The fatou function can be applied to a Fatou.Define object to produce a Fatou.FilledSet, which can then be passed as an argument to plot functions of Makie, PyPlot, ImageInTerminal. Creation of Fatou.Define objects is done via passing a parse-able function expression string (in variables z, c) and optional keyword arguments to juliafill, mandelbrot, and newton.

Background

This package enables users of Julia lang to easily generate, explore, and share fractals of Julia, Mandelbrot, and Newton type. The name Fatou comes from the mathematician after whom the Fatou sets are named. Note that the Julia language is not named after the mathematician Julia after whom the Julia sets are named. This is a mere coincidence.

Definition (Julia set): For any holomorphic function on a complex plane, the boundary of the set of points whose result diverges when the function is iteratively evaluated at each point.

Definition (Fatou set): The Julia set’s complement is the set of fixed limit points from holomorphic recursion.

Definition (Mandelbrot set): The set of points on a complex parameter space for which the holomorphic recursion does not go to infinity from a common starting point z0.

Definition (Newton fractal): The Julia/Fatou set obtained from the recursion of the Newton method z↦z−m⋅f(z)/f′(z) applied to a holomorphic function.

The package has essentially two different plotting modes controlled by the iter boolean keyword, which toggles whether to color the image by iteration count or whether to use a default (or custom) limit-value coloring function.

The number of Julia threads available is detected at the startup and is reported it back. When a specified Fatou set is computed, multi-threading is used to compute the pixels. Since each pixel is independent of any other pixel, it doesn’t matter in what order or on how many threads it is computed, the more you use the faster it is. The environment variable JULIA_NUM_THREADS can be used to enable the multi-threading for more than 1 thread.

Please share with us your favorite fractals as Fatou code snippets!

Examples

Fatou.Define provides the following optional keyword arguments:

Q::Expr 	= :(abs2(z)),           # escape criterion, (z, c) -> Q
C::Expr 	= :((angle(z)/(2Ï€))*n^p)# coloring, (z, n=iter., p=exp.) -> C
∂    = π/2, # Array{Float64,1}      # Bounds, [x(a),x(b),y(a),y(b)]
n::Integer  = 176,                  # vertical grid points
N::Integer  = 35,                   # max. iterations
ϵ::Number   = 4,                    # basin ϵ-Limit criterion
iter::Bool  = false,                # toggle iteration mode
p::Number   = 0,                    # iteration color exponent
newt::Bool  = false,                # toggle Newton mode
m::Number   = 0,                    # Newton multiplicity factor
mandel::Bool= false,                # toggle Mandelbrot mode
seed::Number= 0.0+0.0im,            # Mandelbrot seed value
x0          = nothing,              # orbit starting point
orbit::Int  = 0,                    # orbit cobweb depth
depth::Int  = 1,                    # depth of function composition
cmap::String= ""                    # imshow color map

A Fatou set is a collection of complex valued orbits of an iterated function. To help illustrate this, an additional feature is a plot function designed to visualize real-valued-orbits. The program can be initialized with using Fatou, PyPlot or Makie or ImageInTerminal. For PyPlot the imshow and plot methods can be used, while for Makie the heatmap, contour, surface, and arrows methods can be used.

When using ImageInTerminal, the display of a Fatou.FilledSet will be plotted automatically in the terminal. The orbit method also has optional UnicodePlots compatibility. Additional plotting support can be added via Pull-Request by adding another Requires script to the __init__() function definition.

The following is a cobweb orbit plot of a function:

juliafill(:(z^2-0.67),∂=[-1.25,1.5],x0=1.25,orbit=17,depth=3,n=147) |> orbit

img/orbit.png

With fatou and plot it is simple to display a filled in Julia set:

c = -0.06 + 0.67im
nf = juliafill(:(z^2+$c),∂=[-1.5,1.5,-1,1],N=80,n=1501,cmap="gnuplot",iter=true)
plot(fatou(nf), bare=true)

img/filled-julia.png

It is also possible to switch to mandelbrot mode:

mandelbrot(:(z^2+c),n=800,N=20,∂=[-1.91,0.51,-1.21,1.21],cmap="gist_earth") |> fatou |> plot

img/mandelbrot.png

Fatou also provides basin to display the the Newton / Fatou basins using set notation in LaTeX in IJulia.

map(display,[basin(newton(:(z^3-1)),i) for i ∈ 1:3])

D1(ϵ)

D2(ϵ)

D3(ϵ)

Compute the Newton fractal Julia set for a function with annotated plot of iteration count:

nf = newton(:(z^3-1),n=800,ϵ=0.1,N=25,iter=true,cmap="jet")
nf |> fatou |> plot
basin(nf,3)

img/newton.png

Generalized Newton fractal example:

nf = newton(:(sin(z)-1),m=1-1im,∂=[-2π/3,-π/3,-π/6,π/6],n=500,N=33,iter=true,ϵ=0.05,cmap="cubehelix")
nf |> fatou |> plot
basin(nf,2)

img/generalized-newton.png

D2(ϵ)

View Explore Fatou sets & Fractals in Wiki for detailed examples.

Troubleshooting on Julia 1.0.1+

Note that Fatou is not compatible with Julia 1.0 but works on Julia 1.0.1 alright. Note that a stackoverflow error occurs on Julia 1.0.1+ when the Reduce package is precompiled with ENV["REDPRE"] flag set, therefore it is recommended to not set it. If you encounter an unsatisfiable requirement in the package manager, an easy workaround is to use dev Fatou instead of add Fatou.

More Repositories

1

Grassmann.jl

⟨Grassmann-Clifford-Hodge⟩ multilinear differential geometric algebra
Julia
458
star
2

Reduce.jl

Symbolic parser for Julia language term rewriting using REDUCE algebra
Julia
243
star
3

DirectSum.jl

Tangent bundle, vector space and Submanifold definition
Julia
50
star
4

AbstractTensors.jl

Tensor algebra abstract type interoperability setup
Julia
44
star
5

Leibniz.jl

Tensor algebra utility library
Julia
19
star
6

Dendriform.jl

Dendriform di-algebra algorithms to compute using Loday's arithmetic on groves of planar binary trees
Julia
16
star
7

Math-Research-Notes

Theorems, Definitions, Papers, Research
TeX
15
star
8

SyntaxTree.jl

Toolset for modifying Julia AST and characteristic values
Julia
15
star
9

ForceImport.jl

Macro that force imports conflicting methods in modules
Julia
14
star
10

VerTeX.jl

Typeset scattered graph data rewriter based on LaTeX nodes
Julia
13
star
11

UnitSystems.jl

Physical unit systems (Metric, English, Natural, etc...)
Julia
12
star
12

Adapode.jl

Adaptive P/ODE numerics with Grassmann element TensorField assembly
Julia
10
star
13

Geophysics.jl

Planetary science data for atmospheric geophysical models
Julia
10
star
14

Ganja.jl

Interface for the ganja.js library in Julia
JavaScript
10
star
15

FieldAlgebra.jl

Field-algebra based on Group / Ring symbolic vector module extension
Julia
9
star
16

StaticVectors.jl

Statically sized tuple vectors for Julia
Julia
8
star
17

Cartan.jl

Maurer-Cartan-Lie frame connections ∇ Grassmann.jl TensorField derivations
Julia
7
star
18

DeMorgan.jl

Classical logic truth table magma algebra
Julia
7
star
19

Similitude.jl

Dimensions and Quantities for UnitSystems.jl
Julia
6
star
20

Grassmann.wl

⟨Leibniz-Grassmann-Clifford⟩ multilinear differential geometric algebra
Mathematica
5
star
21

PrimitiveBits.jl

Static bit-vector with primitive byte storage and bit-wise index
Julia
4
star
22

adapode

Adaptive Multistep Numerical ODE Solver
Fortran
4
star
23

Wilkinson.jl

Toolkit for studying numerical analysis and floating point algebra round-off
Julia
3
star
24

Heisenberg.jl

Quantum logic gates with Grassmann algebra
Julia
2
star
25

MeasureSystems.jl

Measurements.jl compatibility layer for UnitSystems.jl
Julia
2
star
26

FlowGeometry.jl

Geometry for fluid dynamics
Julia
2
star
27

Ajna.jl

Perception & intuition for geometric algebra visualization
Julia
2
star
28

Clifford.jl

Geometric algebra extension for Grassmann in Julia
Julia
2
star