逆ラプラス変換である高速ラプラス変換(FILT)に、c++ を適用した。FILTの持つ失速・脱調の要因を検討し、対策を施し、失速・脱調の発生をなくした。これにより、実用的な計算になった。
更に、逆ラプラス変換の計算では、移動則も必要とされるので、FILTで移動則の確認を行った。
また、この逆ラプラス(FILT)を Feedback回路(次章の第6章)、Bode Plot に適用した。
次章6章に、高速ラプラス変換は、Euler変換を使用しているので、Euler変換を 62次 まで記載する。62次までの記載は、順次、行っていく。ホームページの
footer に記載すると、スペースが広くとれるようになったために。
なお、Euler変換は、二項係数が源になっているので、二項係数も同様に、62次まで順次記載する。
1、逆ラプラス変換(コード1) FILTによる計算 (安定系)
計算の動機
"Cによる科学技術計算"小池慎一著に記載の計算をc++/STLにより逆ラプラス変換の計算を行った。しかし、計算
結果が1.0であるべきところが0.8になった。このために、小池氏の逆ラプラス変換の参照本の"BASICによる高速
ラプラス変換"細野敏夫著(共立出版、1984)を調査した。この本の計算は、(1)付録Bの複素関数論による部分分数
展開と(2)オイラー変換を基に計算が行われている。
コードに示すように、ラプラスの逆変換が容易に精度高く計算出来た。今も、この本が学会の論文で引用される
所以が判った。この本を細野本とよぶ。
以下、虚数(√-1)を i、, j 、#i で示す。j は、電気では、電流を i で示す場合があり、これとの混乱を避けるため
に用いる時がある。#iは、繰り返しの i と区別するため。
1)"BASICによる高速ラプラス変換"の付録B"FILTの理論式の誘導"の説明
(1)付録Bの概要
Bromwich積分B.1式の指数関数を近似式で置き換える事で、FILTは成立している。
(B.1)式
この都合のよい近似式(B.2)式は、極を持つ、分母にゼロ点を持つ式である。
(B.2)式
注、細野本の(B.3)式は、a>>Re(s)の時に、(B.2)式が のよい近似である事を示す式。
(B.2)式を部分分数に展開すると、(B.4)式になり、FILTの理論式の導出根拠である。
(B.4)式
(2)付録Bの(B.4)式の因数分解の説明
(B.2)式から(B.4)式の因数分解については、Homepageにて逆ラプラスを記述されている荒畑氏(Tokyo
-pax 南中野パソコン教室 http://www.tokyo-pax.co.jp/tokyopax1
の数式処理ソフトDERIVE(デライブ) de ドライブ))にご教授いただいた。この方は、数学セミナーの
通巻0号にも執筆されている。このご教授いただいた内容を公開し、多くの人の疑問に役立てる。
ご教授いただいた内容を下記に示す。しかし、ご教授内容をそのままでは、失礼にあたるので、(3)にこの
考えの補強を示す。
ご教授内容
まず、(B.2)式内の cosh(a-s) のゼロ点は、s=a+(2n-1)・π・#i/2 となる。(π:パイ) これらは、
すべて、単根となる。ここで、n=-∞ 〜 +∞ まで動く。普通は、s=a+(2n+1)π×#i/2 と書くが、細
野本に合わせて、このように書く。なお、aは、正の実数、#iは、虚数単位である。
(B.2)式の 1/cosh(a-s) の部分は、上記のゼロ点を s(k) と表すと、1/Π(s-s(k))、ここで、Πは、乗積
記号、k=−∞〜+∞ である。この式は、Σb(k)/(s−s(k))のように部分分数に展開される。
このb(k)は、初等的にも、以下を繰り返して、適用する事により求める事はできる。
1/((s-a1)(s-a2))=(1/(a1-a2))(1/(s-a1)-1/(s-a2))
ただ、複素関数論的に、係数 b(k) は s=s(k) での留数そのものであるので、第50回目の留数の章にも記
載したように、
b(k)=lim(s → s(k)) (s-s(k))/cosh(a-s) = (-1)^k・#i と求まる。
従い、(B.2)式は、
exp(a)/2・Σ((-1)^n・#i/(s-(a+(2n-1)π・#i /2))=exp(a)/2・Σ((-1)^n・#i/(s-(a+(n-0.5)π・#i))
となる。結果、(B.4)式と一致する。 注、π は パイ。
補足;第50回目の留数の説明は、南中野パソコン教室の数式処理ソフトDERIVE(デライブ)
de ドライブに記載されている。
(3)付録Bに関する教授内容の補強
a)部分分数分解の初等的な解法
以下の有限個の乗積P(z)があった時、文献(1)のp130のように
(1)式
は、(2)式のように部分分数に分解できる。
(2)式
(2)式の分子の係数b1、b2、... .bn、は (2)式の両辺に(1)式を掛けると(3)式となる。
(3)式
更に、(3)式のzにa1を代入すると、係数b2 項以降は(a1-a1)を持つので、ゼロとなり、b1 の係数のみの
項が残り、以下となる。
従い、b1 は以下の(4)式となる。
(4)式
また、(3)式のzにa2を代入すると、係数b2 の項以外は(a2-a2)のためゼロとなる。
(5)式
同様に、(3)式のzにanを代入すると、係数bnの項以外はゼロとなる。
従い、係数bn は以下の(6)式となる。
(6)式
この場合、係数bn の分母は、有限のn-1個で構成されているので計算できない訳ではない。し
かしながら、無限の個数の場合は、初等的な方法では計算できない。このために、複素関数論
の留数定理を用いて算出する事が必要になる。
b)留数定理による係数bの算出
・cosh(πz)の無限乗積の表現は、ウィキペディア双曲線に記載のように以下となる。
(7)式
上記の(7)式でzを(s-a)/πとして、cosh(s-a)のゼロ点を算出すると、以下となる。
(8)式
この時に、虚数 i の前に±があるので、(7)式のnは-∞から+∞までの値となる。
・1/cosh(a-s)の部分分数展開
b(k)=lim(s→s(k))(s−s(k))/cosh(a-s)= (-1)^k×#i についても、以下のよう
に荒畑氏にまたご教授いただいたので、公開する。
1/cos(z)を部分分数に展開する問題を考える。 ここで、zは、複素数とする。上記の
cos(z)のゼロ点は、(2k-1)π/2、k=−∞〜∞。
留数の定理より、
lim(z->(2k-1)π/2)(z−(2k-1)π/2)/cos(z)=(-1)^k
従って、1/cos(z)=Σ(-1)^k/(z−(2k-1)π/2)となる。
一方、cos(#i*s)=cosh(s)であるので、上式で、zを#i*zと置き換えると、左辺は、
1/cosh(z)となる。#iは虚数単 位とする。右辺は、少し、計算すると、
#i (-1)^k/(z-(2k-1)π#i/2) と変形できる。これは、1/cosh(z)の部分分数の係数が、
#i (-1)^kであることを示している。
荒畑氏に感謝感激。
参考文献 (1) 鈴木紀明著 「数学基礎 複素関数」 培風館(2001)
(4)(B.1)式の指数関数部estの展開式(B,4)式の代入後の式
(B.1)式の指数関数部estに(B.4)式Eec(s・t,a)を代入すると以下の式になる。
(B.6)a式
原文に補足する。ここで、極が s・t=a+j(n-0.5)πであるので、s(n)=[a+j(n-0.5)π]/t にの
みに、F(s) が存在する事になる。従い、
(B.7)式
(B.7)式は、(B.6)aで、留数定理の採用で 1/2πj が消えて、上式のΣ部の時間 tを引き出した
ので、分母に t が存在する。しかし、原文の(-1)^nが(-1)^(n+1)の理由は判らない。誤植だ
ろう。
結論としてFILTの理論式は以下が最終の式となる。
この最終式は、時間 t と伴に F(s) の s として、実数部の a/t と虚数部の (n-0.5)π/t を用い、
F(s) に代入し、F(s) 全体の虚数部を求め、それを集めて、exp(a)/t を掛けた時に、ある t
と a での逆ラプラス値を求める事を言っている。
また、(B.2)式の exp(a)/2cosh(a-s)がexp(s)/(1+exp(-2a+2s)) となるので、sのreal_part(
Re(s)=a/t)<<aならば、exp(-2a+2s)ゼロに近づき、exp(-a)、exp(-2a)で展開できるので、
aの値を大きくとれば近似誤差が小さくなる事を示す。
更に、(-1)^nの交代級数はeuler変換を行えば収束を速める事が出来る。
細野本の付録BのFILTについて、ここまで記載したのは、この本を読もうとすると、図書館にの
みあり、貸出期間も2週間であるために、後日、居住地が変わった時に読もうとしても困難であ
るので、記載した。小池慎一氏の記述は著作権にたいする配慮からかも知れないが、詳細な記述
がなかったので、補足した。
なお、Euler変換については、次章に示す
2) 具体的な計算(コード1)
(1)計算の概略説明
・計算の実質部分を function 文 void reverse で行い、mainは繰返しの制御のみ。
・繰返しの回数は、時間軸であるx軸の長さに対応する。
・function文は、他のfunction文の呼び出しを無くし、単独の文にした。function文の第一ステ
ップでは、始めの数項をそのまま計算し、第二ステップでは、euler変換の計算とした。この
euler変換の詳細は、次章のeuler変換に示す。
euler変換では、変換の次数を61次で、固定した。
・計算では、数値の小さい方からの加算となるようにし、精度低下を防止した。更に、小池本で
の二項係数の算出計算とap[0]の掛け算と割り算を無くし、精度を上げるようにした。
・F(s)の分母分子をそれぞれ計算するようにし、判り易くした。
・c++には<complex>ヘッダーがあるので、imag_unit、real_unitを設け、 s の複素数化の
計算を単純化した。
従い、コードが始めから終わりまで一気通貫になり、単純になった。
・また、打ち切り誤差(trancation)の算出を試みた。
(2)test計算 cosine(細野本、小池本ともに sin を対象にしていたので、変えてみた。)
cosineとしての入力は、cosineのラプラス変換 s/(s^2+1) を計算するのではなく、
(s^3 + 2s^2 + 3s + 0)/(s^4 + 2s^3 + 4s^2 + 2s + 3) ( = s/(s^2 +
1) )
を与え、結果として cosine を求める入力である。
パラメータとして、Euler変換次数 p=61、FILT a=20、細野係数 k1=5、k2=0.5 を用いた。
(3) 計算結果
計算精度は、euler変換次数pとexp(a)のaを大きくすれば、精度が向上する事を確認した。
細野係数と呼ぶべきk=k1+time・k2は、timeの値が増加すると、k値が大きくなり、第一ス
テップの部分和の項数が増える。従い、この部分和の精度が上昇する事になり、結果として計
算精度を上げている。test計算では、固定 k値でないために、計算の発散は無かった。
FILT計算では発散の制御 (k=k1+time・k2)が重要である。
(4)k値制御による発散制御の計算 (本章の 3項を参照ください。)
状況に応じ、k値を変える方法を採った。このk値を変える方法で、上記のcosineを対象に
し、5000個のcosine波の計算を連続して、行ったが、失速・脱調はなかった。
1、Bode Plot ボード線図(コード5)
制御では、各システムのボード線図( Bode Plot )が話題になる。ボード線図は、システムの周波数
特性で、この算出は、ラプラス変換された P(s) で、s=jω と置き、P(s) を虚数部、実数部に分けて、
ω が 0.1 から 10 まで動く時に、システムの絶対値の 20・log|P(s)| と位相の変化を求める計算で
ある。
1)Bode Plot ボード線図作成上の考え方
逆ラプラス変換(FILT)の理論式は、逆ラプラス変換の節に記載した下記の式である。
この式で、実数 a を ゼロにすると、逆ラプラス変換の計算が、虚数 j 項だけの計算となる。この状
態で、(n-0.5)の 0.5 をゼロにすると、nと t で、虚数部の計算が出来て、Bode Plot が得られる。
2)計算の説明
(1)計算対象
1/(s^2+2s+3) の Bode Plot
(2)計算結果
下図に示す。
(3)結果について
コードの試計算で、下記の参考文献"MATLABによる制御工学"のPage 63 にある1/(s^2+s+1)
の場合を計算した。両者のボード線図は同じであった。
従い、計算コードの考えは、妥当である。
2、Feedbac回路計算の一部機能利用計算とボード線図専用計算の比較
Feedback回路計算の一部機能利用とは、次章の第6章に示している計算コードの機能利用、すなわ
ち、パラメータのとり方を意味する。
c++ で、発散・失速対策を施した本章の逆ラプラス変換計算をFeedback回路に適用した計算方法
でも、Bode Plot の計算が出来る事を示す。コードの具体的な詳細は、次章第6章に示す。
1)計算の説明
(1)計算対象 (s^2+0.5s+17)/(s^2+5.0s+4)
(2)計算結果
両コード(Feedback回路計算とBode Plot専用)の比較計算結果を下図に示す。
黄緑と青の中央が谷の曲線が 20log10|G(jω)| を示す。赤と紫の降下上昇の曲線が位相を示す。
両コードの曲線は、左右の軸で、10 dBあるいは10度の差を設けて表示している。
両者、同じであるので、逆ラプラス変換の計算内のBode Plotの計算に誤りが無い事になる。
3、使用したSTLと関数
array<double,n>、vector<complex<double>>、fraction[2].real(real(data))、arg(frac[0])
4、参考文献
・"演習で学ぶPID制御" 森泰親著、東北出版 2009年11月
・"MATLABによる制御工学"、足立修一著、東京電機大学出版
5、感想
逆ラプラス変換 (FILT) で、Bodeplot が可能な事を細野氏、小池氏の本で、まだ、見出していない。
これは、 細野氏や小池氏の時代は、言語の制約があり、複素数を自由に扱う事が出来なかった事に
よる。 しかし、 現在は、STL/vectorの利用で複素数計算が容易になり、コード記述が簡単になった。