# 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 from 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.

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)