数値的逆ラプラス変換(複素数計算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

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

これがないとメインのラプラス変換のプログラムが動かないです。複素数計算のパッケージです。

数値的逆ラプラス変換(vba-code)

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

Rem パラメータ関連・複素数変数
Dim resigma As Double
Dim ared(50, 2) As Double
Dim bred(50, 2) As Double
Dim pi As Double
Dim a01(50) As Complex
Dim b01(50) As Complex
Dim ht(50) As Complex
Dim gt(50) 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

Rem 各種定数
pi = 3.14159265358979

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 + 10
         ss(n) = ToComplex(aa / time, (n - 0.5) / time * pi)

        Rem ラプラス変換関数 Cadd Csub Cmul Cdiv ToComplex F(ss(n))算出 
        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 オイラー変換-10項分追加
resigma = resigma + (res(nts + 1) * 1023 + res(nts + 2) * 1013 + res(nts + 3) * 968 + res(nts + 4) * 848 + res(nts + 5) * 638 ) / 2 ^ 10
resigma = resigma + (res(nts + 6) * 386 + res(nts + 7) * 176 + res(nts + 8) * 56 + res(nts + 9) * 11 + res(nts + 10)) / 2 ^ 10

Rem 変換値出力
filt06 = resigma * Exp(aa) / time
Else
Rem t=0の関数値:初期値の出力
filt06 = 0
End If
End Function

 有理関数の数値的逆ラプラス変換vbaのコードです。ユーザー定義関数の形にしてあります。解説は後程です。

滝口康彦『異聞浪人記』(講談社文庫など:初出1958年)

 

こんばんは、皆様、三頌亭です。これも以前紹介したことがありますが、再度ということで持ち出してきました。滝口康彦『異聞浪人記』であります。この作品はミステリ色の強い短編小説で、三頌亭の記憶によく残っているものです。滝口康彦の他の作品を読むきっかけになりました。とはいうものの、この作品には本当に見事な映画化がありまして、「切腹」といいます。三頌亭の持論ではありますが、映画でミステリーの面白さと映画本来の面白さをバランスよく表現したものが少ないのではないかと思っております。映画「切腹」は三頌亭の数少ない満足のいくミステリー映画のうちの一つです。何やらうまく自分の言葉で表現できないのでネットを調べておりましたら、配給元の松竹のサイトにぴったりのキャッチコピーがありましたので紹介しておきますw。

 

「男の切腹志願の理由が分かるミステリー要素の強い前半から、後半はその伏線が一気に回収され、別のジャンルの映画に変わっていく。張り詰めた緊迫感とスリルはエンタメ映画の最高峰。制度に怒りを抱えた男の行動は現代的でもある。」

(画像はよくないのですがこちらで視聴可能です。余談ですが音楽が武満徹ですごいです。)

https://archive.org/details/video.guru20191109171500947

 

映画「切腹

原作

滝口康彦

監督

小林正樹

脚色

橋本忍

出演

津雲半四郎           仲代達矢俳優座

千々岩求女           石濱朗

美保       岩下志麻

稲葉丹後              三島雅夫俳優座

矢崎隼人              中谷一郎俳優座

福島正勝              佐藤慶

千々岩陣内           稲葉義男(俳優座

井伊家使番A       井川比佐志(俳優座

井伊家使番B       武内亨(俳優座

川辺右馬介           青木義朗

清兵衛    松村達雄

井伊家使番C       小林昭二

代診       林孝一

槍大将    五味勝雄

新免一郎              安住譲

人足組頭              富田仲次郎

沢潟彦九郎           丹波哲郎

斎藤勘解由           三國連太郎東映

 

公開:1962年9月16日

上映時間:133分

 

f:id:kms130:20201121211755j:plain

映画「切腹」01

f:id:kms130:20201121211839j:plain

映画「切腹」02

 

アリステア・マクリーン「荒鷲の要塞」 (ハヤカワ文庫 NV)

こんばんは、皆様、三頌亭です。今日はアリステア・マクリーン荒鷲の要塞」を紹介いたします。以前、「ナヴァロンの要塞」を紹介したことがありましたが、あの作品がマクリーン初体験の本でした(映画版のほうが先なんですけどねw)。ところで本格ミステリファンの方って冒険小説とかハードボイルド小説とか苦手という方もままいるんじゃないかと思います。そんな方のためにこれは面白いじゃないかと取り出してきたのが「荒鷲の要塞」です。アクションシーンてんこもりでプロットはミステリー、全体は冒険小説という珍品でしょうw。読むのは面倒だという方には映画版があります。もともと本作はマクリーンによる映画のシナリオ版のノヴェライゼーションです。小説版と少し設定は違うところもありますが、全般的にはオッケーですw。映画のほうはクリント・イーストウッドがいいですねーw。名優リチャード・バートンと私的には「ホラーの女王」イングリッド・ピットと楽しいです。

 

出版社紹介

「連合軍の一将軍がドイツ軍に捕われた。彼はヨーロッパ反攻計画の全貌を知る人物で、ただちに救出せねばならない。監禁された場所はアルプス山中にそそりたつ鉄壁のゲシュタポ本部。英国情報部のスミス少佐らは吹雪をついて決死の潜入を図った。が、敵は、ゲシュタポだけではなかった。仲間の中にナチの二重スパイが紛れ込んでいたのだ! 強烈なスリルとアクション、二重三重のどんでん返し─冒険小説の王者の最高傑作!」

 

映画あらすじ

第二次世界大戦の最中、ヨーロッパ大陸反攻作戦を担当するアメリカ陸軍の将軍、カーナビーが飛行機事故によりドイツ軍の捕虜となる。連合国の最重要機密の漏えいを防ぐため、イギリス軍情報部(MI6)のローランド提督とターナー大佐は救出作戦を立案。スミス少佐を中心とするイギリス軍情報部員6名と、アメリカ陸軍レンジャー(英語版)のシェイファー中尉からなる混成部隊が結成される。

 

カーナビー将軍が収容されているのは、アルプス山脈の断崖絶壁に建てられた「鷲の城」(Schloss Adler)と渾名される難攻不落の城塞である。一行はカーナビー将軍救出のため、この「鷲の城」に向かう。」

 

f:id:kms130:20201117000550j:plain

荒鷲の要塞01

f:id:kms130:20201117000636j:plain

荒鷲の要塞02

 

笹本祐一「妖精作戦」(創元SF文庫)

こんばんは、皆様、三頌亭です。以前、秋山瑞人イリヤの空、UFOの夏」という作品を紹介したことがあったかと思います。そのときこちらの作品、笹本祐一妖精作戦」のことも紹介したかったのですが、スペースの加減で見送りましたw。仄聞するところによりますと秋山瑞人さんの「イリヤの空、UFOの夏」は笹本祐一妖精作戦」のラストに衝撃を受けて書かれたものだそうです。「イリヤの空、UFOの夏」を読んだとき、すぐイメージしたのが笹本祐一妖精作戦」でした。この作品にはいまではライトノベルの定番シーンとなってしまったものがぎっしり詰め込まれています。いささか古くなってしまった感は否めないのですが、リアルタイムで読み逃した方にお勧めしておきましょう。因みに元版はソノラマ文庫でした。

 

出版社紹介

妖精作戦 (創元SF文庫)

「夏休みの最後の夜、オールナイト映画をハシゴした高校二年の榊は、早朝の新宿駅で一人の少女に出会う。小牧ノブ―この日、彼の高校へ転校してきた同学年の女子であり、超国家組織に追われる並外れた超能力の持ち主だった。彼女を守るべく雇われた私立探偵の奮闘むなしくさらわれてしまうが、友人たちは後を追い横須賀港に停泊する巨大原潜に侵入する。歴史を変えた4部作開幕。」

 

ハレーション・ゴースト (妖精作戦 PARTII)

「間近に迫る学園祭での上映に向け、2年B組の面々は自主制作SF映画の撮影に追われている。ある日、彼らのいる建物だけを地震が襲った。ついで理科標本室での剥製の始祖鳥が羽ばたき、大温室ではドラキュラ伯爵が出現してヒロイン役の子をさらう。追跡のさなか沖田は氷島陽子と名乗る女生徒と出会った…。彼らは無事に学園祭当日を迎えられるのか。忘れがたい余韻を残す名編。」

 

カーニバル・ナイト (妖精作戦PARTIII)

「再度の小牧ノブ誘拐のためSCFは女子転校生を星南学園へ送り込む。和紗結希―思念のみでTNT火薬20トン相当の破壊力を生み出すサイコ・クラッシャー。これを受け探偵・平沢が再び星南学園に出没、事態を察した沖田たちは結希の正体に気づきながらも、お近づきになろうとデート作戦を繰り広げ…そして学園一帯は戦場と化す。SCFのミッション名は“カーニバル・ナイト”。」

 

ラスト・レター (妖精作戦IV)

「星南学園一帯での戦闘により、ノブは和紗結希に連れ去られ、長い一夜が明けた。しかし、失意の榊の耳にノブの声が届く―「わたしはここよ、あなたはどこ?」。奪還を誓う榊たちは、ノブの居場所を厚木基地と断定し、ふたたび果てしない追跡を開始した…。迫りくる決戦のときを前に明かされる、この世界が直面しているおそるべき真実とは。永遠の名作シリーズ、衝撃の完結編。」

 

f:id:kms130:20201008235946j:plain

妖精作戦01

f:id:kms130:20201009000028j:plain

妖精作戦02

f:id:kms130:20201009000052j:plain

妖精作戦03

f:id:kms130:20201009000119j:plain

妖精作戦04

 

矢野徹「自殺潜水艦突撃せよ」 (角川文庫1980年)

こんばんは、皆様、三頌亭です。これも以前読んだものなかからご紹介いたします。SF作家・矢野徹のものとすれば代表作とは言えないでしょう。古い読者ならマンガになった「地球0年」や劇場アニメになった「カムイの剣」のほうがよくご記憶のことでしょう。

 

この作品集はマンガ雑誌「少年」に掲載された「自殺潜水艦突撃せよ」と「南太平洋0号作戦」を収録しています。戦争という現実に想を得たファンタジーというか、少し分類の難しいユニークな作品となっております。特に「自殺潜水艦突撃せよ」のラストには素直に感動させられました。なにかこう彼の翻訳したロバート・ネイサン「夢の国をゆく帆船」に通ずるものがあって面白い作品です。

 

追記:文庫の表紙と内容のミスマッチが素晴らしいですww

 

出版社紹介

『第2次世界大戦のさなか、敵の銃弾や飛行機が飛び交う中、海上に不時着した味方の兵士の命を救う使命をおびた潜水艦があった。その名は通称・自殺潜水艦。本当の名を強行救助潜水艦といった。が、実際には救助作業は敵味方の区別はつけられなかった。捕虜となるのを潔しとしない敵国兵士。また、敵と誤認して発砲してしまう味方兵士ら…自殺潜水艦の乗組員(クルー)には、さまざまな困難と危険が待っていた。人命の尊さと、人間の勇気とを讃える感動の戦争冒険小説。「南太平洋0号作戦」を併録。』

 

f:id:kms130:20200922211923j:plain

矢野徹「自殺潜水艦突撃せよ」

 

トマス・フラナガン「アデスタを吹く冷たい風 」(ハヤカワ・ミステリ文庫)

こんばんは、皆様、三頌亭です。今日は以前読んだものの中から紹介いたします。作者は推理小説プロパーではありませんので、この作品集のみがミステリー分野での全集となります。トマス・フラナガンは大学の先生でアイルランド文学の研究者でした。「アデスタを吹く冷たい風 」には以下の7編が収録されています。そのうちテナント少佐の活躍する短編は「*」をつけた4編となります。

 

玉を懐いて罪ありThe Fine Italian Hand(1949年)

アデスタを吹く冷たい風 The Cold Wind of Adesta(1952年)*

良心の問題 The Point of Honor(1952年)*

獅子のたてがみ The Lion's Mane(1953年)*

うまくいつたようだわね This Will Do Nicely(1955年)

国のしきたり The Customs of The Country(1956年)*

もし君が陪審員なら Suppose You Were on the Jury(1958年)

 

三頌亭がもっと好きな短編は「玉を懐いて罪あり」です。密室のトリックもさることながら最後に記名された名前に良質の歴史ミステリであることを感じます。因みに表題「玉を懐いて罪あり」は中国の故事「匹夫罪なし、玉を懐いて罪あり」に依ります。

 

f:id:kms130:20200921201941j:plain

トマス・フラナガン01

f:id:kms130:20200921202003j:plain

トマス・フラナガン02