version 1.8, 2019/02/14 00:18:40 |
version 1.15, 2019/03/20 02:08:55 |
|
|
%% $OpenXM: OpenXM/src/asir-contrib/packages/doc/gtt_ekn/gtt_ekn-ja.texi,v 1.7 2017/08/31 06:31:45 takayama Exp $ |
%% $OpenXM: OpenXM/src/asir-contrib/packages/doc/gtt_ekn/gtt_ekn-ja.texi,v 1.14 2019/03/19 07:36:21 takayama Exp $ |
%% xetex gtt_ekn.texi (.texi までつける. ) |
%% xetex gtt_ekn-ja.texi (.texi までつける. ) |
%% 以下コメントは @comment で始める. \input texinfo 以降は普通の tex 命令は使えない. |
%% 以下コメントは @comment で始める. \input texinfo 以降は普通の tex 命令は使えない. |
\input texinfo-ja |
\input texinfo-ja |
@iftex |
@iftex |
|
|
@title 2元分割表HGM関数 |
@title 2元分割表HGM関数 |
@subtitle Risa/Asir 2元分割表HGM関数説明書 |
@subtitle Risa/Asir 2元分割表HGM関数説明書 |
@subtitle 1.2 版 |
@subtitle 1.2 版 |
@subtitle 2019 年 2 月 14 日 |
@subtitle 2019 年 3 月 20 日 |
|
|
@author by Y.Goto, Y.Tachibana, N.Takayama |
@author by Y.Goto, Y.Tachibana, N.Takayama |
@page |
@page |
Line 80 ChangeLog の項目は www.openxm.org の cvsweb で |
|
Line 80 ChangeLog の項目は www.openxm.org の cvsweb で |
|
ソースコードを読む時の助けになる情報が書かれている. |
ソースコードを読む時の助けになる情報が書かれている. |
このパッケージは下記のようにロードする. |
このパッケージは下記のようにロードする. |
@example |
@example |
load("gtt_ekn.rr"); |
load("gtt_ekn3.rr"); |
@end example |
@end example |
|
gtt_ekn3.rr は gtt_ekn.rr を置き換える大きく改良されたパッケージである. |
|
以下のモジュール名 gtt_ekn はすべて gtt_ekn3 と読み替えてほしい. |
@noindent |
@noindent |
最新版の asir-contrib package を取得するには, 下記のように更新関数を呼び出す. |
最新版の asir-contrib package を取得するには, 下記のように更新関数を呼び出す. |
@example |
@example |
Line 128 gtt_ekn/test-t1.rr |
|
Line 130 gtt_ekn/test-t1.rr |
|
* gtt_ekn.upAlpha:: |
* gtt_ekn.upAlpha:: |
* gtt_ekn.cmle:: |
* gtt_ekn.cmle:: |
* gtt_ekn.set_debug_level:: |
* 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の関数 |
|
|
@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 |
|
|
|
|
|
|
@comment --- 個々の関数の説明の開始 --- |
@comment --- 個々の関数の説明の開始 --- |
@comment --- section 名を正確に --- |
@comment --- section 名を正確に --- |
@node gtt_ekn.set_debug_level,,, 超幾何関数E(k,n) |
@node gtt_ekn.set_debug_level,,, 超幾何関数E(k,n) |
@subsection @code{gtt_ekn.set_debug_level} |
@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 --- 索引用キーワード |
@comment --- 索引用キーワード |
@findex gtt_ekn.set_debug_level |
@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 |
@table @t |
@item gtt_ekn.set_debug_level(@var{m}) debug メッセージのレベルを設定. |
@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 |
@end table |
|
|
|
|
@comment --- @bullet は黒点付き --- |
@comment --- @bullet は黒点付き --- |
@itemize @bullet |
@itemize @bullet |
@item (@var{m} & 0x1) == 0x1 の時 g_mat_fac_test_plain と g_mat_fac_itor の両方を呼び出し値を比較する (gtt_ekn.setup した状態で). |
@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_itor への引数を tmp-input.ab として保存. |
@item (@var{m} & 0x2) == 0x2 の時 g_mat_fac_test への引数を tmp-input-数.ab として保存. |
@item (@var{m} & 0x4) == 0x4 の時 matrix factorial の計算の呼び出し引数を表示. |
@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 |
@end itemize |
|
|
@comment --- @example〜@end example は実行例の表示 --- |
@comment --- @example〜@end example は実行例の表示 --- |
|
例. |
@example |
@example |
[2846] gtt_ekn.set_debug_level(0x4); |
[2846] gtt_ekn.set_debug_level(0x4); |
[2847] N=2; T2=gtt_ekn.gmvector([[36*N,13*N-1],[38*N-1,11*N]], |
[2847] N=2; T2=gtt_ekn.gmvector([[36*N,13*N-1],[38*N-1,11*N]], |
Line 903 level&0x4: g_mat_fac_test([ 67/62944040755546030080000 |
|
Line 944 level&0x4: g_mat_fac_test([ 67/62944040755546030080000 |
|
level&0x4: g_mat_fac_test ------ snip |
level&0x4: g_mat_fac_test ------ snip |
@end example |
@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 --- 参照(リンク)を書く --- |
@comment --- 参照(リンク)を書く --- |
@table @t |
@table @t |
@item 参照 |
@item 参照 |
|
|
関連ファイルは |
関連ファイルは |
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 |
|
|
|
|