Here is my attempt at an answer - I had to make up an example, and obviously much of what follows is dependent on details of this example.
Edit
However, what I believe this example shows quite clearly is that a finite set of tabulated data at discrete points does not suffice to guarantee a good inverse Laplace transform, because the analytic structure of the function that interpolates between these data points is not uniquely determined by a finite number of points. You'll need additional information beyond the data table to get a correct inverse transform.
End edit
Let's start with a known function and its known Laplace transform, so we have something to compare the numerical results to:
originalFunction[t_] := t^4 Sin[t];
l[s_] := Evaluate[LaplaceTransform[originalFunction[t], t, s]];
Now I sample the Laplace transform l
at discrete points to simulate the data that would be the given quantities of the problem:
data = Table[{s, l[s]}, {s, -5, 5, .1}];
The numerical inversion of this Laplace transform now can be performed by assuming a fit to the data that has a sufficiently simple functional form that allows us to do the inversion. I'll make the ansatz that we can fit the data with a rational function, leaving the degree of the numerator and denominator as parameters that may have to be adjusted by trial and error:
fit[s_] := Evaluate[
Block[{numeratorN = 5, denominatorN = 8},
rationalFunction =
Total[Array[a, numeratorN + 1] s^Range[0, numeratorN]]/
Total[Array[b, denominatorN + 1] s^Range[0, denominatorN]];
rationalFunction /.
FindFit[data, rationalFunction,
Join[Array[a, numeratorN + 1], Array[b, denominatorN + 1]], s]]];
This fit function looks promising if we check the plot versus the data points:
Show[ListPlot[data, PlotRange -> All],
Plot[fit[s], {s, -5, 5}, PlotRange -> All]]
So we might feel somewhat confident that the inversion will work as follows:
fitInverse[t_] := Evaluate[InverseLaplaceTransform[fit[s], s, t]];
Unfortunately, the result isn't too good:
Plot[{originalFunction[t], Re@fitInverse[t]}, {t, -1, 1},
PlotStyle -> {Directive[Thick, Red], Directive[Blue, Dashed]}]
The red curve is the original function that we're trying to recover with the inverse Laplace transform. This is a problem that will be hard to avoid in practice. In my example, I can indeed make the fit work out much better by just increasing the degree of the denominator to get a faster fall-off at infinity:
fit[s_] := Evaluate[
Block[{numeratorN = 5, denominatorN = 10},
rationalFunction =
Total[Array[a, numeratorN + 1] s^Range[0, numeratorN]]/
Total[Array[b, denominatorN + 1] s^Range[0, denominatorN]];
rationalFunction /.
FindFit[data, rationalFunction,
Join[Array[a, numeratorN + 1], Array[b, denominatorN + 1]], s]]];
Show[ListPlot[data, PlotRange -> All],
Plot[fit[s], {s, -5, 5}, PlotRange -> All]]
In the plot interval chosen here, you won't see any difference in the fit, compared to the first attempt. But the small change is enough to make the inversion work:
fitInverse[t_] := Evaluate[InverseLaplaceTransform[fit[s], s, t]];
Plot[{originalFunction[t], Re@fitInverse[t]}, {t, -1, 1},
PlotStyle -> {Directive[Thick, Red], Directive[Yellow, Dashed]}]
The numerical inverse and the target function lie on top of each other now. So that's how you can do it in principle: Get a good fit to the data that also has the "correct" asymptotic behavior (i.e., falls off in the way you expect based on the physics or other knowledge about your data). Then do the InverseLaplaceTransform
on that fit and hope for the best.