平井呈一「真夜中の檻」

こんばんは、皆様、三頌亭です。これも以前出ていた時に紹介しなかった本なので紹介しておきます。久しく以前に読んで感動した作品です。紀田順一郎が編集したアンソロジーで「真夜中の檻」と「エイプリル・フール」を読んだのですが、一読その鏡花風な怪異譚に大変関心したものでした。このあたりは推理界・昭和44年8月号(再録)の紀田順一郎の解説をお読みいただくのが最も近道でしょう。「真夜中の檻」について読んだ当時は少し小栗虫太郎の「白蟻」に感じが似ているなと思ったものでした。翻訳家としてはたくさんのものがある平井呈一ですが、創作については「真夜中の檻」と「エイプリル・フール」のたった2編しか残しませんでした。少し残念なことですね。もう1篇の「エイプリル・フール」もドッペルゲンガーを扱った少し悲しい怪談ですが、これも素晴らしいです。今は纏められて『真夜中の檻』 (創元推理文庫)で読むことができます。いかがでしょうか?。

 

追記:『世界怪奇実話集 屍衣の花嫁 (東西怪奇実話) 』(創元推理文庫)もちょうど新しくまとめられて復刊しておりますのでお知らせしておきましょう。

 

出版社・紹介

「本邦ホラー屈指の傑作として名高い「真夜中の檻」。都会の片隅に芽生えた悲しくも不可思議な恋の物語「エイプリル・フール」。恐怖と浪漫の横溢する創作全二篇に、英米の怪奇作家とその作品、さらには幽霊実話を造詣深く語るエッセイを併録。『吸血鬼ドラキュラ』等の名翻訳家、海外怪奇小説紹介の先駆者として知られる平井呈一の全容を明らかにする、ホラー・ファン垂涎の一冊。」

 

f:id:kms130:20210119001611j:plain

平井呈一「真夜中の檻」01

f:id:kms130:20210119001638j:plain

平井呈一「真夜中の檻」02

f:id:kms130:20210119001704j:plain

平井呈一「真夜中の檻」03

f:id:kms130:20210119001727j:plain

平井呈一「真夜中の檻」04

f:id:kms130:20210119001750j:plain

平井呈一「真夜中の檻」05

 

数値的逆ラプラス変換(Gaver-Stehfest 法について:vba-code作例)

こんばんは、皆様、三頌亭です。数値的逆ラプラス変換のGaver-Stehfest 法についての作例をあげておきます。係数はn=14に固定してあります。逆変換の例はもっとも簡単な指数関数をやってみました。細野法と2つを今までの記事で説明してきましたが、算法の解説に終始してきました。実際使用する人の立場として関連の数学の論文読んでも「具体的にどうやるんだよ!!」という人も多いのではないかと思います。計算法・解説マニュアルめいたものが「BASICによる高速ラプラス変換」(絶版)ぐらいしかないのも残念です。決して悪い手法ではないと思うのですが・・・。そんな思いがこれらの記事を書いた理由でもあります。

 

参照記事

https://kms130.hatenablog.com/entry/2020/12/05/165813

 

Rem  f(t)=exp(-alpha*t) : F(s)=1/(s+alpha)

Public Function Stehfest01(time As Double, alpha As Double) As Double

Dim ind(40) As Double

Dim reg As Double

Dim n As Double

Dim ln As Double

ln = 0.693147180559945

 

ind(1) = 0.0027777778

ind(2) = -6.4027777778

ind(3) = 924.05

ind(4) = -34597.9277777778

ind(5) = 540321.111111111

ind(6) = -4398346.36666667

ind(7) = 21087591.7777778

ind(8) = -63944913.0444444

ind(9) = 127597579.55

ind(10) = -170137188.083333

ind(11) = 150327467.033333

ind(12) = -84592161.4999999

ind(13) = 27478884.7666666

ind(14) = -3925554.96666666

 

If time > 0 Then

For n = 1 To 14

