PRDLG/DPRDLG(積対数 Product Logarithm)
作成 二宮 市三  2003年6月 
形式 関数 言語:FORTRAN 140行,195行 C言語 113行,171行


概要
PRDLG(DPRDLG) は単(倍)精度実数 xに対して積対数 PRDLG(x) を単(倍)精度 で計算する。積対数は y = x exp(x)の逆関数で (-∞, -1/e)では未定義, [-1/e, 0)では2値関数で分岐点 (-1/e, -1)によって正分 枝 (関数値 >= -1)と 負分枝 (関数値 < -1)に分かれる。
使用法
(1)
PRDLG(ib, x), DPRDLG(ib, d)
ibは第二引数が負の場合の分枝を表す整数変数で, ib = 0は正の分枝を, ib = 1は負の分枝を意味する。
x(d)は単(倍)精度の任意の式である。 DPRDLG には倍精度の宣言が必要。
(2)
引数の範囲: x >= -1/e, d >= -1/e
(3)
エラー処理:範囲外の引数が与えられた場合にはエラーメッセージを 印刷し,関数値を0として計算を続行する。( FNERST 参照)

計算法
積対数は簡単な関数の逆関数であるからその計算には反復法が利用できる。 しかし本関数プログラムでは可能な限り最良有理近似式を用いる。 次表の番号欄の負号は負の分枝を,次数欄は有理式の分子/分母の次数を表す。
番号 区間 変数変換 計算式 次数(単) 次数(倍)
-1 (-2e-2, 0) u = log(-x) Halley法    
-2 (-e-1, -2e-2) u = √(e x + 1) R-2(u) 3/3 6/6
1 (-e-1, -e-1/2) u = √(e x + 1) R1(u) 3/3 6/6
2 (-e-1/2, 0) x xR2(x) 3/3 6/6
3 (0, e-1) x xR3(x) 3/3 6/6
4 (e-1, 1) u = log(x) R4(u) 3/3 6/6
5 (1, e) u = log(x) R5(u) 3/3 6/6
6 (e, e3) u = log(x) - 1 R6(u) 3/3 6/6
7 (e3, ∞) u = log(x) Halley法    

一元方程式 f(y) = 0を反復式 yn+1 = yn - f/(f ' - ff ''/2f ')によって解く方法をHalley法といい,3次の収束性をもつ。
積対数の場合は x = y exp(y)を変形した f(y) = log(y) + y - u, (u = log(|x|))を解く


Yohsuke HOSODA 平成15年6月6日