In[]:=
Sat 24 Jun 2023 18:21:31
Laplace Transform Tricks
Laplace Transform Tricks
Work around Mathematica inverse Laplace limitations (like here) by using Feynmann trick. Pattern matching only works for ArcTanh/Hypergeometric functions for now.
Fixing “s” and “t” variable names, run the following:
Fixing “s” and “t” variable names, run the following:
In[]:=
expr=ArcTan[Sqrt[s]]/Sqrt[s];ilaplaceMellin[expr]ilaplaceFeynmann[expr]
Out[]=
π
Erfc[t
]2
t
Out[]=
π
Erfc[t
]2
t
Inversion code
Inversion code
Assume all formulas use:
t -- for time variable
s -- for Laplace domain variable
t -- for time variable
s -- for Laplace domain variable
In[]:=
ilaplace[expr_]:=InverseLaplaceTransform[expr,s,t];ilaplace0[expr_]:=Block[{p=2,a=-2,b=1,d=100},InverseLaplaceTransform[expr,s,10.]];(*CustomLaplacetransformsfrom"Hypergeometric"
post
*)(*Mariuszsolutionfromhttps://mathematica.stackexchange.com/a/285338/217
*)augmentInv[expr_,var_]:=Module[{a1,a2,a3,a4,expra},expra=expr/.{ArcTan[a1_]->ArcTan[a1/var],Log[a1_]->Log[a1/var],Hypergeometric2F1[a1_,a2_,a3_,a4_]->Hypergeometric2F1[a1,a2,a3,a4/var]};If[MemberQ[Reduce`FreeVariables[expra],var],expra,expra/var]];ilaplaceMellin0[expr_]:=Block[{expra,mellin,ilap,imellin,s,t,a},expra=augmentInv[expr,a];mellin=FunctionExpand@MellinTransform[expra,a,q];ilap=InverseLaplaceTransform[mellin,s,t];imellin=InverseMellinTransform[ilap,q,a]/.a->1;FullSimplify@imellin];SetAttributes[ilaplaceMellin0,Listable];ilaplaceMellin[expr_]:=Block[{dummy},Distribute@dummy@Expand[expr]/.dummy->ilaplaceMellin0];(*https://zackyzz.github.io/feynman.html*)augment[expr_,var_]:=Module[{a1,a2,a3,a4,expra},expra=expr/.{ArcTan[a1_]->ArcTan[a1var],Log[a1_]->Log[a1var],Hypergeometric2F1[a1_,a2_,a3_,a4_]->Hypergeometric2F1[a1,a2,a3,a4var]};If[MemberQ[Reduce`FreeVariables[expra],var],expra,var*expra]];ilaplaceFeynmann0[expr_]:=Block[{repl,ilap,a1,a2,a3,a4,a},expra=augment[expr,a];ilap=InverseLaplaceTransform[D[expra,a]//Factor,s,t];Assuming[{t>0},Integrate[ilap,{a,0,1}]]];SetAttributes[ilaplaceFeynmann0,Listable];ilaplaceFeynmann[expr_]:=Block[{dummy},Distribute@dummy@Expand[expr]/.dummy->ilaplaceFeynmann0];Evaluate
Evaluate
In[]:=
expr1=ArcTan[Sqrt[2]/Sqrt[s]]/(Sqrt[2]Sqrt[s]);expr2=Hypergeometric2F1[1,1/3,4/3,s];expr3=ArcTan[1/Sqrt[s]]/Sqrt[s];expr4=ArcTan[Sqrt[s]]/Sqrt[s];expr5=ArcTanh[Sqrt[s]]/Sqrt[s]exprs={expr1,expr2,expr3,expr4,expr5};methods={ilaplace,ilaplaceFeynmann,ilaplaceMellin};results=Outer[TimeConstrained[#1[#2],10]&,methods,exprs];TableForm[results,TableHeadings->{{"default","Feynmann","Mellin"},exprs}]
Out[]=
ArcTanh[
s
]s
Out[]//TableForm=
ArcTan 2 s 2 s | Hypergeometric2F1 1 3 4 3 | ArcTan 1 s s | ArcTan[ s ]s | ArcTanh[ s ]s | |
default | -πErf[ 2 t ]-4tHypergeometricPFQ{1,1},3 2 2 2π t | $Aborted | $Aborted | -1+ -t 1 2 -t 1+s 4 1 2 -t 2t | $Aborted |
Feynmann | π 2 2 t ]2 t | $Aborted | π Erf[t ]2 t | π Erfc[t ]2 t | $Aborted |
Mellin | π 2 2 t ]2 t | - 1 3 1 3 | π Erf[t ]2 t | π Erfc[t ]2 t | $Aborted |
Special forms
Special forms
TODO: need to apply Feynmann/Mellin tricks to AcTanh/ArcCoth
In[]:=
expr1=expr2=;expr3=-;expr4=;expr5=;exprs={expr1,expr2,expr3,expr4,expr5};exprs={expr5};methods={ilaplace,ilaplaceFeynmann,ilaplaceMellin};results=Outer[TimeConstrained[#1[#2],10]&,methods,exprs];TableForm[results,TableHeadings->{{"default","Feynmann","Mellin"},exprs}]
ArcTanh
1
s
s
ArcCoth[
s
]s
3-
s
+πCotπ
s
2
π
s
3
s
-πCotπ
s
2
π
s
ArcCoth[
s
]s
Out[]=
ArcTanh
1
s
s
Out[]//TableForm=
ArcCoth[ s ]s | |
default | $Aborted |
Feynmann | $Aborted |
Mellin | $Aborted |
Sanity check
Sanity check