version 1.6, 2017/03/30 06:16:36 |
version 1.16, 2019/03/21 00:33:45 |
|
|
%% $OpenXM: OpenXM/src/asir-contrib/packages/doc/gtt_ekn/gtt_ekn-ja.texi,v 1.5 2017/03/03 12:02:32 takayama Exp $ |
%% $OpenXM: OpenXM/src/asir-contrib/packages/doc/gtt_ekn/gtt_ekn-ja.texi,v 1.15 2019/03/20 02:08:55 takayama Exp $ |
%% ptex -kanji=utf8 gtt_ekn.texi (.texi までつける. platex でなく ptex) |
%% xetex gtt_ekn-ja.texi (.texi までつける. ) |
%% 以下コメントは @comment で始める. \input texinfo 以降は普通の tex 命令は使えない. |
%% 以下コメントは @comment で始める. \input texinfo 以降は普通の tex 命令は使えない. |
\input texinfo |
\input texinfo-ja |
@iftex |
@iftex |
@catcode`@#=6 |
@catcode`@#=6 |
@def@fref#1{@xrefX[#1,,@code{#1},,,]} |
@def@fref#1{@xrefX[#1,,@code{#1},,,]} |
@def@b#1{{@bf@gt #1}} |
@def@b#1{{@bf #1}} |
@catcode`@#=@other |
@catcode`@#=@other |
@end iftex |
@end iftex |
@overfullrule=0pt |
@overfullrule=0pt |
|
@documentlanguage ja |
@c -*-texinfo-*- |
@c -*-texinfo-*- |
@comment %**start of header |
@comment %**start of header |
@comment --- おまじない終り --- |
@comment --- おまじない終り --- |
|
|
@comment --- タイトル, バージョン, 著者名, 著作権表示 --- |
@comment --- タイトル, バージョン, 著者名, 著作権表示 --- |
@title 2元分割表HGM関数 |
@title 2元分割表HGM関数 |
@subtitle Risa/Asir 2元分割表HGM関数説明書 |
@subtitle Risa/Asir 2元分割表HGM関数説明書 |
@subtitle 1.1 版 |
@subtitle 1.2 版 |
@subtitle 2017 年 3 月 3 日 |
@subtitle 2019 年 3 月 20 日 |
|
|
@author by Y.Goto, Y.Tachibana, N.Takayama |
@author by Y.Goto, Y.Tachibana, N.Takayama |
@page |
@page |
Line 77 Copyright @copyright{} Risa/Asir committers |
|
Line 78 Copyright @copyright{} Risa/Asir committers |
|
HGM(holonomic gradient method) を用いた2元分割表の関数について説明する. |
HGM(holonomic gradient method) を用いた2元分割表の関数について説明する. |
ChangeLog の項目は www.openxm.org の cvsweb で |
ChangeLog の項目は www.openxm.org の cvsweb で |
ソースコードを読む時の助けになる情報が書かれている. |
ソースコードを読む時の助けになる情報が書かれている. |
|
このパッケージは下記のようにロードする. |
|
@example |
|
load("gtt_ekn3.rr"); |
|
@end example |
|
gtt_ekn3.rr は gtt_ekn.rr を置き換える大きく改良されたパッケージである. |
|
以下のモジュール名 gtt_ekn はすべて gtt_ekn3 と読み替えてほしい. |
|
@noindent |
|
最新版の asir-contrib package を取得するには, 下記のように更新関数を呼び出す. |
|
@example |
|
import("names.rr"); |
|
asir_contrib_update(|update=1); |
|
@end example |
|
@noindent |
本文中で引用している文献を列挙する. |
本文中で引用している文献を列挙する. |
@itemize @bullet |
@itemize @bullet |
@item [GM2016] |
@item [GM2016] |
Line 87 Y.Tachibana, 差分ホロノミック勾配法のモ |
|
Line 100 Y.Tachibana, 差分ホロノミック勾配法のモ |
|
2016, 神戸大学修士論文. |
2016, 神戸大学修士論文. |
@item [GTT2016] |
@item [GTT2016] |
Y.Goto, Y.Tachibana, N.Takayama, 2元分割表に対する差分ホロノミック勾配法の実装, |
Y.Goto, Y.Tachibana, N.Takayama, 2元分割表に対する差分ホロノミック勾配法の実装, |
数理研講究録(掲載予定). |
数理研講究録. |
|
@item [TGKT] |
|
Y.Tachibana, Y.Goto, T.Koyama, N.Takayama, |
|
Holonomic Gradient Method for Two Way Contingency Tables, |
|
arxiv:1803.04170 |
@item [TKT2015] |
@item [TKT2015] |
N.Takayama, S.Kuriki, A.Takemura, |
N.Takayama, S.Kuriki, A.Takemura, |
$A$-hypergeometric distributions and Newton polytopes. |
$A$-hypergeometric distributions and Newton polytopes. |
Line 112 gtt_ekn/test-t1.rr |
|
Line 129 gtt_ekn/test-t1.rr |
|
* gtt_ekn.setup:: |
* gtt_ekn.setup:: |
* gtt_ekn.upAlpha:: |
* gtt_ekn.upAlpha:: |
* gtt_ekn.cmle:: |
* gtt_ekn.cmle:: |
|
* gtt_ekn.set_debug_level:: |
|
* gtt_ekn.contiguity_mat_list_2:: |
|
* gtt_ekn.show_path:: |
|
* gtt_ekn.get_svalue:: |
|
* gtt_ekn.assert1:: |
|
* gtt_ekn.assert2:: |
|
* gtt_ekn.prob2:: |
@end menu |
@end menu |
|
|
@node 超幾何関数E(k,n),,, 2元分割表HGMの関数 |
@node 超幾何関数E(k,n),,, 2元分割表HGMの関数 |
Line 183 b[2][i] は i 列目の列和である. |
|
Line 207 b[2][i] は i 列目の列和である. |
|
@verbatim |
@verbatim |
S=F_D(-b[1,1], [-b[2,2],...,-b[2,n+1]], b[2,1]-b[1,1]+1 ; y)/C, |
S=F_D(-b[1,1], [-b[2,2],...,-b[2,n+1]], b[2,1]-b[1,1]+1 ; y)/C, |
@end verbatim |
@end verbatim |
C=b[1,1]! b[2,2]! ... b[2][n+1]! (b[2,1]-b[1,1])! |
C=b[1,1]! b[2,2]! ... b[2,n+1]! (b[2,1]-b[1,1])! |
とおく. |
とおく. |
1/C は L 字型の分割表 |
1/C は L 字型の分割表 |
@verbatim |
@verbatim |
|
|
@item |
@item |
周辺和 @var{beta}の時の正規化定数のセル確率 @var{p} に対する値は 多項式に退化した E(k,n) の値で表現できる. 文献 [TKT2015], [GM2016] 参照. |
周辺和 @var{beta}の時の正規化定数のセル確率 @var{p} に対する値は 多項式に退化した E(k,n) の値で表現できる. 文献 [TKT2015], [GM2016] 参照. |
@item |
@item |
|
以下の option は expectation でも同じ. |
|
@item |
option crt=1 (crt = Chinese remainder theorem) を与えると, 分散計算をおこなう |
option crt=1 (crt = Chinese remainder theorem) を与えると, 分散計算をおこなう |
[T2016]. |
[T2016]. |
分散計算用の各種パラメータの設定は |
分散計算用の各種パラメータの設定は |
gtt_ekn.setup で行なう. |
gtt_ekn.setup で行なう. |
|
@item |
|
option bs=1. binary splitting method で matrix factorial を計算. |
|
一般に 3x3 では効果あり(assert2(15|bs=1)), 5x5 (test5x5(20|bs=1))では遅くなる. |
|
デフォールトは bs=0. |
|
@item |
|
option path. contiguity を適用する path をきめるアルゴリズムを指定. |
|
path=2 (後藤, 松本の論文の path). path=3 (論文 tgkt の path). |
|
デフォールトは path=3. |
@end itemize |
@end itemize |
|
|
@comment --- @example〜@end example は実行例の表示 --- |
@comment --- @example〜@end example は実行例の表示 --- |
Line 221 gtt_ekn.setup で行なう. |
|
Line 255 gtt_ekn.setup で行なう. |
|
[200/9261] |
[200/9261] |
@end example |
@end example |
|
|
|
例: N を2以上の自然数とする時, Gauss の超幾何関数(この場合は多項式となる) |
|
F(-36N,-11N,2N,(1-1/N)/56) の値は T3 に代入される ( [TGKT] ). |
|
@comment ekn/Prog2/2x2.rr |
|
@example |
|
N=2; |
|
T2=gtt_ekn.gmvector([[36*N,13*N-1],[38*N-1,11*N]],[[1,(1-1/N)/56],[1,1]])[0][0]; |
|
D=fac(36*N)*fac(11*N)*fac(2*N-1); |
|
T3=T2*D; |
|
@end example |
|
ちなみに同じ値を Mathematica に計算させるには |
|
@example |
|
n=2; Hypergeometric2F1[-36*n,-11*n,2*n,(1-1/n)/56] |
|
@end example |
|
|
参考: 2 x m 分割表(Lauricella FD)についてはパッケージ tk_fd でも下記のように同等な |
参考: 2 x m 分割表(Lauricella FD)についてはパッケージ tk_fd でも下記のように同等な |
計算ができる. |
計算ができる. |
守備範囲の異なるプログラム同士の比較, debug 用参考. |
守備範囲の異なるプログラム同士の比較, debug 用参考. |
|
|
@item 上記のoption を指定しなかった場合次のデフォルト値が用いられる. nps=1. nprm=10. fgp=0. |
@item 上記のoption を指定しなかった場合次のデフォルト値が用いられる. nps=1. nprm=10. fgp=0. |
@item option report=1を与えると現在の環境の報告のみを行う. setup(|report=1)の別名としてreport関数を使用することもできる. |
@item option report=1を与えると現在の環境の報告のみを行う. setup(|report=1)の別名としてreport関数を使用することもできる. |
@item option subprogs=[file1,file2,...] により分散計算の子供プロセスにロードすべきファイル file1, file2, ... を指定する. default は subprogs=["gtt_ekn/childprocess.rr"] である. |
@item option subprogs=[file1,file2,...] により分散計算の子供プロセスにロードすべきファイル file1, file2, ... を指定する. default は subprogs=["gtt_ekn/childprocess.rr"] である. |
@item gtt_ekn.set_debug_mode(Mode) で Ekn_debug の値を設定する. |
@item gtt_ekn.set_debug_level(Mode) で Ekn_debug の値を設定する. |
@end itemize |
@end itemize |
|
|
@comment --- @example〜@end example は実行例の表示 --- |
@comment --- @example〜@end example は実行例の表示 --- |
|
|
gtt_ekn.setup(|nps=2,nprm=20,minp=10^10,fgp="p.txt")$ |
gtt_ekn.setup(|nps=2,nprm=20,minp=10^10,fgp="p.txt")$ |
@end example |
@end example |
|
|
|
例: chinese remainder theorem (crt) を使って gmvector を計算. |
|
@example |
|
[2867] gtt_ekn.setup(|nprm=20,minp=10^20); |
|
[2868] N=2; T2=gtt_ekn.gmvector([[36*N,13*N-1],[38*N-1,11*N]], |
|
[[1,(1-1/N)/56],[1,1]] | crt=1)$ |
|
@end example |
|
|
|
|
@comment --- 参照(リンク)を書く --- |
@comment --- 参照(リンク)を書く --- |
@table @t |
@table @t |
@item 参照 |
@item 参照 |
|
|
@comment --- 個々の関数の説明の開始 --- |
@comment --- 個々の関数の説明の開始 --- |
@comment --- section 名を正確に --- |
@comment --- section 名を正確に --- |
@node gtt_ekn.upAlpha,,, 超幾何関数E(k,n) |
@node gtt_ekn.upAlpha,,, 超幾何関数E(k,n) |
@subsection @code{gtt_ekn.upAlpha} |
@node gtt_ekn.downAlpha,,, 超幾何関数E(k,n) |
|
@subsection @code{gtt_ekn.upAlpha}, @code{gtt_ekn.downAlpha} |
@comment --- 索引用キーワード |
@comment --- 索引用キーワード |
@findex gtt_ekn.upAlpha |
@findex gtt_ekn.upAlpha |
|
@findex gtt_ekn.downAlpha |
|
|
@table @t |
@table @t |
@item gtt_ekn.upAlpha(@var{i},@var{k},@var{n}) |
@item gtt_ekn.upAlpha(@var{i},@var{k},@var{n}) |
|
@item gtt_ekn.downAlpha(@var{i},@var{k},@var{n}) |
:: |
:: |
@end table |
@end table |
|
|
@comment --- 引数の簡単な説明 --- 以下まだ書いてない. |
@comment --- 引数の簡単な説明 --- 以下まだ書いてない. |
@table @var |
@table @var |
@item i a_i を a_i+1 と変化させる contiguity relation. |
@item i a_i を a_i+1 (a_i を a_i-1) と変化させる contiguity relation. |
@item k E(k+1,n+k+2)型の超幾何関数の k. 分割表では (k+1)×(n+1). |
@item k E(k+1,n+k+2)型の超幾何関数の k. 分割表では (k+1)×(n+1). |
@item n E(k+1,n+k+2)型の超幾何関数の n. 分割表では (k+1)×(n+1). |
@item n E(k+1,n+k+2)型の超幾何関数の n. 分割表では (k+1)×(n+1). |
@item return contiguity relation の pfaffian_basis についての行列表現を戻す. [GM2016] の Cor 6.3. |
@item return contiguity relation の pfaffian_basis についての行列表現を戻す. [GM2016] の Cor 6.3. |
|
|
@item a_i と分割表の周辺和を見るには, 関数 marginaltoAlpha([行和,列和]) を用いる. |
@item a_i と分割表の周辺和を見るには, 関数 marginaltoAlpha([行和,列和]) を用いる. |
@item |
@item |
pfaffian_basis は [GM2016] の4章のベクトル F に対応する偏微分を戻す. |
pfaffian_basis は [GM2016] の4章のベクトル F に対応する偏微分を戻す. |
|
@item optional 引数 arule, xrule で a_i や x_i_j を数にしたものをより効率的に求めることができる. 変化をうけるパラメータを数にしてしまっても特にエラー表示はしない. a_0 で和の条件を調整しているので注意(Todo, double check). |
@end itemize |
@end itemize |
|
|
@comment --- @example〜@end example は実行例の表示 --- |
@comment --- @example〜@end example は実行例の表示 --- |
|
|
[ f(x_1_1,x_1_2) ] |
[ f(x_1_1,x_1_2) ] |
[ (f{1,0}(x_1_1,x_1_2)*x_1_1)/(a_2) ] |
[ (f{1,0}(x_1_1,x_1_2)*x_1_1)/(a_2) ] |
[ (f{0,1}(x_1_1,x_1_2)*x_1_2)/(a_3) ] |
[ (f{0,1}(x_1_1,x_1_2)*x_1_2)/(a_3) ] |
|
|
|
[2235] RuleA=[[a_2,1/3],[a_3,1/2]]$ RuleX=[[x_1_1,1/5]]$ |
|
base_replace(gtt_ekn.upAlpha(1,1,1),append(RuleA,RuleX)) |
|
-gtt_ekn.upAlpha(1,1,1 | arule=RuleA, xrule=RuleX); |
|
|
|
[ 0 0 ] |
|
[ 0 0 ] |
|
|
@end example |
@end example |
|
|
|
|
|
|
@end itemize |
@end itemize |
@comment end cmle. |
@comment end cmle. |
|
|
|
@comment ********************************************************** |
|
@comment --- ◯◯◯◯ の説明 |
|
@comment --- 個々の関数の説明の開始 --- |
|
@comment --- section 名を正確に --- |
|
@node gtt_ekn.set_debug_level,,, 超幾何関数E(k,n) |
|
@node gtt_ekn.contiguity_mat_list_2,,, 超幾何関数E(k,n) |
|
@node gtt_ekn.show_path,,, 超幾何関数E(k,n) |
|
@node gtt_ekn.get_svalue,,, 超幾何関数E(k,n) |
|
@node gtt_ekn.assert1,,, 超幾何関数E(k,n) |
|
@node gtt_ekn.assert2,,, 超幾何関数E(k,n) |
|
@node gtt_ekn.prob1,,, 超幾何関数E(k,n) |
|
@subsection @code{gtt_ekn.set_debug_level}, @code{gtt_ekn.show_path}, @code{gtt_ekn.get_svalue}, @code{gtt_ekn.assert1}, @code{gtt_ekn.assert2}, @code{gtt_ekn.prob1} |
|
@comment --- 索引用キーワード |
|
@findex gtt_ekn.set_debug_level |
|
@findex gtt_ekn.contiguity_mat_list_2 |
|
@findex gtt_ekn.show_path |
|
@findex gtt_ekn.get_svalue |
|
@findex gtt_ekn.assert1 |
|
@findex gtt_ekn.assert2 |
|
@findex gtt_ekn.prob1 |
|
|
|
@table @t |
|
@item gtt_ekn.set_debug_level(@var{m}) debug メッセージのレベルを設定. |
|
@item gtt_ekn.contiguity_mat_list_2 使用する contiguity を構成. |
|
@item gtt_ekn.show_path() どのように contiguity を適用したかの情報. |
|
@item gtt_ekn.get_svalue() static 変数の値を得る. |
|
@item gtt_ekn.assert1(@var{N}) 2x2 分割表で動作チェック. |
|
@item gtt_ekn.assert2(@var{N}) 3x3 分割表で動作チェック. |
|
@item gtt_ekn.prob1(@var{R1},@var{R2},@var{Size}) R1 x R2 分割表用のテストデータを作る. |
|
:: |
|
@end table |
|
|
|
@comment --- 引数の簡単な説明 --- 以下まだ書いてない. |
|
@table @var |
|
@item m レベル. |
|
@end table |
|
|
|
@comment --- ここで関数の詳しい説明 --- |
|
@comment --- @itemize〜@end itemize は箇条書き --- |
|
@comment --- @bullet は黒点付き --- |
|
@itemize @bullet |
|
@item (@var{m} & 0x1) == 0x1 の時 g_mat_fac_test_plain と g_mat_fac_itor の両方を呼び出し値を比較する (gtt_ekn.setup した状態で). |
|
@item (@var{m} & 0x2) == 0x2 の時 g_mat_fac_test への引数を tmp-input-数.ab として保存. |
|
@item (@var{m} & 0x4) == 0x4 の時 matrix factorial の計算の呼び出し引数を表示. |
|
@item @var{N} は問題の周辺和のサイズ. |
|
@item @code{get_svalue} の戻り値は @code{[Ekn_plist,Ekn_IDL,Ekn_debug,Ekn_mesg,XRule,ARule,Verbose,Ekn_Rq]} の値. |
|
@end itemize |
|
|
|
@comment --- @example〜@end example は実行例の表示 --- |
|
例. |
|
@example |
|
[2846] gtt_ekn.set_debug_level(0x4); |
|
[2847] N=2; T2=gtt_ekn.gmvector([[36*N,13*N-1],[38*N-1,11*N]], |
|
[[1,(1-1/N)/56],[1,1]])$ |
|
[2848] level&0x4: g_mat_fac_test([ 113/112 ] |
|
[ 1/112 ],[ (t+225/112)/(t^2+4*t+4) (111/112*t+111/112)/(t^2+4*t+4) ] |
|
[ (1/112)/(t^2+4*t+4) (111/112*t+111/112)/(t^2+4*t+4) ],0,20,1,t) |
|
Note: we do not use g_mat_fac_itor. Call gtt_ekn.setup(); to use the crt option. |
|
level&0x4: g_mat_fac_test([ 67/62944040755546030080000 ] |
|
[ 1/125888081511092060160000 ],[ (t+24)/(t^2+25*t+46) (2442)/(t^2+25*t+46) ] |
|
[ (1)/(t^2+25*t+46) (-111*t-111)/(t^2+25*t+46) ],0,73,1,t) |
|
level&0x4: g_mat_fac_test ------ snip |
|
@end example |
|
|
|
例. |
|
@example |
|
[2659] gtt_ekn.nc([[4,5],[2,4,3]],[[1,1/2,1/3],[1,1,1]])$ |
|
[2660] L=matrix_transpose(gtt_ekn.show_path())$ |
|
[2661] L[2]; |
|
[1 4 3 2] |
|
@end example |
|
[1 4 3 2] の index をもつパラメーター alpha の方向の contigity を求めそれを掛けて |
|
計算したことがわかる. L[0] は用いた contiguity の行列. |
|
L[1] はcontiguity を適用する step 数. |
|
|
|
例. 値を計算せずに path のみ求めたい場合. |
|
@example |
|
A=gtt_ekn.marginaltoAlpha_list([[400,410,1011],[910,411,500]])$ |
|
[2666] gtt_ekn.contiguity_mat_list_2(A,2,2)$ |
|
[2667] L=matrix_transpose(gtt_ekn.show_path())$ |
|
[2668] L[2]; |
|
[ 2 1 5 4 3 ] |
|
@end example |
|
|
|
例. 値を計算せずに path のみ求めたい場合. |
|
gtt_ekn3 による新しいアルゴリズムによる path の表示. |
|
@example |
|
A=gtt_ekn3.marginaltoAlpha_list([[10,20],[15,15]])$ |
|
[2666] gtt_ekn3.contiguity_mat_list_3(A,1,1 | xrule=[[x_1_1,1/2]])$ |
|
[t,[[ (-t-43/2)/(t-2) (-15/2)/(t-2) ] |
|
[ 1/2 -1/2 ],-9]] |
|
@end example |
|
|
|
例. 0 が戻れば g_mat_fac_plain と指定した計算方法の結果が一致したことがわかる. |
|
option を書かないと g_mat_fac_int との比較となる. |
|
@example |
|
[8859] gtt_ekn.assert2(1); |
|
Marginal=[[130,170,353],[90,119,444]] |
|
P=[[17/100,1,10],[7/50,1,33/10],[1,1,1]] |
|
Try g_mat_fac_test_int: Note: we do not use g_mat_fac_itor. Call gtt_ekn.setup(); to use the crt option. |
|
Timing (int) =0.413916 (CPU) + 0.590723 (GC) = 1.00464 (total), real time=0.990672 |
|
|
|
Try g_mat_fac_test_plain: Note: we do not use g_mat_fac_itor. Call gtt_ekn.setup(); to use the crt option. |
|
Timing (rational) =4.51349 (CPU) + 6.32174 (GC) = 10.8352 (total) |
|
diff of both method = |
|
[ 0 0 0 ] |
|
[ 0 0 0 ] |
|
[ 0 0 0 ] |
|
[8860] |
|
|
|
[8863] gtt_ekn.setup(|nprm=100,minp=10^50); |
|
Number of processes = 1. |
|
Number of primes = 100. |
|
Min of plist = 100000000000000000000000000000000000000000000000151. |
|
0 |
|
[8864] gtt_ekn.assert2(1 | crt=1); |
|
Marginal=[[130,170,353],[90,119,444]] |
|
P=[[17/100,1,10],[7/50,1,33/10],[1,1,1]] |
|
Try [[crt,1]] |
|
---- snip |
|
@end example |
|
なお二番目の例の timing (total) [例では省略] は mod 計算を subprocess がやっているので正しい値ではない. real time が計算時間の目安になる. |
|
|
|
例. |
|
@example |
|
[9054] L=gtt_ekn.prob1(3,5,10 | factor=1, factor_row=3); |
|
[[[10,20,420],[30,60,90,120,150]],[[1,1/2,1/3,1/5,1/7],[1,1/11,1/13,1/17,1/19],[1,1,1,1,1]]] |
|
[9055] number_eval(gtt_ekn.expectation(L[0],L[1])); |
|
[ 0.434161208918863 ... snip ] |
|
@end example |
|
|
|
@comment --- 参照(リンク)を書く --- |
|
@table @t |
|
@item 参照 |
|
@ref{gtt_ekn.nc} |
|
@end table |
|
|
|
@comment --- ChangeLog を書く. ソースコードの位置. 変更日時 など CVSサーバを見るため |
|
@noindent |
|
ChangeLog |
|
@itemize @bullet |
|
@item gtt_ekn/ekn_eval.rr で matrix factorial の計算の呼び出し引数を表示する. |
|
@item grep 'iand(Ekn_debug,0x1)' *.rr でソースコードの該当の位置をさがす. |
|
@end itemize |
|
@comment end set_debug_level |
|
|
|
|
|
|
@node modular計算,,, 2元分割表HGMの関数 |
@node modular計算,,, 2元分割表HGMの関数 |
@chapter modular計算 |
@chapter modular計算 |
|
|
|
|
関連ファイルは |
関連ファイルは |
gtt_ekn/g_mat_fac.rr |
gtt_ekn/g_mat_fac.rr |
gtt_ekn/childprocess.rr |
gtt_ekn/childprocess.rr |
|
@end itemize |
|
|
|
@node binary splitting,,, 2元分割表HGMの関数 |
|
@chapter binary splitting |
|
|
|
@menu |
|
* gtt_ekn3.init_dm_bsplit:: |
|
* gtt_ekn3.setup_dm_bsplit:: |
|
* gtt_ekn3.init_bsplit:: |
|
@end menu |
|
|
|
@node matrix factorial,,, binary splitting |
|
@section matrix factorial |
|
|
|
@comment ********************************************************** |
|
@comment --- ◯◯◯◯ の説明 |
|
@comment --- 個々の関数の説明の開始 --- |
|
@comment --- section 名を正確に --- |
|
@node gtt_ekn3.init_bsplit,,, |
|
@node gtt_ekn3.init_dm_bsplit,,, |
|
@node gtt_ekn3.setup_dm_bsplit,,, |
|
@subsection @code{gtt_ekn3.init_bsplit, gtt_ekn3.init_dm_bsplit, gtt_ekn3.setup_dm_bsplit} |
|
@comment --- 索引用キーワード |
|
@findex gtt_ekn3.init_dm_bsplit matrix factorial |
|
@findex gtt_ekn3.setup_dm_bsplit matrix factorial |
|
@findex gtt_ekn3.init_bsplit matrix factorial |
|
|
|
@table @t |
|
@item gtt_ekn3.init_bsplit(|minsize=16,levelmax=1); |
|
:: binary split の実行のためのパラメータを設定する. |
|
@item gtt_ekn3.init_dm_bsplit(|bsplit_x=0, bsplit_reduce=0) |
|
:: binary split の分散実行のためのパラメータを設定する. |
|
@item gtt_ekn3.setup_dm_bsplit(C) |
|
:: binary split の分散実行のために C 個のプロセスを立ち上げる. |
|
@end table |
|
|
|
@comment --- 引数の簡単な説明 --- 以下まだ書いてない. |
|
@table @var |
|
@item C はlevelmax-1 に設定する. 特に levalmax=1 のときは分散計算を行わない. |
|
@item bsplit_x=1 のとき, debug 用に各プロセスを xterm で表示. |
|
@end table |
|
|
|
@comment --- ここで関数の詳しい説明 --- |
|
@comment --- @itemize〜@end itemize は箇条書き --- |
|
@comment --- @bullet は黒点付き --- |
|
@itemize @bullet |
|
@item expectation などの関数に bs=1 オプションを与えると matrix factorial を binary |
|
splitting method で計算する. |
|
@end itemize |
|
|
|
@comment --- @example〜@end example は実行例の表示 --- |
|
例: bs=1 と無い場合の比較. |
|
@example |
|
[4618] cputime(1)$ |
|
[4619] gtt_ekn3.expectation(Marginal=[[1950,2550,5295],[1350,1785,6660]], |
|
P=[[17/100,1,10],[7/50,1,33/10],[1,1,1]]|bs=1)$ |
|
4.912sec(4.914sec) |
|
[4621] V2=gtt_ekn3.expectation(Marginal=[[1950,2550,5295],[1350,1785,6660]], |
|
P=[[17/100,1,10],[7/50,1,33/10],[1,1,1]])$ |
|
6.752sec(6.756sec) |
|
@end example |
|
|
|
|
|
@comment --- @example〜@end example は実行例の表示 --- |
|
例: 分散計算する場合. |
|
分散計算はかえって遅くなる場合が多いので注意. |
|
下記の例での bsplit_x=1 option は |
|
debug windows を開くのでさらに遅くなる. |
|
gtt_ekn3.test_bs_dist(); でもテストできる. |
|
@example |
|
[3669] C=4$ gtt_ekn3.init_bsplit(|minsize=16,levelmax=C+1)$ gtt_ekn3.init_dm_bsplit(|bsplit_x=1)$ |
|
[3670] [3671] [3672] gtt_ekn3.setup_dm_bsplit(C); |
|
[0,0] |
|
[3673] gtt_ekn3.assert2(10|bs=1)$ |
|
@end example |
|
|
|
@comment --- 参照(リンク)を書く --- |
|
@table @t |
|
@item 参照 |
|
@ref{gtt_ekn3.gmvector} |
|
@ref{gtt_ekn3.expectation} |
|
@ref{gtt_ekn3.assert1} |
|
@ref{gtt_ekn3.assert2} |
|
@end table |
|
|
|
@comment --- ChangeLog を書く. ソースコードの位置. 変更日時 など CVSサーバを見るため |
|
@noindent |
|
ChangeLog |
|
@itemize @bullet |
|
@item |
|
関連ファイルは |
|
gtt_ekn3/mfac_bs.rr |
|
gtt_ekn3/dm_bsplit.rr |
@end itemize |
@end itemize |
|
|
|
|