Skip to content
master
Switch branches/tags
Go to file
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
src
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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.

using BasisFunctions, Plots, DomainSets, FrameFun
gr();

Frame Approximations in 1D

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

B = Fourier(61) → -1..1
D = -0.5..0.5
f = x->x
F = Fun(f,B,D)

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

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

B = Fourier(61) → big(-1)..big(1)
F = Fun(f,B,D)

P = plot(F,layout=2)
plot!(F,f,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 = (Fourier(31) → -1.3..1.3)^2
f = (x,y)->exp(x+y)
F = Fun(f,B,C)

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

Even fractal domains are not a problem:

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

P = heatmap(F,layout=2,aspect_ratio=1)
plot!(F,f,aspect_ratio=1,subplot=2)
Plots.savefig(P,"images/mandelbrot")
GKS: Rectangle definition is invalid in routine SET_WINDOW
GKS: Rectangle definition is invalid in routine CELLARRAY
origin outside current window

Installation

FrameFun.jl is not added to the Julia General registry and depends on the unregistered packages GridArrays.jl and BasisFunctions.jl

Recommended

For Julia 1.1 or higher, you can add the FrameFun registry. From the Julia REPL, type ] to enter Pkg mode and run

pkg> registry add https://github.com/FramefunVC/FrameFunRegistry
pkg> add FrameFun

Legacy

In Julia 1.0, the packages can be installed by cloning their git repository. From the Julia REPL, type ] to enter Pkg mode and run

pkg> add https://github.com/JuliaApproximation/BasisFunctions.jl
pkg> add https://github.com/JuliaApproximation/FrameFun.jl

About

Exploring practical possibilities of approximating functions with frames rather than with a basis

Resources

License

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages