This is a library for the TAME method for Inverse Laplace Transform authored by Nikita Deniskin and Federico Poloni.
git clone https://github.com/numpi/tame-ilt
# Computes weights and nodes of TAME with N=10 points; use a circle of radius 1 as domain
>> tame_method = AAAweights(10,'Zshape','circle','r',1)
# Eliminate conjugate nodes, to use only N'=5 evaluations
>> tame_method = cleanup_conjugates(tame_method)
# f(t) = exp(-t) has Laplace Transform g(s) = 1/(s+1)
# Inverse Laplace transform of g(s), evaluated in t=1
>> format long
>> t = 1
>> ilt(@(s) 1/(s+1), t, tame_method)
ans =
0.367879441171427
# exact value
>> exp(-t)
ans =
0.367879441171442
# Comparison with other methods
>> euler_method = ILTweights(5,'euler')
>> ilt(@(s) 1/(s+1), t, euler_method)
ans =
0.375004429853690For a Fluid Queue with uniformization rate lambda
>> tame_method = AAAweights(n,'Zshape','circle','r',lambda)For a Laplace-Stieltjes function
>> tame_method = AAAweights(n,'Zshape','line','r',lambda)To load the pre-computed classic methods, use
>> load_methods_doubleIf f(t) is a function with Laplace Transform g(s), a function handle to g is needed
>> g = @(s) 1/(s+1)The ILT is computed at time t as
>> t = 1
>> ilt(g, t, tame_method)Compare to classical methods
>> euler_method = ILTweights(n,'euler')To visualize the nodes, the weights, the Dirac approximants, the error of rational approximation, use functions
draw_GrowthMagnitudeWeights.mdraw_IncreasingMagnitudeNodesWeights.mdraw_IncreasingNodesWeights.mdraw_MagnitudeNodesWeights.mdraw_NodesWeights.mexpapprox.mscript_delta.mlx
See folder experiments/ for test problems and comparison between methods. Available:
script_ExperimentMFFM.mlxscript_ExperimentB.mlxscript_ExperimentCTMC.mlxscript_ExperimentDEfunctions.mlx