白黒部屋のねこたまご

気ままに花咲く思索の庭園。物語や理系関連に対し益体もないことを呟くブログ。

切り立った崖をなだらかに。二重指数関数変換のススメ

はじめての数学記事です(実を言うと専門は物理)。

 

 

最近、プログラミングに組み込むと大変便利だということで二重指数関数変換積分の存在を教わったのですが、

ちょっとこれに感動しちゃったので記事にして紹介。

 

どっちにしても手計算でやるには面倒だけどプログラミングに組み込むうえではこれがあるとほんとに便利。

これ発見したの日本人だって。すごいね。いやほんとにすごいと思う。

 

 

 

 

 

二重指数関数変換とは

 

Wiki見てもイメージがつかめないので、超ざっくり一言でいうと、

 

切り立った関数をなだらかにする。

 

というものが、この二重指数関数変換。
 

切り立った関数というのは、一点だけが極端にとんがってたり、局地的な変化を示すような関数のこと。

要するに手計算で積分するにはめっちゃむずな関数。

それでも、そんな関数を正確に、誤差を少なく便利に計算したい…!ってときにこの二重指数関数変換をほどこすと、局地的に切り立った関数が全体的になだらかになり、大変計算しやすくなるんだぞってことです。





具体的にやることを言うと、たとえばある関数f(x)があるとき

その関数に二重指数関数的に減衰する関数(x = \phi(t) )を施して、積分領域を広めてやるということをしてあげるのです。

だから二重指数関数”変換”というんですね。

なぜ二重指数関数がいいのかというと、これをほどこした後の積分とほどこす前の積分との誤差が非常に小さくなるのが二重指数関数だからという理由。
一応その証明もありますが、ここでは割愛。



んで、ほどこす二重指数関数にもいくつかパターンに応じた最適なものというのがある。
たとえば

\int\ _{-1}^{1}  f(x)  dx

形式の場合、この形式に応じた最適の二重指数関数\phi(t)

\phi(t) = tanh(\frac{\pi}{2} sinh t)

となる。

他にも
 

\int\ _{0}^{\infty} f(x) dx  \  \ => \  \  x = exp(\frac{\pi}{2} sinh t)

\int\ _{0}^{\infty} f(x) exp(-x) dx  \  \ => \  \  x = exp(t - exp(-t))

\int\ _{-\infty}^{\infty} f(x) dx  \  \ => \  \  x = sinh(\frac{\pi}{2} sinh t)

 

などといったパターンがあります。
 

 

 

実例を見てみよう。






f:id:yuiegg:20181102215522p:plain
 
 

Excelでちょちょっと作った適当な関数。

 

関数f(x)

f(x) = \frac{(3 - x)}{(1 - x)^\frac{1}{5}\ (1 + x)^\frac{5}{8}}\\


というクソみたいな関数に設定。


ー1と1で無限大に発散するということで、積分領域は

-1 \leq\ x \leq\ 1

とする。





これが先で言った”切り立った関数”の一例。
だが、このままでは計算がめんどすぎて嫌になる。




ということで使うのが二重指数関数変換なのだが、具体的にどうするかというと、
この関数は

\int\ _{-1}^{1}  f(x)  dx

の形式なので、この形式に応じた最適の二重指数関数として、

x = \phi(t) = tanh(\frac{\pi}{2} sinh t)

を施してあげる。



f:id:yuiegg:20181103194814p:plain


tanhなので\phi(t)は-1から1までの値域で、一方tはどこまでも行ける。


んでこの\phi(t)xと同じ(このグラフの縦軸がxと同じ)なので、
xは有限の範囲でも、その変数tは無制限という新たな関数が生まれる。


なのでf(\phi(t))tのグラフをとってあげれば、元と同じ関数でありながら無限の範囲の積分が出来る
積分領域を拡大し、きりたった崖をなだらかにしてあげることができるのです。


ちなみにそのグラフがこんな感じ。

f:id:yuiegg:20181103195450p:plain


さきほども言ったように、このtに制限はありません。
xがー1と1で発散したのに対し、このtはどこまでいっても発散することはない。


横軸がtになったので最終的にはこういう積分の式になります。

I = \int\ _{-\infty}^{\infty} f(\phi(t)) \phi'(t) dt












台形公式の導入

こっから先の積分は、台形公式を使った積分をする。


具体的にやることは、

関数を等間隔の幅hずつで区切り、そうしてできる横h,縦f(h)の面積をひたすら足していく。





区分求積法みたいな感じ。


実際に式で書くと、

\displaystyle I _h = h \sum _{k = -\infty}^{\infty} f(\phi(kh)) \phi'(kh)



この和を無限項ではなく有限項で打ち切った{I _h}^{N}を求め、I - I _hI _h - {I _h}^{N}の値がほぼ等しくするようにすれば、完成。














以上。


どこでこんなの使うんだよって話になりそうですが、とんちんかんな関数の積分計算に文句を言ってくるプログラムにこれを組み込んだりして、計算を進めていったりするのです。
まあ…それ以外おもいつかないけど。


というわけで今日は数学のお話でした。