Rem  ラプラス変換関数記述

  reg = reg + 1 / (ln * n / time + alpha) * ind(n)

Rem  ラプラス変換関数記述

Next n

Stehfest01 = ln / time * reg

Else

Stehfest01 = 1

End If

End Function

 

f:id:kms130:20210114212603p:plain

f(t)=exp(-alpha*t) : F(s)=1/(s+alpha)

 

f:id:kms130:20210114224738j:plain

Stehfest table01

f:id:kms130:20210114224828j:plain

Stehfest table02

 

数値的逆ラプラス変換(vba-code+複素数計算vba再掲載:有理関数編)

こんばんは、皆様、三頌亭です。数値的逆ラプラス変換vbaによるユーザー定義関数のプログラムです。これは以前掲載しました有理関数の作例ですが、複素数計算の関数も併せて貼り付けるだけの形にしました。

 

Public Type Complex
x As Double
y As Double
End Type

Function ToComplex(x As Double, y As Double) As Complex
ToComplex.x = x
ToComplex.y = y
End Function


Function Cadd(z1 As Complex, z2 As Complex) As Complex
Cadd.x = z1.x + z2.x
Cadd.y = z1.y + z2.y
End Function

Function Csub(z1 As Complex, z2 As Complex) As Complex
Csub.x = z1.x - z2.x
Csub.y = z1.y - z2.y
End Function


Function Cmul(z1 As Complex, z2 As Complex) As Complex
Cmul.x = z1.x * z2.x - z1.y * z2.y
Cmul.y = z1.y * z2.x + z1.x * z2.y
End Function


Function Cdiv(z1 As Complex, z2 As Complex) As Complex
Dim c As Double
c = z2.x * z2.x + z2.y * z2.y
Cdiv.x = (z1.x * z2.x + z1.y * z2.y) / c
Cdiv.y = (z1.y * z2.x - z1.x * z2.y) / c

End Function


Function Conj(z As Complex) As Complex
Conj.x = z.x
comj.y = -z.y
End Function

Function Rez(z As Complex) As Double
Rez = z.x
End Function

Function Imz(z As Complex) As Double
Imz = z.y
End Function

Function Cabs(z As Complex) As Double
Cabs = Sqr(z.x * z.x + z.y * z.y)
End Function

Function atan2(x, y) As Double
Dim pi As Double

pi = 3.14159265358979
If x = 0# And y = 0# Then
atan2 = 0#
Exit Function
End If

If x = 0# Then
If y > 0 Then
atan2 = pi
Exit Function
Else
atan2 = -pi
Exit Function
End If
End If

If x > 0 Then
atan2 = Atn(y / x)
Else
If y > 0 Then
atan2 = pi + Atn(y / x)
Else
atan2 = -pi + Atn(y / x)
End If
End If

End Function


Function Cexp(z As Complex) As Complex
Cexp.x = Exp(z.x) * Cos(z.y)
Cexp.y = Exp(z.x) * Sin(z.y)
End Function

Function Clog(z As Complex) As Complex
Dim R As Double
R = z.x * z.x + z.y * z.y
If R <> 0 Then
Clog.x = 0.5 * Log(R)
Clog.y = atan2(z.x, z.y)
Else
Clog.x = 0#
Clog.y = 0#
End If
End Function

Function Cpow(z1 As Complex, z2 As Complex) As Complex
Cpow = Cexp(Cmul(Clog(z1), z2))
End Function

Function ccosh(z As Complex) As Complex
ccosh.x = (Exp(z.x) * Cos(z.y) + Exp(-z.x) * Cos(-z.y)) / 2
ccosh.y = (Exp(z.x) * Sin(z.y) + Exp(-z.x) * Sin(-z.y)) / 2
End Function

Function csinh(z As Complex) As Complex
csinh.x = (Exp(z.x) * Cos(z.y) - Exp(-z.x) * Cos(-z.y)) / 2
csinh.y = (Exp(z.x) * Sin(z.y) - Exp(-z.x) * Sin(-z.y)) / 2
End Function

