=================================================================== RCS file: /home/cvs/OpenXM/src/asir-contrib/packages/doc/gtt_ekn/gtt_ekn-ja.texi,v retrieving revision 1.15 retrieving revision 1.18 diff -u -p -r1.15 -r1.18 --- OpenXM/src/asir-contrib/packages/doc/gtt_ekn/gtt_ekn-ja.texi 2019/03/20 02:08:55 1.15 +++ OpenXM/src/asir-contrib/packages/doc/gtt_ekn/gtt_ekn-ja.texi 2019/04/09 00:48:14 1.18 @@ -1,4 +1,4 @@ -%% $OpenXM: OpenXM/src/asir-contrib/packages/doc/gtt_ekn/gtt_ekn-ja.texi,v 1.14 2019/03/19 07:36:21 takayama Exp $ +%% $OpenXM: OpenXM/src/asir-contrib/packages/doc/gtt_ekn/gtt_ekn-ja.texi,v 1.17 2019/04/04 22:49:40 takayama Exp $ %% xetex gtt_ekn-ja.texi (.texi までつける. ) %% 以下コメントは @comment で始める. \input texinfo 以降は普通の tex 命令は使えない. \input texinfo-ja @@ -135,7 +135,8 @@ gtt_ekn/test-t1.rr * gtt_ekn.get_svalue:: * gtt_ekn.assert1:: * gtt_ekn.assert2:: -* gtt_ekn.prob2:: +* gtt_ekn.assert3:: +* gtt_ekn.prob1:: @end menu @node 超幾何関数E(k,n),,, 2元分割表HGMの関数 @@ -229,10 +230,27 @@ gmvector は @item 周辺和 @var{beta}の時の正規化定数のセル確率 @var{p} に対する値は 多項式に退化した E(k,n) の値で表現できる. 文献 [TKT2015], [GM2016] 参照. @item +以下の option は expectation その他でも使える. +@item option crt=1 (crt = Chinese remainder theorem) を与えると, 分散計算をおこなう [T2016]. 分散計算用の各種パラメータの設定は 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 (後藤, 松本の論文 [GM2016] の path). path=3 (論文 [TGKT] の path). +デフォールトは path=3. +@item +option interval. 通常の matrix factorial の計算では, 分母と分子をそれぞれ整数計算で計算し最後に約分をする. しかしながら数の中間膨張が一般的に発生しその中間膨張を解消するため +約分を一定間隔で行うと計算効率がよくなる. +interval に整数値を設定することにより行列による一次変換を interval 回するたびに約分を行う. +interval の最適値は問題毎に異なるためシステムがデフォールト値を設定することはない. +@item +option x=1. subprocess 毎に window を開く. @end itemize @comment --- @example〜@end example は実行例の表示 --- @@ -259,6 +277,18 @@ T3=T2*D; n=2; Hypergeometric2F1[-36*n,-11*n,2*n,(1-1/n)/56] @end example +例: interval option +@example +[4009] P=gtt_ekn3.prob1(5,5,100); +[[[100,200,300,400,500],[100,200,300,400,500]],[[1,1/2,1/3,1/5,1/7],[1,1/11,1/13,1/17,1/19],[1,1/23,1/29,1/31,1/37],[1,1/41,1/43,1/47,1/53],[1,1,1,1,1]]] + +[4010] util_timing(quote(gtt_ekn3.gmvector([[100,200,300,400,500],[100,200,300,400,500]], [[1,1/2,1/3,1/5,1/7],[1,1/11,1/13,1/17,1/19],[1,1/23,1/29,1/31,1/37],[1,1/41,1/43,1/47,1/53],[1,1,1,1,1]])))[1]; +[cpu,72.852,gc,0,memory,4462742364,real,72.856] + +[4011] util_timing(quote(gtt_ekn3.gmvector([[100,200,300,400,500],[100,200,300,400,500]], [[1,1/2,1/3,1/5,1/7],[1,1/11,1/13,1/17,1/19],[1,1/23,1/29,1/31,1/37],[1,1/41,1/43,1/47,1/53],[1,1,1,1,1]]|interval=100)))[1]; +[cpu,67.484,gc,0,memory,3535280544,real,67.4844] +@end example + 参考: 2 x m 分割表(Lauricella FD)についてはパッケージ tk_fd でも下記のように同等な 計算ができる. 守備範囲の異なるプログラム同士の比較, debug 用参考. @@ -326,10 +356,14 @@ ChangeLog @item この関数は [GM2016] のアルゴリズムおよび -[T2016] による modular method を用いた高速化を実装したものである. +[T2016] による modular method を用いた高速化, +[TGKT] の高速化を実装したものである. @item 変更を受けたファイルは OpenXM/src/asir-contrib/packages/src/gtt_ekn.rr 1.1, gtt_ekn/ekn_pfaffian_8.rr +@item + interval option について変更を受けたファイルは + OpenXM/src/asir-contrib/packages/src/gtt_ekn3/ekn_eval.rr 1.6 @end itemize @@ -374,6 +408,7 @@ nc は gmvector の値を元に, [GM2016] の Prop option crt=1 (crt = Chinese remainder theorem) を与えると, 分散計算をおこなう. 分散計算用の各種パラメータの設定は gtt_ekn.setup で行なう. +その他の option は gmvector を参照. @end itemize @comment --- @example〜@end example は実行例の表示 --- @@ -520,12 +555,13 @@ ChangeLog @comment --- @bullet は黒点付き --- @itemize @bullet @item -[GM2016] の Algorithm 7.8 の実装. +[GM2016] の Algorithm 7.8 の実装. [TGKT] による高速化版 (path=3) がデフォールト. @item option crt=1 (crt = Chinese remainder theorem) を与えると, 分散計算をおこなう. 分散計算用の各種パラメータの設定は gtt_ekn.setup で行なう. @item option index を与えると, 指定された成分の期待値のみ計算する. たとえば 2 x 2 分割表で index=[[0,0],[1,1]] と指定すると, 1 のある成分の期待値のみ計算する. +@item その他の option は gmvector を参照. @end itemize @comment --- @example〜@end example は実行例の表示 --- @@ -890,8 +926,9 @@ ChangeLog @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.assert3,,, 超幾何関数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} +@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.assert3}, @code{gtt_ekn.prob1} @comment --- 索引用キーワード @findex gtt_ekn.set_debug_level @findex gtt_ekn.contiguity_mat_list_2 @@ -899,6 +936,7 @@ ChangeLog @findex gtt_ekn.get_svalue @findex gtt_ekn.assert1 @findex gtt_ekn.assert2 +@findex gtt_ekn.assert3 @findex gtt_ekn.prob1 @table @t @@ -908,6 +946,7 @@ ChangeLog @item gtt_ekn.get_svalue() static 変数の値を得る. @item gtt_ekn.assert1(@var{N}) 2x2 分割表で動作チェック. @item gtt_ekn.assert2(@var{N}) 3x3 分割表で動作チェック. +@item gtt_ekn.assert3(@var{R1}, @var{R2}, @var{Size}) R1 x R2 分割表で並列動作の動作チェック. @item gtt_ekn.prob1(@var{R1},@var{R2},@var{Size}) R1 x R2 分割表用のテストデータを作る. :: @end table @@ -926,6 +965,8 @@ ChangeLog @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]} の値. +@item assert3 の options: x=1, subprocess の window を表示. nps=m, m 個のプロセスで contiguity を求める (contiguity_mat_list_3). crt, interval などは gmvector などと共通の +option. timing data を表示するには load("gtt_ekn3/ekn_eval-timing.rr"); しておく. @end itemize @comment --- @example〜@end example は実行例の表示 --- @@ -1005,10 +1046,29 @@ Try [[crt,1]] 例. @example +3x5 分割表. 周辺和は 10 に比例する一定の数(factor option も関係. ソースを参照). +cell 確率は1/素数で生成される. +@comment grep testnxn ekn/Prog2/*.rr ; grep test_nxn ekn/Prog2/*.rr も見よ. [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 + +例: +@example +[5779] import("gtt_ekn3.rr"); load("gtt_ekn3/ekn_eval-timing.rr"); +[5780] gtt_ekn3.assert3(5,5,100 | nps=32, interval=100); + -- snip +Parallel method: Number of process=32, File name tmp-gtt_ekn3/p300.txt is written. +Number of processes = 32. + -- snip +initialPoly of path=3: [ 2.184 0 124341044 2.1831 ] [CPU(s),0,*,real(s)] +contiguity_mat_list_3 of path=3: [ 0.04 0 630644 9.6774 ] [CPU(s),0,*,real(s)] +Note: interval option will lead faster evaluation. We do not use g_mat_fac_itor (crt). Call gtt_ekn3.setup(); to use the crt option. +g_mat_fac of path=3: [ 21.644 0 1863290168 21.6457 ] [CPU(s),0,*,real(s)] +Done. Saved in 2.ab +Diff (should be 0)=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,..., 0,0,0] @end example @comment --- 参照(リンク)を書く ---