Skip to content

Regularized inversion of first kind Fredholm integrals.

License

Notifications You must be signed in to change notification settings

MatFi/Fredholm.jl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Fredholm

Usage

As an example, consider input data of the following form

using Fredholm, QuadGK, Random
Random.seed!(1234);

F(t) = exp(-(t - 2)^2 / (2 * 0.3^2)) + exp(-(t - 3)^2 / (2 * 0.3^2))
y(s) =  quadgk(t -> F(t) * exp(-t * s), 0, Inf, rtol=1e-6)[1] 

s = 10.0.^(-2:0.05:1)  # generate discrete example data
ys = map(y, s)         # from this we want to approximate F(t)
noise = (randn(length(ys))) * 0.001 

ti = 0:0.01:5|> collect #define the t-domain for the solution
α = 1.2e-4
t, yt, ss, yss= invert(s, ys .+ noise, ti, (t, s) -> exp(-t * s), Tikhonov(α))

The solution yt at discrete t will very much depend on the choice of the regularization parameter α. If more noise is present in the data a higher α should be picked and vice versa. The variables ss and yss contain the regularized form of s and ys, where ss[end] contians the y-offset. If invert is called with the keyword yoffset=false ss and s will be equal.

example

To allow the solution to take also negative amplitudes use the tdomain = :real keyword

t, yt = invert(s, ys .+ noise, ti, (t, s) -> exp(-t * s), Tikhonov(α), tdomain=:real)

In cases that the regularization parameter α is not known beforehand one can estimate it via the L-Curve method by calling

t, yt = invert(s, ys .+ noise, ti, (t, s) -> exp(-t * s), LCurve(Tikhonov(α)), tdomain=:real)

About

Regularized inversion of first kind Fredholm integrals.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages