Exploring practical possibilities of approximating functions with frames rather than with a basis
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
deps
examples
images
src
test
.travis.yml
Adaptive.ipynb
Approximation.ipynb
Derivatives.ipynb
DiffEquation.ipynb
LICENSE.md
Platforms.ipynb
Plotting.ipynb
Project.toml
README.ipynb
README.md
REQUIRE
Smoothing.ipynb
jupyter_nbconvert_config.py
test_notebooks.sh
test_notebooks_after.sh

README.md

Build Status Coverage Status

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")