Rem 数値的逆ラプラス変換filt07(t) Hosonoのアルゴリズム----------------------------------
Rem atstp:分母 btstp:分子---ラプラス関数値の算出に必要なパラメータをセル参照-----------
Rem 作例 F(s) = ht(8次多項式)/gt(8次多項式) : 有理関数
Public Function filt07(time As Double, atstp As Variant, btstp As Variant, nts As Integer, p As Double) As Double
Dim ss(10000) As Complex
Dim x1L(10000) As Complex
Dim res(10000) As Double
Dim aa As Double
Dim n As Double
Dim cnt As Double

Rem パラメータ関連・複素数変数
Dim resigma As Double
Dim ared(20, 0) As Double
Dim bred(20, 0) As Double
Dim pi As Double
Dim a01(20) As Complex
Dim b01(20) As Complex
Dim ht(200) As Complex
Dim gt(200) As Complex
Dim ht01 As Complex
Dim ht02 As Complex
Dim ht03 As Complex
Dim ht04 As Complex
Dim gt01 As Complex
Dim gt02 As Complex
Dim gt03 As Complex
Dim gt04 As Complex

Dim ap(500) As Double
Dim cp(500) As Double

Rem 各種定数
pi = 3.14159265358979
Rem オイラー変換係数
cp(0) = 1
ap(p + 1) = 0
For q = 1 To p
cp(q) = cp(q - 1) * (p + 1 - q) / q
Next q
For q = p To 0 Step -1
ap(q) = ap(q + 1) + cp(q)
Next q

Rem パラメータの取り込み・複素数変換
Rem 指定範囲から順番にデータ用セル値を取り出す(次数の高い順a0-a8,b0-b8)
For Each myCell In atstp
ared(cnt, 0) = myCell.Value
a01(cnt) = ToComplex(ared(cnt, 0), 0)
cnt = cnt + 1
Next
cnt = 0
For Each myCell In btstp
bred(cnt, 0) = myCell.Value
b01(cnt) = ToComplex(bred(cnt, 0), 0)
cnt = cnt + 1
Next

Rem 高速ラプラス変換(細野法)
If time > 0 Then
aa = 8

For n = 1 To nts + p
ss(n) = ToComplex(aa / time, (n - 0.5) / time * pi)

Rem ラプラス変換関数 Cadd Csub Cmul Cdiv ToComplex gt01:分母 ht01:分子
gt(7) = ss(n)
gt(6) = Cmul(gt(7), ss(n))
gt(5) = Cmul(gt(6), ss(n))
gt(4) = Cmul(gt(5), ss(n))
gt(3) = Cmul(gt(4), ss(n))
gt(2) = Cmul(gt(3), ss(n))
gt(1) = Cmul(gt(2), ss(n))
gt(0) = Cmul(gt(1), ss(n))

gt01 = a01(8)
gt01 = Cadd(gt01, Cmul(gt(7), a01(7)))
gt01 = Cadd(gt01, Cmul(gt(6), a01(6)))
gt01 = Cadd(gt01, Cmul(gt(5), a01(5)))
gt01 = Cadd(gt01, Cmul(gt(4), a01(4)))
gt01 = Cadd(gt01, Cmul(gt(3), a01(3)))
gt01 = Cadd(gt01, Cmul(gt(2), a01(2)))
gt01 = Cadd(gt01, Cmul(gt(1), a01(1)))
gt01 = Cadd(gt01, Cmul(gt(0), a01(0)))

ht(7) = ss(n)
ht(6) = Cmul(ht(7), ss(n))
ht(5) = Cmul(ht(6), ss(n))
ht(4) = Cmul(ht(5), ss(n))
ht(3) = Cmul(ht(4), ss(n))
ht(2) = Cmul(ht(3), ss(n))
ht(1) = Cmul(ht(2), ss(n))
ht(0) = Cmul(ht(1), ss(n))

