手計算でチェックしたかったので過程をメモ。
以下の二つの関数を畳み込み積分した場合、
![f(x) = \begin{cases} \lambda \exp(-\lambda x) & (x\ge 0) \\ 0 & (x<0) \end{cases} f(x) = \begin{cases} \lambda \exp(-\lambda x) & (x\ge 0) \\ 0 & (x<0) \end{cases}](http://s0.wp.com/latex.php?latex=++f%28x%29+%3D+%5Cbegin%7Bcases%7D++%5Clambda+%5Cexp%28-%5Clambda+x%29+%26+%28x%5Cge+0%29+%5C%5C++0+%26+%28x%3C0%29++%5Cend%7Bcases%7D++&bg=f1f1f1&fg=000000&s=1)
![\displaystyle g(x) = \frac{1}{\sqrt{2\pi}\sigma}\exp\left\{-\frac{(x-\mu)^2}{2\sigma^2}\right\} \displaystyle g(x) = \frac{1}{\sqrt{2\pi}\sigma}\exp\left\{-\frac{(x-\mu)^2}{2\sigma^2}\right\}](http://s0.wp.com/latex.php?latex=++%5Cdisplaystyle+g%28x%29+%3D+%5Cfrac%7B1%7D%7B%5Csqrt%7B2%5Cpi%7D%5Csigma%7D%5Cexp%5Cleft%5C%7B-%5Cfrac%7B%28x-%5Cmu%29%5E2%7D%7B2%5Csigma%5E2%7D%5Cright%5C%7D++&bg=f1f1f1&fg=000000&s=1)
Exponentially modified Gaussian distribution
にあるようにex-Gaussian distributionと呼ばれる分布が出来る。
![\displaystyle f(x)\ast g(x) = \frac{\lambda}{2}e^{\lambda \mu + \frac{1}{2}\lambda^2\sigma^2}e^{-\lambda x}\mbox{erfc}\left(\frac{\mu+\lambda \sigma^2 -x}{\sqrt{2}\sigma}\right) \displaystyle f(x)\ast g(x) = \frac{\lambda}{2}e^{\lambda \mu + \frac{1}{2}\lambda^2\sigma^2}e^{-\lambda x}\mbox{erfc}\left(\frac{\mu+\lambda \sigma^2 -x}{\sqrt{2}\sigma}\right)](http://s0.wp.com/latex.php?latex=++%5Cdisplaystyle+f%28x%29%5Cast+g%28x%29+%3D+%5Cfrac%7B%5Clambda%7D%7B2%7De%5E%7B%5Clambda+%5Cmu+%2B+%5Cfrac%7B1%7D%7B2%7D%5Clambda%5E2%5Csigma%5E2%7De%5E%7B-%5Clambda+x%7D%5Cmbox%7Berfc%7D%5Cleft%28%5Cfrac%7B%5Cmu%2B%5Clambda+%5Csigma%5E2+-x%7D%7B%5Csqrt%7B2%7D%5Csigma%7D%5Cright%29++&bg=f1f1f1&fg=000000&s=1)
ここでerfcはガウスの相補誤差関数(complementary error function)で以下のように定義されている。erfはガウスの誤差関数。
![\displaystyle \mbox{erfc}(x) = 1-\mbox{erf}(x) = \frac{2}{\sqrt{\pi}} \int ^{+\infty}_{x} e^{-t^2}dt \displaystyle \mbox{erfc}(x) = 1-\mbox{erf}(x) = \frac{2}{\sqrt{\pi}} \int ^{+\infty}_{x} e^{-t^2}dt](http://s0.wp.com/latex.php?latex=++%5Cdisplaystyle+%5Cmbox%7Berfc%7D%28x%29+%3D+1-%5Cmbox%7Berf%7D%28x%29+%3D+%5Cfrac%7B2%7D%7B%5Csqrt%7B%5Cpi%7D%7D+%5Cint+%5E%7B%2B%5Cinfty%7D_%7Bx%7D+e%5E%7B-t%5E2%7Ddt++&bg=f1f1f1&fg=000000&s=1)
Convolution of the normal and exponential probability density functions
以下計算、
![\displaystyle f(x)\ast g(x) = \int^{+\infty}_{-\infty} dx'f(x')g(x-x')\\[1.0ex] =\int^{+\infty}_{0} dx' \lambda \exp(-\lambda x') \frac{1}{\sqrt{2\pi}\sigma}\exp\left\{-\frac{(x-x'-\mu)^2}{2\sigma^2}\right\}\\[1.0ex] = \frac{\lambda}{\sqrt{2\pi}\sigma} \int^{+\infty}_{0} dx' \exp\left[-\frac{1}{2\sigma^2} \left\{x'^2+2x'(\mu-x+\lambda \sigma^2)+(x-\mu)^2 \right\} \right]\\[1.0ex] = \frac{\lambda}{\sqrt{2\pi}\sigma} \int^{+\infty}_{0} dx'\exp\left\{-\frac{1}{2\sigma^2}(x'-x+\mu+\lambda \sigma^2)^2 + \frac{1}{2}\lambda^2 \sigma^2 -\lambda x + \lambda \mu \right\}\\[1.0ex] = \frac{\lambda}{\sqrt{2\pi}\sigma} e^{\lambda \mu + \frac{1}{2}\lambda^2\sigma^2}e^{-\lambda x}\int^{+\infty}_{0} dx'\exp\left\{-\frac{1}{2\sigma^2}(x'-x+\mu+\lambda \sigma^2)^2 \right\} \displaystyle f(x)\ast g(x) = \int^{+\infty}_{-\infty} dx'f(x')g(x-x')\\[1.0ex] =\int^{+\infty}_{0} dx' \lambda \exp(-\lambda x') \frac{1}{\sqrt{2\pi}\sigma}\exp\left\{-\frac{(x-x'-\mu)^2}{2\sigma^2}\right\}\\[1.0ex] = \frac{\lambda}{\sqrt{2\pi}\sigma} \int^{+\infty}_{0} dx' \exp\left[-\frac{1}{2\sigma^2} \left\{x'^2+2x'(\mu-x+\lambda \sigma^2)+(x-\mu)^2 \right\} \right]\\[1.0ex] = \frac{\lambda}{\sqrt{2\pi}\sigma} \int^{+\infty}_{0} dx'\exp\left\{-\frac{1}{2\sigma^2}(x'-x+\mu+\lambda \sigma^2)^2 + \frac{1}{2}\lambda^2 \sigma^2 -\lambda x + \lambda \mu \right\}\\[1.0ex] = \frac{\lambda}{\sqrt{2\pi}\sigma} e^{\lambda \mu + \frac{1}{2}\lambda^2\sigma^2}e^{-\lambda x}\int^{+\infty}_{0} dx'\exp\left\{-\frac{1}{2\sigma^2}(x'-x+\mu+\lambda \sigma^2)^2 \right\}](http://s0.wp.com/latex.php?latex=++%5Cdisplaystyle+f%28x%29%5Cast+g%28x%29+%3D+%5Cint%5E%7B%2B%5Cinfty%7D_%7B-%5Cinfty%7D+dx%27f%28x%27%29g%28x-x%27%29%5C%5C%5B1.0ex%5D++%3D%5Cint%5E%7B%2B%5Cinfty%7D_%7B0%7D+dx%27+%5Clambda+%5Cexp%28-%5Clambda+x%27%29+%5Cfrac%7B1%7D%7B%5Csqrt%7B2%5Cpi%7D%5Csigma%7D%5Cexp%5Cleft%5C%7B-%5Cfrac%7B%28x-x%27-%5Cmu%29%5E2%7D%7B2%5Csigma%5E2%7D%5Cright%5C%7D%5C%5C%5B1.0ex%5D++%3D+%5Cfrac%7B%5Clambda%7D%7B%5Csqrt%7B2%5Cpi%7D%5Csigma%7D+%5Cint%5E%7B%2B%5Cinfty%7D_%7B0%7D+dx%27+%5Cexp%5Cleft%5B-%5Cfrac%7B1%7D%7B2%5Csigma%5E2%7D+%5Cleft%5C%7Bx%27%5E2%2B2x%27%28%5Cmu-x%2B%5Clambda+%5Csigma%5E2%29%2B%28x-%5Cmu%29%5E2+%5Cright%5C%7D+%5Cright%5D%5C%5C%5B1.0ex%5D++%3D+%5Cfrac%7B%5Clambda%7D%7B%5Csqrt%7B2%5Cpi%7D%5Csigma%7D+%5Cint%5E%7B%2B%5Cinfty%7D_%7B0%7D+dx%27%5Cexp%5Cleft%5C%7B-%5Cfrac%7B1%7D%7B2%5Csigma%5E2%7D%28x%27-x%2B%5Cmu%2B%5Clambda+%5Csigma%5E2%29%5E2+%2B+%5Cfrac%7B1%7D%7B2%7D%5Clambda%5E2+%5Csigma%5E2+-%5Clambda+x+%2B+%5Clambda+%5Cmu+%5Cright%5C%7D%5C%5C%5B1.0ex%5D++%3D+%5Cfrac%7B%5Clambda%7D%7B%5Csqrt%7B2%5Cpi%7D%5Csigma%7D+e%5E%7B%5Clambda+%5Cmu+%2B+%5Cfrac%7B1%7D%7B2%7D%5Clambda%5E2%5Csigma%5E2%7De%5E%7B-%5Clambda+x%7D%5Cint%5E%7B%2B%5Cinfty%7D_%7B0%7D+dx%27%5Cexp%5Cleft%5C%7B-%5Cfrac%7B1%7D%7B2%5Csigma%5E2%7D%28x%27-x%2B%5Cmu%2B%5Clambda+%5Csigma%5E2%29%5E2+%5Cright%5C%7D++&bg=f1f1f1&fg=000000&s=1)
ここで、変数変換
![\displaystyle z = \frac{1}{\sqrt{2}\sigma}(x'-x+\mu+\lambda \sigma^2), \; dz' = \frac{dx'}{\sqrt{2}\sigma} \displaystyle z = \frac{1}{\sqrt{2}\sigma}(x'-x+\mu+\lambda \sigma^2), \; dz' = \frac{dx'}{\sqrt{2}\sigma}](http://s0.wp.com/latex.php?latex=++%5Cdisplaystyle+z+%3D+%5Cfrac%7B1%7D%7B%5Csqrt%7B2%7D%5Csigma%7D%28x%27-x%2B%5Cmu%2B%5Clambda+%5Csigma%5E2%29%2C+%5C%3B+dz%27+%3D+%5Cfrac%7Bdx%27%7D%7B%5Csqrt%7B2%7D%5Csigma%7D++&bg=f1f1f1&fg=000000&s=1)
とガウスの相補誤差関数の定義を使えば、
![\displaystyle f(x)\ast g(x) = \frac{\lambda}{\sqrt{\pi}} e^{\lambda \mu + \frac{1}{2}\lambda^2\sigma^2}e^{-\lambda x}\int^{+\infty}_{\frac{\mu+\lambda \sigma^2-x}{\sqrt{2}\sigma}} dz e^{-z^2}\\[1.0ex] = \frac{\lambda}{2}e^{\lambda \mu + \frac{1}{2}\lambda^2\sigma^2}e^{-\lambda x}\mbox{erfc}\left(\frac{\mu+\lambda \sigma^2 -x}{\sqrt{2}\sigma}\right)\\ \displaystyle f(x)\ast g(x) = \frac{\lambda}{\sqrt{\pi}} e^{\lambda \mu + \frac{1}{2}\lambda^2\sigma^2}e^{-\lambda x}\int^{+\infty}_{\frac{\mu+\lambda \sigma^2-x}{\sqrt{2}\sigma}} dz e^{-z^2}\\[1.0ex] = \frac{\lambda}{2}e^{\lambda \mu + \frac{1}{2}\lambda^2\sigma^2}e^{-\lambda x}\mbox{erfc}\left(\frac{\mu+\lambda \sigma^2 -x}{\sqrt{2}\sigma}\right)\\](http://s0.wp.com/latex.php?latex=++%5Cdisplaystyle+f%28x%29%5Cast+g%28x%29+%3D+%5Cfrac%7B%5Clambda%7D%7B%5Csqrt%7B%5Cpi%7D%7D+e%5E%7B%5Clambda+%5Cmu+%2B+%5Cfrac%7B1%7D%7B2%7D%5Clambda%5E2%5Csigma%5E2%7De%5E%7B-%5Clambda+x%7D%5Cint%5E%7B%2B%5Cinfty%7D_%7B%5Cfrac%7B%5Cmu%2B%5Clambda+%5Csigma%5E2-x%7D%7B%5Csqrt%7B2%7D%5Csigma%7D%7D+dz+e%5E%7B-z%5E2%7D%5C%5C%5B1.0ex%5D++%3D+%5Cfrac%7B%5Clambda%7D%7B2%7De%5E%7B%5Clambda+%5Cmu+%2B+%5Cfrac%7B1%7D%7B2%7D%5Clambda%5E2%5Csigma%5E2%7De%5E%7B-%5Clambda+x%7D%5Cmbox%7Berfc%7D%5Cleft%28%5Cfrac%7B%5Cmu%2B%5Clambda+%5Csigma%5E2+-x%7D%7B%5Csqrt%7B2%7D%5Csigma%7D%5Cright%29%5C%5C++&bg=f1f1f1&fg=000000&s=1)
が得られる。
Python code
Pythonに用意されてるモジュールについてはnumpy.convolveも参照
結果はこんな感じ。
![convolution_test](http://pacocat.com/wp-content/uploads/convolution_test.png)