SAD部屋 - Ticket-41 Diff
- Added parts are displayed like this.
- Deleted parts are displayed
like this.
! LogGamma, Gammaの左半面がおかしい
:Priority:Normal
:Reporter:Akio Morita
:Status:New:Status:Closed
:Assignedto:?to:amorita
:Version:4705
:Milestone:?:Milestone:5163
:Created:2017-11-17
!! Description
* Γ関数の特異点近傍の振る舞いが正しくない
** Gamma[-2] → 6413262697001891 - .7853981633974487 I
** Gamma[-3] → -1425169488222645.8
* LogGammaの左半面の解析接続が滑らかに行われていない
** 負の実軸上以外にも不連続点が存在する
Gamma, LogGammaいずれの実装も、相半公式 $\Gamma(z)\Gamma(1-z)=\frac{\pi}{\sin{\pi z} }$ と $\Gamma(z+1) = z\Gamma(z)$ から得られる
$\Gamma(1+z)\Gamma(1-z)=\frac{\pi z}{\sin{\pi z} }$ を用いて計算する際に評価する
因子$\frac{\pi z}{\sin{\pi z} }$の取扱いから生じている
* 負の整数に対する極限の扱い
** 一般に整数$n$に対する浮動小数点演算$\sin{\pi n}$ は$0$にならない
* 枝の選択
** 枝の切断面が、実軸以外にも複数存在する実装になっている
** zの実部に整数$n$を加える操作に対して、$\sin{\pi n}$の位相が$n\pi$回転する
** 虚軸上では正の実数、$z\rightarrow0$の極限値は$1$なので、位相(log因子の虚部)は虚軸上から滑らかに繋ぐべき
!! Attachement files
{{attach_map('Ticket-41')}}
{{attach_form('','')}}
!! Changelog
!!!Akio Morita (2017-12-26 (火) 10:58:01)
$\log\sin{\pi z}$の位相(分岐)を跨ぐのは負の実軸を越える際なので、$\mathbf{Im}\sin{\pi z} = 0 \, and \, \mathbf{Re}\sin{\pi z} < 0$の条件を洗い出す
$\sin{\pi z} = \sin{\pi x}\cosh{\pi y} + i \cos{\pi x}\sinh{\pi y}\,(z=x+iy)$
$\mathbf{Im}\sin{\pi z} = 0 \leftrightarrow y = 0 \, or \, x = n + \frac{1}{2}\,(n\in\mathbf{Z})$
$\mathbf{Re}\sin{pi z} < 0 \leftrightarrow \sin{\pi x} < 0$
$x = n + \frac{1}{2}$の元で実部は、
$\mathbf{Re}\sin{pi z}|_{z = n + \frac{1}{2} + iy} = e^{i\pi n} \cosh{\pi y}$
従って、'''Log[Sin[Pi * z]]'''を主岐とすると複素平面全域へ滑らかに解析接続するための位相補正は、負の実軸を横切る向きが'''Im[z]'''の符号に依存することを考慮して、実軸上のケースを除き'''-Sign[Im[z]] * 2 * Pi * Floor[(2 * Re[z] + 1) / 4]'''と書ける
==負の実軸上に分岐を入れるので、分岐上の値は、$y \rightarrow +0$もしくは$y \rightarrow -0$の極限のどちらか適当な極限を選ぶ形になる==
負の実軸上では、$i\cos{\pi x}\sinh{\pi y}$の寄与が消えるので、'''Re[z]'''が整数を跨ぐ点で位相が不連続に変わる
単純に補正を主枝に沿って、補正項を書き下すと'''2 * Pi * Floor[Re[z] / 2]'''であるが、これは'''Im[z] \rightarrow -0'''の極限に対応し、'''Im[z] \rightarrow +0'''の極限では位相の回転が逆(複素共役)になる($Re[z] \in [0,1]$での分岐を揃えた場合)
$\Gamma$関数の相反公式では、$\frac{\sin{\pi z}}{\pi z}$の形になるので、$z=0$の零点は$\pi z$と相殺される点にも留意する必要がある
!!!amorita (2017-12-26 (火) 14:13:15)
$\frac{\pi z}{\sin{\pi z}}$の$z \sim 0$での展開形
$\frac{\pi z}{\sin{\pi z}} \sim 1 + \frac{1}{6}(\pi z)^2 + \frac{7}{360}(\pi z)^4 + O(z^6)$
倍精度での近似有効範囲は、$|\pi z| << 0.007$(3項近似)/$|\pi z| << 0.0003$(2項近似)程度
!!!amorita (2017-12-26 (火) 14:22:02)
Tayler展開の適用範囲を決める際の語長依存性を消去するのに、Fortran95の組み込み関数'''SPACING(X)'''('''X'''と最近接値との距離)が使える
打ち切り誤差をSPACING(REAL(1.0, KIND(RESULT)))以下にする範囲に入力を制限すれば良い
今回のケースでは、定数倍と指数関数POWで表現可能な定数式なので、コンパイル時評価で畳み込み可能である
!!!admin (2017-12-26 (火) 17:35:58)
$z = z' + n\pi\, (n \in \mathbf(Z))$に対して一般化すると
$\sin{\pi z} = \sin{n\pi}\cos{\pi z'} + \cos{n\pi}\sin{\pi z'} = e^{\pm i \pi n} \sin{\pi z'}$
$\log{\sin{\pi z}} = \log{\sin{\pi z'}} \pm i \pi n$
!!!amorita (2017-12-26 (火) 23:29:02)
rev.5163にて修正完了
{{its_edit_ticket_form}}
:Priority:Normal
:Reporter:Akio Morita
:Assigned
:Version:4705
:Created:2017-11-17
!! Description
* Γ関数の特異点近傍の振る舞いが正しくない
** Gamma[-2] → 6413262697001891 - .7853981633974487 I
** Gamma[-3] → -1425169488222645.8
* LogGammaの左半面の解析接続が滑らかに行われていない
** 負の実軸上以外にも不連続点が存在する
Gamma, LogGammaいずれの実装も、相半公式 $\Gamma(z)\Gamma(1-z)=\frac{\pi}{\sin{\pi z} }$ と $\Gamma(z+1) = z\Gamma(z)$ から得られる
$\Gamma(1+z)\Gamma(1-z)=\frac{\pi z}{\sin{\pi z} }$ を用いて計算する際に評価する
因子$\frac{\pi z}{\sin{\pi z} }$の取扱いから生じている
* 負の整数に対する極限の扱い
** 一般に整数$n$に対する浮動小数点演算$\sin{\pi n}$ は$0$にならない
* 枝の選択
** 枝の切断面が、実軸以外にも複数存在する実装になっている
** zの実部に整数$n$を加える操作に対して、$\sin{\pi n}$の位相が$n\pi$回転する
** 虚軸上では正の実数、$z\rightarrow0$の極限値は$1$なので、位相(log因子の虚部)は虚軸上から滑らかに繋ぐべき
!! Attachement files
{{attach_map('Ticket-41')}}
{{attach_form('','')}}
!! Changelog
!!!Akio Morita (2017-12-26 (火) 10:58:01)
$\log\sin{\pi z}$の位相(分岐)を跨ぐのは負の実軸を越える際なので、$\mathbf{Im}\sin{\pi z} = 0 \, and \, \mathbf{Re}\sin{\pi z} < 0$の条件を洗い出す
$\sin{\pi z} = \sin{\pi x}\cosh{\pi y} + i \cos{\pi x}\sinh{\pi y}\,(z=x+iy)$
$\mathbf{Im}\sin{\pi z} = 0 \leftrightarrow y = 0 \, or \, x = n + \frac{1}{2}\,(n\in\mathbf{Z})$
$\mathbf{Re}\sin{pi z} < 0 \leftrightarrow \sin{\pi x} < 0$
$x = n + \frac{1}{2}$の元で実部は、
$\mathbf{Re}\sin{pi z}|_{z = n + \frac{1}{2} + iy} = e^{i\pi n} \cosh{\pi y}$
従って、'''Log[Sin[Pi * z]]'''を主岐とすると複素平面全域へ滑らかに解析接続するための位相補正は、負の実軸を横切る向きが'''Im[z]'''の符号に依存することを考慮して、実軸上のケースを除き'''-Sign[Im[z]] * 2 * Pi * Floor[(2 * Re[z] + 1) / 4]'''と書ける
==負の実軸上に分岐を入れるので、分岐上の値は、$y \rightarrow +0$もしくは$y \rightarrow -0$の極限のどちらか適当な極限を選ぶ形になる==
負の実軸上では、$i\cos{\pi x}\sinh{\pi y}$の寄与が消えるので、'''Re[z]'''が整数を跨ぐ点で位相が不連続に変わる
単純に補正を主枝に沿って、補正項を書き下すと'''2 * Pi * Floor[Re[z] / 2]'''であるが、これは'''Im[z] \rightarrow -0'''の極限に対応し、'''Im[z] \rightarrow +0'''の極限では位相の回転が逆(複素共役)になる($Re[z] \in [0,1]$での分岐を揃えた場合)
$\Gamma$関数の相反公式では、$\frac{\sin{\pi z}}{\pi z}$の形になるので、$z=0$の零点は$\pi z$と相殺される点にも留意する必要がある
!!!amorita (2017-12-26 (火) 14:13:15)
$\frac{\pi z}{\sin{\pi z}}$の$z \sim 0$での展開形
$\frac{\pi z}{\sin{\pi z}} \sim 1 + \frac{1}{6}(\pi z)^2 + \frac{7}{360}(\pi z)^4 + O(z^6)$
倍精度での近似有効範囲は、$|\pi z| << 0.007$(3項近似)/$|\pi z| << 0.0003$(2項近似)程度
!!!amorita (2017-12-26 (火) 14:22:02)
Tayler展開の適用範囲を決める際の語長依存性を消去するのに、Fortran95の組み込み関数'''SPACING(X)'''('''X'''と最近接値との距離)が使える
打ち切り誤差をSPACING(REAL(1.0, KIND(RESULT)))以下にする範囲に入力を制限すれば良い
今回のケースでは、定数倍と指数関数POWで表現可能な定数式なので、コンパイル時評価で畳み込み可能である
!!!admin (2017-12-26 (火) 17:35:58)
$z = z' + n\pi\, (n \in \mathbf(Z))$に対して一般化すると
$\sin{\pi z} = \sin{n\pi}\cos{\pi z'} + \cos{n\pi}\sin{\pi z'} = e^{\pm i \pi n} \sin{\pi z'}$
$\log{\sin{\pi z}} = \log{\sin{\pi z'}} \pm i \pi n$
!!!amorita (2017-12-26 (火) 23:29:02)
rev.5163にて修正完了
{{its_edit_ticket_form}}