ht01 = b01(8)
ht01 = Cadd(ht01, Cmul(ht(7), b01(7)))
ht01 = Cadd(ht01, Cmul(ht(6), b01(6)))
ht01 = Cadd(ht01, Cmul(ht(5), b01(5)))
ht01 = Cadd(ht01, Cmul(ht(4), b01(4)))
ht01 = Cadd(ht01, Cmul(ht(3), b01(3)))
ht01 = Cadd(ht01, Cmul(ht(2), b01(2)))
ht01 = Cadd(ht01, Cmul(ht(1), b01(1)))
ht01 = Cadd(ht01, Cmul(ht(0), b01(0)))

x1L(n) = Cdiv(ht01, gt01)
Rem ラプラス変換関数 Cadd Csub Cmul Cdiv ToComplex

res(n) = Imz(x1L(n)) * (-1) ^ n
Next

Rem nts項分加算
resigma = 0
For n = 1 To nts
resigma = resigma + res(n)
Next

Rem オイラー変換-p項分追加
For i = 1 To p
resigma = resigma + res(nts + i) * ap(i) / 2 ^ (p)
Next
Rem 変換値出力
filt07 = resigma * Exp(aa) / time
Else
Rem t=0の関数値:初期値の出力
filt07 = 0
End If
End Function

Rem 追加 平方根

Function csqr(z As Complex) As Complex
Dim xx As Double
Dim yy As Double
xx = z.x
yy = z.y
R = Sqr((xx) ^ 2 + (yy) ^ 2)
csqr.x = Sqr(xx + R) / Sqr(2)
csqr.y = Sqr(R - xx) / Sqr(2)
If z.y < 0 Then csqr.y = -csqr.y
End Function

 

f:id:kms130:20210110204204p:plain

数値的逆ラプラス変換・有理関数

 

桑田次郎『カワリ大いに笑う』(朝日ソノラマ・サンコミックス)

こんばんは、皆様、三頌亭です。去年のお話ですがコロナ騒ぎの中、漫画家の桑田次郎がひっそりと亡くなってしまいました。謹んでご冥福をお祈りいたします。ということでなにか1作ということで『カワリ大いに笑う』をお持ちいたしました。彼の作品のなかでは非常に地味な作品ですが、往年の美しい描線をお楽しみください。

https://www.mangaz.com/mens/title/index?query=%E6%A1%91%E7%94%B0%E6%AC%A1%E9%83%8E&category=mens

余計なことですが、かつての当たり作『まぼろし探偵』も一部分読めます。

 

三頌亭の記憶にもっともよく残っているのはなんといっても平井和正とタッグを組んだ『8マン』です。桑田次郎の傑出した作画センスと平井和正の原作の良さも相まって彼の代表作でしたね。連載してた頃の「少年マガジン」は50円くらいでしたか・・・、いや古いお話で恐縮ですw。現在で復刻もいろいろ進みまして彼の作品の多くが読める状態になりました。この機会に興味をお持ちいただけたらと思いまして紹介いたしました。

 

f:id:kms130:20210109211917j:plain

桑田次郎『カワリ大いに笑う』

f:id:kms130:20210109212007p:plain

桑田次郎8マン

 

紀田順一郎『われ巷にて殺されん』(双葉社 1983)

こんばんは、皆様、三頌亭です。今日は紀田順一郎の「われ巷にて殺されん」です。特にというわけではないのですが、たまたまブックオフで見つけたもので・・・(^^;)。この作品は改題されて「夜の蔵書家」(古本屋探偵の事件簿 :創元推理文庫)といいます。ちょっとチープな昔の双葉ノベルズの装丁が好きなものですからついつい買ってしまいますw。もういまでは古書店とミステリーの取り合わせも一般的になりまして、三上さんの「ビブリア古書堂」のシリーズをはじめいろんなものがありますが、紀田順一郎の須藤康平がそのはしりでしょう。ただこれは昭和の古書店のお話で、全体としてはロス・マクドナルドリュウ・アーチャ風でしょうか?。謎の出版人を求めて調査していくところがなかなか読ませます。また古書の世界の登場人物はわかるひとにはだれをモデルにしてあるかよくわかる作品となっていて興味が尽きないであろうと思います。須藤康平のシリーズでは「書鬼」があまりにもインパクトが強かったものですから、忘れていた作品なのですが、今読むと非常によくできたミステリーだと思えてくるのが不思議ですw。

