数値的逆ラプラス変換(Gaver-Stehfest 法について)


こんばんは、皆様、三頌亭です。このまえから解説してます逆ラプラス変換方法ですが、ご参考までに細野法ではない、Gaver-Stehfest 法について簡単にご説明いたします。まあ大体、利用者の立場としては「能書きはいいから早くプログラムをよこせ!」というのがよくあるお話ですねww。

ところでGaver-Stehfest 法についてですが複素数を必要とせず、実数のみで計算が完了いたします。ラプラス変換済みの関数F(s)にそのまま実数s=Ln(2)*n/time(n=1~20程度まで)を入力してF(s)の関数値を計算いたします。それぞれの値に定まった係数をかけて加算していきます。総和にLn(2)/timeを掛けて、timeにおける時間次元の関数値f(time)とします。因みにかける係数は下記のとおりです。一番下の画像に一般式をお示します。

 

vv(1) = -5.51146384479718E-06

vv(2) = 0.152386463844797

vv(3) = -117.465476190476

vv(4) = 17342.4493386243

vv(5) = -922806.928902116

vv(6) = 23774087.7871031

vv(7) = -349421166.19537

vv(8) = 3241369852.23187

vv(9) = -20276948307.2378

vv(10) = 89464829823.7973

vv(11) = -287020921147.103

vv(12) = 682992010281.513

vv(13) = -1219082330054.38

vv(14) = 1637573800842.02

vv(15) = -1647177486836.12

vv(16) = 1221924554444.23

vv(17) = -648806558817.535

vv(18) = 233316653213.707

vv(19) = -50913800705.4676

vv(20) = 5091380070.54676

 

値をご覧になればお分かりになると思いますが、振動してどんどん大きくなりますw。なのでnを大きくとると相対誤差が非常に悪くなってしまいます。一応、一般のnについて係数を計算するvbaのコードを紹介いたします(金融工学の論文からのコピーです。貼り付ければそのままで動作します)。

 https://www.researchgate.net/publication/228310935_Option_Pricing_with_Jumps

 一番最後の部分がそうです。

Rem StehfestCoefficients returns coefficients in Stehfest inversion formula
Function StehfestCoefficients(Nterms As Integer) As Variant
Dim i As Integer, j As Integer, k As Integer, nh As Integer, sn As Integer, nn As Integer
nh = Nterms / 2 'Must be even
Nterms = 2 * nh
ReDim Coeffs(0 To Nterms) As Double, g(0 To Nterms) As Double, h(0 To nh) As Double
g(0) = 1
For i = 1 To Nterms
g(i) = g(i - 1) * i
Next i
h(1) = 2# / g(nh - 1)
For i = 2 To nh
h(i) = Exp(nh * Log(i)) * g(2 * i) / (g(nh - i) * g(i) * g(i - 1))
Next i
If nh Mod 2 = 0 Then sn = 1 Else sn = -1
For i = 1 To Nterms
Coeffs(i) = 0
If i < nh Then nn = i Else nn = nh
j = Int( (i + 1) / 2)
For k = j To nn
Coeffs(i) = Coeffs(i) + h(k) / (g(i - k) * g(2 * k - i))
Next k
sn = -sn
Coeffs(i) = Coeffs(i) * sn
Next i
StehfestCoefficients = Coeffs
End Function

とりあえず、正確に動作するようです。一般に発散していく関数については数値的逆ラプラス変換は不正確な値になりやすいです。

 

参考書(^^;)

 ALAN M. COHEN 「NUMERICAL METHODS FOR LAPLACE TRANSFORM INVERSION」
http://fulviofrisone.com/attachments/article/462/Springer%20-%20Numerical%20Methods%20for%20Laplace%20Transform%20Inversion%20-%202007.pdf

 

追記:因みに項数nはどのぐらいがいいのかという問題があるのですが、上記の論文では10-20の偶数がいいそうです。いくつか使ってる論文当たってみたのですが14か16とかぐらいが多いようです。わたしはめんどくさいので20個に固定して先計算した値を上記のようにして貼り付けて使ってましたw。

 

f:id:kms130:20201205165713j:plain

Gaver-Stehfest 法

 

f:id:kms130:20201205181525p:plain

Stehfest table CALCULATION-FORMULA