# daanhb/FrameFun.jl

Exploring practical possibilities of approximating functions with frames rather than with a basis
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
deps
examples
images
src
test
.travis.yml
Approximation.ipynb
Derivatives.ipynb
DiffEquation.ipynb
Platforms.ipynb
Plotting.ipynb
Project.toml
REQUIRE
Smoothing.ipynb
jupyter_nbconvert_config.py
test_notebooks.sh
test_notebooks_after.sh

# FrameFun

Exploring practical possibilities of approximating functions with frames rather than with a basis. The package is heavily inspired by the Chebfun project and the Julia package ApproxFun.

# Frame Approximations in 1D

After choosing a suitable Basis and Domain, any function can be approximated in the resulting frame:

```using BasisFunctions
using Plots;gr()
using DomainSets
using FrameFun
B = FourierBasis(61, -1, 1)
D = -0.5..0.5
f = x->x
F = Fun(f,B,D)

P = plot(F,plot_ext=true, layout = 2)
plot!(F,f,plot_ext=true, subplot=2)
Plots.savefig(P,"images/lowprecision.png")```

The bases support any AbstractFloat subtype, so high precision approximations are straightforward:

```B = FourierBasis(61, BigFloat(-1), BigFloat(1))
F = Fun(f,B,D)

P = plot(F,plot_ext=true,layout=2)
plot!(F,f,plot_ext=true,subplot=2)
Plots.savefig(P,"images/highprecision.png")```

# Frame Approximations in 2D

In higher dimensions, a basis can be any tensorproduct of (scaled) lower dimensional bases:

```using StaticArrays
C = disk(1.0)\disk(0.3,SVector(0.2, 0.5))
B = FourierBasis(31,-1.3,1.3) ⊗ FourierBasis(31,-1.3,1.3)
f = (x,y)->exp(x+y)
F = Fun(f,B,C)

P = heatmap(F,plot_ext=true,layout=2,aspect_ratio=1)
plot!(F,f,plot_ext=true,subplot=2,aspect_ratio=1)
Plots.savefig(P,"images/deathstar.png")```

Even fractal domains are not a problem:

```B = FourierBasis(31,-1.0,0.35) ⊗ FourierBasis(31,-0.65,0.65)
f = (x,y)->cos(10*x*y)
F = Fun(f, B, mandelbrot())

P = heatmap(F,plot_ext=true,layout=2,aspect_ratio=1)
plot!(F,f,plot_ext=true,aspect_ratio=1,subplot=2)
Plots.savefig(P,"images/mandelbrot")```