f:id:kms130:20210103160927j:plain

紀田順一郎『われ巷にて殺されん』01

f:id:kms130:20210103161004j:plain

紀田順一郎『われ巷にて殺されん』02

 

佐島勤「続・魔法科高校の劣等生 メイジアン・カンパニー」

皆様、明けましておめでとうございます、三頌亭です。今年も相変わらずのピッチの更新ですがよろしくお願い申し上げます。というわけでここ最近、「プログラム」関係の話題を投稿してまいりましたが、息抜きに本の話題ですw。佐島勤「続・魔法科高校の劣等生 メイジアン・カンパニー」ですね。ついに第2シーズン突入の「魔法科高校の劣等生」ですが、以前言った通り、このシリーズは社会人編、会社経営と職業訓練学校の経営という、ライトノベルにはちょっとないユニークな構成となっております。かつての「サラリーマン」小説の末裔と申しますか、組織における規格外ヒーローというのがこの小説の魅力であろうと思ってます。どのような展開になるのか今後の行方を見守りたいとおもうシリーズです。

 

f:id:kms130:20210102231642j:plain

続・魔法科高校の劣等生 メイジアン・カンパニー

 

指数分布による為替変動のシミュレーション・その3

こんばんは、皆様、三頌亭です。さらに小ネタ集の蛇足ですw。今回使った為替レートの生データ(1分足)ですが、どこからどのようにして持ってきたかを具体的に申し上げておきます。Forexiteというサイトでロシアのサイトです。Meta stockの部分でダウンロードできます。その週のデータとその日のデータの一部がアップロードされます。

https://www.forexite.com/free_forex_quotes/forex_history.html

アーカイブは下記のサイトで1年分のものがあります。

https://www.forexite.com/free_forex_quotes/forex_history_arhiv.html

中身はテキストファイルでエクセルに取り込みますと3枚目の画像ののようになります。さて少々ややこしいのが、もうロシアは夏時間やめたらしいのにこのサーバーにはまだ残っていますw。以下要点を書いておきます。

 

夏時間

日本時間の午前7時過ぎにアップロードされます。データのゼロ時間は日本時間午前7時となります。4月の最初の週から始まります。

冬時間

日本時間の午前8時過ぎにアップロードされます。データのゼロ時間は日本時間午前8時となります。10月の最終週からはじまります。

 

双方とも翌日に前日のデータ1日分がアップロードされますが、金曜日のデータ(日本では土曜日)には23時間分のみアップロードされて、日曜日(日本)に残り1時間分がアップロードされるようです。

 

最近知ったのですが、特定の通貨ペアでよければ下記のサイトで20年分あります(1分足です)。Forex TesterやMT4を使ってる人には用はない代物かと思いますが、分析用にでもということでよろしくお願いいたしますw。

https://forextester.jp/data/datasources

追記:Forexiteの1日のデータは分足で1440本ではなくて数本の欠けがあることが多いです。この場合、エクセル上で前の時間と同じ値を用いて補間いたしました。また、前日のデータとしてアップされてくるものは夏時間でしたら日本時間で午前7時ちょうどまでのものです。午前7時1分からが当日のデータです。つまらないことですがレートと時間軸を完全に合わせるためには必要かと思い追記しておきます。

f:id:kms130:20201230224757p:plain

FOREXITE01

f:id:kms130:20201230224847p:plain

FOREXITE-ARCHIVE

f:id:kms130:20201230224930p:plain

エクセルデータ取り込み