[BACK]Return to gtt_ekn-ja.texi CVS log [TXT][DIR] Up to [local] / OpenXM / src / asir-contrib / packages / doc / gtt_ekn

Annotation of OpenXM/src/asir-contrib/packages/doc/gtt_ekn/gtt_ekn-ja.texi, Revision 1.3

1.3     ! takayama    1: %% $OpenXM: OpenXM/src/asir-contrib/packages/doc/gtt_ekn/gtt_ekn-ja.texi,v 1.2 2016/03/26 05:25:35 takayama Exp $
        !             2: %% ptex -kanji euc gtt_ekn.texi   (.texi までつける. platex でなく ptex)
        !             3: %% 以下コメントは @comment で始める.  \input texinfo 以降は普通の tex 命令は使えない.
1.1       takayama    4: \input texinfo
                      5: @iftex
                      6: @catcode`@#=6
                      7: @def@fref#1{@xrefX[#1,,@code{#1},,,]}
                      8: @def@b#1{{@bf@gt #1}}
                      9: @catcode`@#=@other
                     10: @end iftex
                     11: @overfullrule=0pt
                     12: @c -*-texinfo-*-
                     13: @comment %**start of header
1.3     ! takayama   14: @comment --- おまじない終り ---
1.1       takayama   15:
1.3     ! takayama   16: @comment --- GNU info ファイルの名前 ---
1.1       takayama   17: @setfilename xyzman
                     18:
1.3     ! takayama   19: @comment --- タイトル ---
        !            20: @settitle 2元分割表HGM
1.1       takayama   21:
                     22: @comment %**end of header
                     23: @comment %@setchapternewpage odd
                     24:
1.3     ! takayama   25: @comment --- おまじない ---
1.1       takayama   26: @ifinfo
                     27: @macro fref{name}
                     28: @ref{\name\,,@code{\name\}}
                     29: @end macro
                     30: @end ifinfo
                     31:
                     32: @iftex
                     33: @comment @finalout
                     34: @end iftex
                     35:
                     36: @titlepage
1.3     ! takayama   37: @comment --- おまじない終り ---
1.1       takayama   38:
1.3     ! takayama   39: @comment --- タイトル, バージョン, 著者名, 著作権表示 ---
        !            40: @title 2元分割表HGM関数
        !            41: @subtitle Risa/Asir 2元分割表HGM関数説明書
        !            42: @subtitle 1.0 版
        !            43: @subtitle 2016 年 3 月 22 日
1.1       takayama   44:
                     45: @author  by Y.Goto, Y.Tachibana, N.Takayama
                     46: @page
                     47: @vskip 0pt plus 1filll
                     48: Copyright @copyright{} Risa/Asir committers
                     49: 2004--2010. All rights reserved.
                     50: @end titlepage
                     51:
1.3     ! takayama   52: @comment --- おまじない ---
1.1       takayama   53: @synindex vr fn
1.3     ! takayama   54: @comment --- おまじない終り ---
1.1       takayama   55:
1.3     ! takayama   56: @comment --- @node は GNU info, HTML 用 ---
        !            57: @comment --- @node  の引数は node-name,  next,  previous,  up ---
1.1       takayama   58: @node Top,, (dir), (dir)
                     59:
1.3     ! takayama   60: @comment --- @menu は GNU info, HTML 用 ---
        !            61: @comment --- chapter 名を正確に並べる ---
        !            62: @comment --- この文書では chapter XYZ, Chapter Index がある.
        !            63: @comment ---  Chapter XYZ には section XYZについて, section XYZに関する関数がある.
1.1       takayama   64: @menu
1.3     ! takayama   65: * 2元分割表HGMの関数説明書について::
        !            66: * 2元分割表HGMの関数::
1.1       takayama   67: * Index::
                     68: @end menu
                     69:
1.3     ! takayama   70: @comment --- chapter の開始 ---
        !            71: @comment --- 親 chapter 名を正確に. 親がない場合は Top ---
        !            72: @node 2元分割表HGMの関数説明書について,,, Top
        !            73: @chapter 2元分割表HGMの関数説明書について
        !            74:
        !            75: この説明書では
        !            76: HGM(holonomic gradient method) を用いた2元分割表の関数について説明する.
        !            77: ChangeLog の項目は www.openxm.org の cvsweb で
        !            78: ソースコードを読む時の助けになる情報が書かれている.
1.1       takayama   79:
1.3     ! takayama   80: 本文中で引用している文献を列挙する.
1.1       takayama   81: @itemize @bullet
                     82: @item [GM2016]
                     83: Y.Goto, K.Matsumoto, Pfaffian equations and contiguity relations of the hypergeometric function of type (k+1,k+n+2) and their applications, arxiv:1602.01637 (version 1)
                     84: @item [T2016]
1.3     ! takayama   85: Y.Tachibana, 差分ホロノミック勾配法のモジュラーメソッドによる計算の高速化,
        !            86: 2016, 神戸大学修士論文.
1.1       takayama   87: @item [GTT2016]
1.3     ! takayama   88: Y.Goto, Y.Tachibana, N.Takayama, 2元分割表に対する差分ホロノミック勾配法の実装,
        !            89: 数理研講究録(掲載予定).
1.1       takayama   90: @item [TKT2015]
                     91: N.Takayama, S.Kuriki, A.Takemura,
                     92:          $A$-hypergeometric distributions and Newton polytopes.
                     93:          arxiv:1510.02269
                     94: @end itemize
                     95:
1.3     ! takayama   96: このマニュアルで説明する関数を用いたプログラム例は
1.1       takayama   97: gtt_ekn/test-t1.rr
1.3     ! takayama   98: など.
1.1       takayama   99:
1.3     ! takayama  100: @node 2元分割表HGMの関数,,, Top
        !           101: @chapter 2元分割表HGMの関数
1.1       takayama  102:
1.3     ! takayama  103: @comment --- section ``実験的関数'' の subsection xyz_abc
        !           104: @comment --- subsection xyz_pqr xyz_stu がある.
1.1       takayama  105: @menu
                    106: * gtt_ekn.gmvector::
                    107: * gtt_ekn.nc::
                    108: * gtt_ekn.lognc::
                    109: * gtt_ekn.expectation::
                    110: * gtt_ekn.setup::
                    111: * gtt_ekn.upAlpha::
                    112: @end menu
                    113:
1.3     ! takayama  114: @node 超幾何関数E(k,n),,, 2元分割表HGMの関数
        !           115: @section 超幾何関数E(k,n)
1.1       takayama  116:
                    117: @comment **********************************************************
1.3     ! takayama  118: @comment --- ◯◯◯◯  の説明
        !           119: @comment --- 個々の関数の説明の開始 ---
        !           120: @comment --- section 名を正確に ---
        !           121: @node gtt_ekn.gmvector,,, 超幾何関数E(k,n)
1.1       takayama  122: @subsection @code{gtt_ekn.gmvector}
1.3     ! takayama  123: @comment --- 索引用キーワード
1.1       takayama  124: @findex gtt_ekn.gmvector
                    125:
                    126: @table @t
                    127: @item gtt_ekn.gmvector(@var{beta},@var{p})
1.3     ! takayama  128: :: 周辺和 @var{beta}, セルの確率 @var{p} の二元分割表に付随する超幾何関数
        !           129: E(k,n) の値およびその微分の値を戻す.
1.1       takayama  130: @item gtt_ekn.ekn_cBasis_2(@var{beta},@var{p})
1.3     ! takayama  131: の別名である.
1.1       takayama  132: @end table
                    133:
1.3     ! takayama  134: @comment --- 引数の簡単な説明 ---  以下まだ書いてない.
1.1       takayama  135: @table @var
                    136: @item return
1.3     ! takayama  137: ベクトル, 超幾何関数の値とその微分. 詳しくは下記.
1.1       takayama  138: @item beta
1.3     ! takayama  139: 行和, 列和のリスト. 成分はすべて正であること.
1.1       takayama  140: @item p
1.3     ! takayama  141: 二元分割表のセルの確率のリスト
1.1       takayama  142: @end table
                    143:
1.3     ! takayama  144: @comment --- ここで関数の詳しい説明 ---
        !           145: @comment --- @itemize〜@end itemize は箇条書き ---
        !           146: @comment --- @bullet は黒点付き ---
1.1       takayama  147: @itemize @bullet
                    148: @item
1.3     ! takayama  149: gmvector は Gauss-Manin vector の略である [GM2016].
1.1       takayama  150: @item
1.3     ! takayama  151: gmvector の戻り値は
        !           152: [GM2016] の 6章 p.23 のベクトル Sである.
        !           153: これは
        !           154: [GM2016] の4章で定義されているベクトル F の定数倍であり,
        !           155: その定数は
        !           156: 第一成分が [GM2016] の6章で定義されている級数 S の値と等しく
        !           157: なるように決められている.
1.1       takayama  158: @item
1.3     ! takayama  159:  r1 x r2 分割表を考える.
        !           160:  m+1=r1, n+1=r2 とおく.
        !           161:  正規化定数 Z は分割表 u を (m+1) × (n+1) 行列とするとき p^u/u! の和である.
        !           162:  ここで和は行和列和が @var{beta} であるような u 全体でとる
1.1       takayama  163:  [TKT2015], [GM2016].
1.3     ! takayama  164:  S はこの多項式 Z の p を
1.1       takayama  165: @verbatim
                    166:   [[1,y11,...,y1n],
                    167:    [1,y21,...,y2n],...,
                    168:    [1,ym1, ...,ymn],
                    169:    [1,1, ..., 1]]
                    170: @end verbatim
1.3     ! takayama  171:  (1 が L 字型に並ぶ),
        !           172: と正規化した級数である.
1.1       takayama  173: @item
1.3     ! takayama  174: 2x(n+1)分割表で, gmvector の戻り値を Lauricella  F_D で書くことが
        !           175: 以下のようにできる
        !           176: (b[2][1]-b[1][1] >= 0 の場合).
        !           177: ここで b[1][1], b[1][2] は, それぞれ 1 行目の行和, 2 行目の行和,
        !           178: b[2][i] は i 列目の列和である.
1.1       takayama  179: @comment ekn/Talks/2015-12-3-goto.tex
                    180: @verbatim
                    181: S=F_D(-b[1,1], [-b[2,2],...,-b[2,n+1]], b[2,1]-b[1,1]+1 ; y)/C,
                    182: @end verbatim
                    183: C=b[1,1]! b[2,2]! ... b[2][n+1]! (b[2,1]-b[1,1])!
1.3     ! takayama  184: とおく.
        !           185: 1/C は L 字型の分割表
1.1       takayama  186: @verbatim
                    187: [[b[1,1],       0,      ..., 0       ],
                    188:  [b[2,1]-b[1,1],b[2,2], ..., b[2,n+1]]]
                    189: @end verbatim
1.3     ! takayama  190: に対応.
        !           191: gmvector は
1.1       takayama  192: @verbatim
                    193: [S,(y11/a2) d_11 S,(y12/a3) d_12 S, ..., (y1n/a_(n+1)) d_1n S]
                    194: @end verbatim
1.3     ! takayama  195: である.
        !           196: ここで d_ij は yij についての微分,
1.1       takayama  197: @verbatim
                    198:   [a0,     a1, ...                      ,a_(n+2)]
                    199: = [-b[1,2],-b[1,1],b[2,2], ..., b[2,n+1],b[2,1]]
                    200: @end verbatim
1.3     ! takayama  201: である.
1.1       takayama  202: @item
1.3     ! takayama  203: 周辺和 @var{beta}の時の正規化定数のセル確率 @var{p} に対する値は 多項式に退化した E(k,n) の値で表現できる. 文献 [TKT2015], [GM2016] 参照.
1.1       takayama  204: @item
1.3     ! takayama  205: option crt=1 (crt = Chinese remainder theorem) を与えると, 分散計算をおこなう
1.1       takayama  206: [T2016].
1.3     ! takayama  207: 分散計算用の各種パラメータの設定は
        !           208: gtt_ekn.setup で行なう.
1.1       takayama  209: @end itemize
                    210:
1.3     ! takayama  211: @comment --- @example〜@end example は実行例の表示 ---
        !           212: 例: 次は2 x 2 分割表で行和が [5,1],  列和が [3,3], 各セルの確率が
        !           213: [[1/2,1/3],[1/7,1/5]] の場合の gmvector の値である.
1.1       takayama  214: @example
                    215: [3000] load("gtt_ekn.rr");
                    216: [3001] ekn_gtt.gmvector([[5,1],[3,3]],[[1/2,1/3],[1/7,1/5]])
                    217: [775/27783]
                    218: [200/9261]
                    219: @end example
                    220:
1.3     ! takayama  221: 参考: 2 x m 分割表(Lauricella FD)についてはパッケージ tk_fd でも下記のように同等な
        !           222: 計算ができる.
        !           223: 守備範囲の異なるプログラム同士の比較, debug 用参考.
1.1       takayama  224: @example
                    225: [3080] import("tk_fd.rr");
                    226: [3081] A=tk_fd.marginal2abc([4,5],[2,4,3]);
1.3     ! takayama  227: [-4,[-4,-3],-1]  // 2変数 FD のパラメータ. a,[b1,b2],c
1.1       takayama  228: [3082] tk_fd.fd_hessian2(A[0],A[1],A[2],[1/2,1/3]);
                    229: Computing Dmat(ca) for parameters B=[-4,-3],X=[ 1/2 1/3 ]
                    230: [4483/124416,[ 1961/15552 185/1728 ],
                    231:  [ 79/288 259/864 ]
                    232:  [ 259/864 47/288 ]]
1.3     ! takayama  233: // 戻値は [F=F_D, gradient(F), Hessian(F)]
1.1       takayama  234:
1.3     ! takayama  235: // ekn_gt での例と同じパラメータ.
1.1       takayama  236: [3543] A=tk_fd.marginal2abc([5,1],[3,3]);
                    237: [-5,[-3],-1]
                    238: [3544] tk_fd.fd_hessian2(A[0],A[1],A[2],[(1/3)*(1/7)/((1/2)*(1/5))]);
                    239: Computing Dmat(ca) for parameters B=[-3],X=[ 10/21 ]
                    240: [775/27783,[ 20/147 ],[ 17/42 ]]
                    241: @end example
                    242:
1.3     ! takayama  243: 参考: 一般の A 分布の正規化定数についての Hessian の計算は実験的 package ot_hessian_ahg.rr
        !           244: で実装のテストがされている. (これはまだ未完成のテスト版なので出力形式等も将来的には変更される.)
1.1       takayama  245: @example
                    246: import("ot_hgm_ahg.rr");
                    247: import("ot_hessian_ahg.rr");
                    248: def  htest4() @{
                    249:   extern C11_A;
                    250:   extern C11_Beta;
                    251:   Hess=newmat(7,7);
                    252:   A =C11_A;
                    253:   Beta0= [b0,b1,b2,b3];
                    254:   BaseIdx=[4,5,6];
                    255:   X=[x0,x1,x2,x3,x4,x5,x6];
                    256:   for (I=0; I<7; I++) for (J=0; J<7; J++) @{
                    257:     Idx = [I,J];
                    258:     H=hessian_simplify(A,Beta0,X,BaseIdx,Idx);
                    259:     Hess[I][J]=H;
                    260:     printf("[I,J]=%a, Hessian_ij=%a\n",Idx,H);
                    261:   @}
                    262:   return(Hess);
                    263: @}
                    264: [2917] C11_A;
                    265: [[0,0,0,1,1,1,1],[1,0,0,1,0,1,0],[0,1,1,0,1,0,1],[1,1,0,1,1,0,0]]
                    266: [2918] C11_Beta;
                    267: [166,36,290,214]
                    268: [2919] Ans=htest4$
                    269: [2920] Ans[0][0];
                    270: [[((b1-b0-1)*x4)/(x0^2),[4]],[((b1-b0-1)*x6)/(x0^2),[6]],
                    271:  [(b1^2+(-2*b0-1)*b1+b0^2+b0)/(x0^2),[]],[(x6)/(x0),[6,0]],[(x4)/(x0),[4,0]]]
                    272: @end example
                    273:
1.3     ! takayama  274: @comment --- 参照(リンク)を書く ---
1.1       takayama  275: @table @t
1.3     ! takayama  276: @item 参照
1.1       takayama  277: @ref{gtt_ekn.setup}
                    278: @ref{gtt_ekn.pfaffian_basis}
                    279: @end table
                    280:
1.3     ! takayama  281: @comment --- ChangeLog を書く. ソースコードの位置. 変更日時 など CVSサーバを見るため
1.1       takayama  282: @noindent
                    283: ChangeLog
                    284: @itemize @bullet
                    285: @item
1.3     ! takayama  286:  この関数は
        !           287: [GM2016] のアルゴリズムおよび
        !           288: [T2016] による modular method を用いた高速化を実装したものである.
1.1       takayama  289: @item
1.3     ! takayama  290:  変更を受けたファイルは
1.1       takayama  291:  OpenXM/src/asir-contrib/packages/src/gtt_ekn.rr 1.1, gtt_ekn/ekn_pfaffian_8.rr
                    292: @end itemize
                    293:
                    294:
                    295: @comment **********************************************************
1.3     ! takayama  296: @node gtt_ekn.nc,,, 超幾何関数E(k,n)
1.1       takayama  297: @subsection @code{gtt_ekn.nc}
1.3     ! takayama  298: @comment --- 索引用キーワード
1.1       takayama  299: @findex gtt_ekn.nc
                    300:
                    301: @table @t
                    302: @item gtt_ekn.nc(@var{beta},@var{p})
1.3     ! takayama  303: :: 周辺和 @var{beta}, セルの確率 @var{p} の二元分割表の条件付き確率の正規化定数 Z
        !           304: およびその微分の値を戻す.
1.1       takayama  305: @end table
                    306:
1.3     ! takayama  307: @comment --- 引数の簡単な説明 ---  以下まだ書いてない.
1.1       takayama  308: @table @var
                    309: @item return
1.3     ! takayama  310: ベクトル [Z,[[d_11 Z, d_12 Z, ...], ..., [d_m1 Z, d_m2 Z, ...., d_mn Z]]]
1.1       takayama  311: @item beta
1.3     ! takayama  312: 行和, 列和のリスト. 成分はすべて正であること.
1.1       takayama  313: @item p
1.3     ! takayama  314: 二元分割表のセルの確率のリスト
1.1       takayama  315: @end table
                    316:
1.3     ! takayama  317: @comment --- ここで関数の詳しい説明 ---
        !           318: @comment --- @itemize〜@end itemize は箇条書き ---
        !           319: @comment --- @bullet は黒点付き ---
1.1       takayama  320: @itemize @bullet
                    321: @item
1.3     ! takayama  322:  r1 x r2 分割表を考える.
        !           323:  m=r1, n=r2 とおく.
        !           324:  正規化定数 Z は分割表 u を m × n 行列とするとき p^u/u! の和である.
        !           325:  ここで和は行和列和が @var{beta} であるような u 全体でとる
1.1       takayama  326:  [TKT2015], [GM2016].
1.3     ! takayama  327:  p^u は p_ij^u_ij の積, u! は u_ij! の積である.
        !           328:  d_ij Z で Z の変数 p_ij についての偏微分を表す.
1.1       takayama  329: @item
1.3     ! takayama  330: nc は gmvector の値を元に, [GM2016] の Prop
        !           331:  7.1 に基づいて Z の値を計算する.
1.1       takayama  332: @item
1.3     ! takayama  333: option crt=1 (crt = Chinese remainder theorem) を与えると, 分散計算をおこなう.
        !           334: 分散計算用の各種パラメータの設定は
        !           335: gtt_ekn.setup で行なう.
1.1       takayama  336: @end itemize
                    337:
1.3     ! takayama  338: @comment --- @example〜@end example は実行例の表示 ---
        !           339: 例: 2x3 分割表での Z とその微分の計算.
1.1       takayama  340: @example
                    341: [2237] gtt_ekn.nc([[4,5],[2,4,3]],[[1,1/2,1/3],[1,1,1]]);
                    342: [4483/124416,[ 353/7776 1961/15552 185/1728 ]
                    343: [ 553/20736 1261/15552 1001/13824 ]]
                    344: @end example
                    345:
1.3     ! takayama  346: 参考: 2 x m 分割表(Lauricella FD)についてはパッケージ tk_fd でも下記のように同等な
        !           347: 計算ができる.
1.1       takayama  348: @example
                    349: [3076] import("tk_fd.rr");
                    350: [3077] A=tk_fd.marginal2abc([4,5],[2,4,3]);
                    351: [-4,[-4,-3],-1]
                    352: [3078] tk_fd.ahmat_abc(A[0],A[1],A[2],[[1,1/2,1/3],[1,1,1]]);
                    353: RS=[ 4 5 ], CSnew=[ 2 4 3 ], Ynew=[ 1 1/2 1/3 ]
                    354: [ 1 1 1 ]
                    355: Computing Dmat(ca) for parameters B=[-4,-3],X=[ 1/2 1/3 ]
                    356: [4483/124416,[[353/7776,1961/15552,185/1728],
                    357:               [553/20736,1261/15552,1001/13824]]]
1.3     ! takayama  358: // 戻値は [Z, [[d_11 Z, d_12 Z, d_13 Z],
        !           359: //             [d_21 Z, d_22 Z, d_23 Z]]] の値.
        !           360: //           ここで d_ij は i,j 成分についての微分を表す.
1.1       takayama  361: @end example
                    362:
1.3     ! takayama  363: @comment --- 参照(リンク)を書く ---
1.1       takayama  364: @table @t
1.3     ! takayama  365: @item 参照
1.1       takayama  366: @ref{gtt_ekn.setup}
                    367: @ref{gtt_ekn.lognc}
                    368: @end table
                    369:
1.3     ! takayama  370: @comment --- ChangeLog を書く. ソースコードの位置. 変更日時 など CVSサーバを見るため
1.1       takayama  371: @noindent
                    372: ChangeLog
                    373: @itemize @bullet
                    374: @item
1.3     ! takayama  375:  変更を受けたファイルは
1.1       takayama  376:  OpenXM/src/asir-contrib/packages/src/gtt_ekn.rr 1.1, gtt_ekn/ekn_eval.rr
                    377: @end itemize
                    378:
                    379:
                    380: @comment **********************************************************
1.3     ! takayama  381: @node gtt_ekn.lognc,,, 超幾何関数E(k,n)
1.1       takayama  382: @subsection @code{gtt_ekn.lognc}
1.3     ! takayama  383: @comment --- 索引用キーワード
1.1       takayama  384: @findex gtt_ekn.lognc
                    385:
                    386: @table @t
                    387: @item gtt_ekn.lognc(@var{beta},@var{p})
1.3     ! takayama  388: :: 周辺和 @var{beta}, セルの確率 @var{p} の二元分割表の条件付き確率の正規化定数 Z
        !           389: の log の近似値およびその微分の近似値を戻す.
1.1       takayama  390: @end table
                    391:
1.3     ! takayama  392: @comment --- 引数の簡単な説明 ---  以下まだ書いてない.
1.1       takayama  393: @table @var
                    394: @item return
1.3     ! takayama  395: ベクトル [log(Z), [[d_11 log(Z), d_12 log(Z), ...], [d_21 log(Z),...], ... ]
1.1       takayama  396: @item beta
1.3     ! takayama  397: 行和, 列和のリスト. 成分はすべて正であること.
1.1       takayama  398: @item p
1.3     ! takayama  399: 二元分割表のセルの確率のリスト
1.1       takayama  400: @end table
                    401:
1.3     ! takayama  402: @comment --- ここで関数の詳しい説明 ---
        !           403: @comment --- @itemize〜@end itemize は箇条書き ---
        !           404: @comment --- @bullet は黒点付き ---
1.1       takayama  405: @itemize @bullet
                    406: @item
1.3     ! takayama  407: 条件付き最尤推定に利用する [TKT2015].
        !           408: @item option crt=1 (crt = Chinese remainder theorem) を与えると, 分散計算をおこなう.
        !           409: 分散計算用の各種パラメータの設定は
        !           410: gtt_ekn.setup で行なう.
1.1       takayama  411: @end itemize
                    412:
1.3     ! takayama  413: @comment --- @example〜@end example は実行例の表示 ---
        !           414: 例: 2 × 3 分割表での例. 第一成分のみ近似値.
1.1       takayama  415: @example
                    416: [2238] gtt_ekn.lognc([[4,5],[2,4,3]],[[1,1/2,1/3],[1,1,1]]);
                    417: [-3.32333832422461674630,[ 5648/4483 15688/4483 13320/4483 ]
                    418: [ 3318/4483 10088/4483 9009/4483 ]]
                    419: @end example
                    420:
1.3     ! takayama  421: 参考: 2 x m 分割表(Lauricella FD)についてはパッケージ tk_fd でも下記のように同等な
        !           422: 計算ができる.
1.1       takayama  423: @example
                    424: [3076] import("tk_fd.rr");
                    425: [3077] A=tk_fd.marginal2abc([4,5],[2,4,3]);
                    426: [-4,[-4,-3],-1]
                    427: [3078] tk_fd.log_ahmat_abc(A[0],A[1],A[2],[[1,1/2,1/3],[1,1,1]]);
                    428: RS=[ 4 5 ], CSnew=[ 2 4 3 ], Ynew=[ 1 1/2 1/3 ]
                    429: [ 1 1 1 ]
                    430: Computing Dmat(ca) for parameters B=[-4,-3],X=[ 1/2 1/3 ]
                    431: [-3.32333832422461674639485797719209322217260539267246045320,
                    432:  [[1.2598706, 3.499442, 2.971224],
                    433:   [0.7401293, 2.250278, 2.009591]]]
1.3     ! takayama  434: // 戻値は [log(Z),
1.1       takayama  435: //          [[d_11 log(Z), d_12 log(Z), d_13 log(Z)],
                    436: //           [d_21 log(Z), d_22 log(Z), d_23 log(Z)]]]
1.3     ! takayama  437: // の近似値.
1.1       takayama  438: @end example
                    439:
1.3     ! takayama  440: @comment --- 参照(リンク)を書く ---
1.1       takayama  441: @table @t
1.3     ! takayama  442: @item 参照
1.1       takayama  443: @ref{gtt_ekn.setup}
                    444: @ref{gtt_ekn.nc}
                    445: @end table
                    446:
1.3     ! takayama  447: @comment --- ChangeLog を書く. ソースコードの位置. 変更日時 など CVSサーバを見るため
1.1       takayama  448: @noindent
                    449: ChangeLog
                    450: @itemize @bullet
                    451: @item
1.3     ! takayama  452:  変更を受けたファイルは
1.1       takayama  453:  OpenXM/src/asir-contrib/packages/src/gtt_ekn.rr 1.1.
                    454: @end itemize
                    455:
                    456: @comment **********************************************************
1.3     ! takayama  457: @node gtt_ekn.expectation,,, 超幾何関数E(k,n)
1.1       takayama  458: @subsection @code{gtt_ekn.expectation}
1.3     ! takayama  459: @comment --- 索引用キーワード
1.1       takayama  460: @findex gtt_ekn.expectation
                    461:
                    462: @table @t
                    463: @item gtt_ekn.expectation(@var{beta},@var{p})
1.3     ! takayama  464: :: 周辺和 @var{beta}, セルの確率 @var{p} の二元分割表の期待値を計算する.
1.1       takayama  465: @end table
                    466:
1.3     ! takayama  467: @comment --- 引数の簡単な説明 ---  以下まだ書いてない.
1.1       takayama  468: @table @var
                    469: @item return
1.3     ! takayama  470: 二元分割表の各セルの期待値のリスト.
1.1       takayama  471: @item beta
1.3     ! takayama  472: 行和, 列和のリスト. 成分はすべて正であること.
1.1       takayama  473: @item p
1.3     ! takayama  474: 二元分割表のセルの確率のリスト
1.1       takayama  475: @end table
                    476:
1.3     ! takayama  477: @comment --- ここで関数の詳しい説明 ---
        !           478: @comment --- @itemize〜@end itemize は箇条書き ---
        !           479: @comment --- @bullet は黒点付き ---
1.1       takayama  480: @itemize @bullet
                    481: @item
1.3     ! takayama  482: [GM2016] の Algorithm 7.8 の実装.
        !           483: @item option crt=1 (crt = Chinese remainder theorem) を与えると, 分散計算をおこなう.
        !           484: 分散計算用の各種パラメータの設定は
        !           485: gtt_ekn.setup で行なう.
        !           486: @item option index を与えると, 指定された成分の期待値のみ計算する.
        !           487: たとえば 2 x 2 分割表で index=[[0,0],[1,1]] と指定すると, 1 のある成分の期待値のみ計算する.
1.1       takayama  488: @end itemize
                    489:
1.3     ! takayama  490: @comment --- @example〜@end example は実行例の表示 ---
1.1       takayama  491:
1.3     ! takayama  492: 2×2, 3×3 の分割表の期待値計算例.
1.1       takayama  493: @example
                    494: [2235] gtt_ekn.expectation([[1,4],[2,3]],[[1,1/3],[1,1]]);
                    495: [ 2/3 1/3 ]
                    496: [ 4/3 8/3 ]
                    497: [2236] gtt_ekn.expectation([[4,5],[2,4,3]],[[1,1/2,1/3],[1,1,1]]);
                    498: [ 5648/4483 7844/4483 4440/4483 ]
                    499: [ 3318/4483 10088/4483 9009/4483 ]
                    500:
                    501: [2442] gtt_ekn.expectation([[4,14,9],[11,6,10]],[[1,1/2,1/3],[1,1/5,1/7],[1,1,1]]);
                    502: [ 207017568232262040/147000422096729819 163140751505489940/147000422096729819
                    503:                                         217843368649167296/147000422096729819 ]
                    504: [ 1185482401011137878/147000422096729819 358095302885438604/147000422096729819
                    505:                                          514428205457640984/147000422096729819 ]
                    506: [ 224504673820628091/147000422096729819 360766478189450370/147000422096729819
                    507:                                         737732646860489910/147000422096729819 ]
                    508: @end example
                    509:
1.3     ! takayama  510: 参考: 2 x m 分割表(Lauricella FD)についてはパッケージ tk_fd でも下記のように同等な
        !           511: 計算ができる.
1.1       takayama  512: @example
                    513: [3076] import("tk_fd.rr");
                    514: [3077] A=tk_fd.marginal2abc([4,5],[2,4,3]);
                    515: [-4,[-4,-3],-1]
                    516: [3078] tk_fd.expectation_abc(A[0],A[1],A[2],[[1,1/2,1/3],[1,1,1]]);
                    517: RS=[ 4 5 ], CSnew=[ 2 4 3 ], Ynew=[ 1 1/2 1/3 ]
                    518: [ 1 1 1 ]
                    519: Computing Dmat(ca) for parameters B=[-4,-3],X=[ 1/2 1/3 ]
                    520: [[5648/4483,7844/4483,4440/4483],
                    521:  [3318/4483,10088/4483,9009/4483]]
1.3     ! takayama  522: // 各セルの期待値.
1.1       takayama  523: @end example
                    524:
1.3     ! takayama  525: 参考: 一般の A 分布の計算は ot_hgm_ahg.rr. まだ実験的なため, module 化されていない.
        !           526: ot_hgm_ahg.rr についての参考文献:
1.1       takayama  527: K.Ohara, N.Takayama, Pfaffian Systems of A-Hypergeometric Systems II --- Holonomic Gradient Method, arxiv:1505.02947
                    528: @example
                    529: [3237] import("ot_hgm_ahg.rr");
1.3     ! takayama  530: // 2 x 2 分割表.
1.1       takayama  531: [3238] hgm_ahg_expected_values_contiguity([[0,0,1,1],[1,0,1,0],[0,1,0,1]],
                    532:         [9,6,8],[1/2,1/3,1/5,1/7],[x1,x2,x3,x4]|geometric=1);
                    533: oohg_native=0, oohg_curl=1
                    534: [1376777025/625400597,1750225960/625400597,
                    535:  2375626557/625400597,3252978816/625400597]
1.3     ! takayama  536: // 2 x 2 分割表の期待値.
1.1       takayama  537:
1.3     ! takayama  538: // 2 x 3 分割表.
1.1       takayama  539: [3238] hgm_ahg_expected_values_contiguity(
                    540:  [[0,0,0,1,1,1],[1,0,0,1,0,0],[0,1,0,0,1,0],[0,0,1,0,0,1]],
                    541:  [5,2,4,3],[1,1/2,1/3,1,1,1],[x1,x2,x3,x4,x5,x6]|geometric=1);
                    542: [5648/4483,7844/4483,4440/4483,3318/4483,10088/4483,9009/4483]
1.3     ! takayama  543: // 2 x 3 分割表の期待値. 上と同じ問題.
1.1       takayama  544: @end example
                    545:
1.3     ! takayama  546: 3 x 3 分割表. 構造的0が一つ.
1.1       takayama  547: @example
                    548: /*
1.3     ! takayama  549:   dojo, p.221 のデータ.  成績3以下の生徒は集めてひとつに.
1.1       takayama  550:   2 1 1
                    551:   8 3 3
                    552:   0 2 6
                    553:
                    554:   row sum: 4,14,8
                    555:   column sum: 10,6,10
1.3     ! takayama  556:   0 を一つ含むので, (3,6) 型の A から 7 列目を抜く.
1.1       takayama  557: */
                    558:
                    559: A=[[0,0,0,1,1,1, 0,0],
                    560:    [0,0,0,0,0,0, 1,1],
                    561:    [1,0,0,1,0,0, 0,0],
                    562:    [0,1,0,0,1,0, 1,0],
                    563:    [0,0,1,0,0,1, 0,1]];
                    564: B=[14,8,10,6,10];
                    565: hgm_ahg_expected_values_contiguity(A,B,[1,1/2,1/3,1,1/5,1/7,1,1],
1.3     ! takayama  566:                 [x1,x2,x3,x4,x5,x6,x7,x8]|geometric=1);
1.1       takayama  567:
1.3     ! takayama  568: // 答.
1.1       takayama  569: [14449864949304/9556267369631,
                    570:  10262588586540/9556267369631, 13512615942680/9556267369631,
                    571:  81112808747006/9556267369631,
                    572:  21816297744346/9556267369631, 30858636683482/9556267369631,
                    573:
                    574:  25258717886900/9556267369631,51191421070148/9556267369631]
                    575: @end example
                    576:
1.3     ! takayama  577: 3 x 3 分割表.
1.1       takayama  578: @example
                    579: /*
1.3     ! takayama  580:  上のデータで 0 を 1 に変更.
1.1       takayama  581:   2 1 1
                    582:   8 3 3
                    583:   1 2 6
                    584:
                    585:   row sum: 4,14,9
                    586:   column sum: 11,6,10
                    587: */
                    588: A=[[0,0,0,1,1,1,0,0,0],
                    589:    [0,0,0,0,0,0,1,1,1],
                    590:    [1,0,0,1,0,0,1,0,0],
                    591:    [0,1,0,0,1,0,0,1,0],
                    592:    [0,0,1,0,0,1,0,0,1]];
                    593: B=[14,9,11,6,10];
                    594: hgm_ahg_expected_values_contiguity(A,B,[1,1/2,1/3,1,1/5,1/7,1,1,1],
                    595:                               [x1,x2,x3,x4,x5,x6,x7,x8]|geometric=1);
                    596:
1.3     ! takayama  597: // 期待値, 答.   x9 を指定していないので, 9番目の期待値は出力してない.
1.1       takayama  598: [207017568232262040/147000422096729819,
                    599:  163140751505489940/147000422096729819,217843368649167296/147000422096729819,
                    600:  1185482401011137878/147000422096729819,
                    601:  358095302885438604/147000422096729819,514428205457640984/147000422096729819,
                    602:  224504673820628091/147000422096729819,360766478189450370/147000422096729819]
                    603:
1.3     ! takayama  604: // Z やその微分の計算は hgm_ahg_contiguity 関数がおこなうが, これの簡易インターフェースは
        !           605: // まだ書いてない.
1.1       takayama  606: @end example
                    607:
                    608:
                    609:
1.3     ! takayama  610: @comment --- 参照(リンク)を書く ---
1.1       takayama  611: @table @t
1.3     ! takayama  612: @item 参照
1.1       takayama  613: @ref{gtt_ekn.setup}
                    614: @ref{gtt_ekn.nc}
                    615: @end table
                    616:
1.3     ! takayama  617: @comment --- ChangeLog を書く. ソースコードの位置. 変更日時 など CVSサーバを見るため
1.1       takayama  618: @noindent
                    619: ChangeLog
                    620: @itemize @bullet
                    621: @item
1.3     ! takayama  622:  変更を受けたファイルは
1.1       takayama  623:  OpenXM/src/asir-contrib/packages/src/gtt_ekn.rr 1.1.
                    624: @end itemize
                    625:
                    626:
                    627: @comment **********************************************************
1.3     ! takayama  628: @comment --- ◯◯◯◯  の説明
        !           629: @comment --- 個々の関数の説明の開始 ---
        !           630: @comment --- section 名を正確に ---
        !           631: @node gtt_ekn.setup,,, 超幾何関数E(k,n)
1.1       takayama  632: @subsection @code{gtt_ekn.setup}
1.3     ! takayama  633: @comment --- 索引用キーワード
1.1       takayama  634: @findex gtt_ekn.setup
                    635:
                    636: @table @t
                    637: @item gtt_ekn.setup()
1.3     ! takayama  638: :: 分散計算用の環境設定をおこなう. 現在の環境を報告する.
1.1       takayama  639: @end table
                    640:
1.3     ! takayama  641: @comment --- 引数の簡単な説明 ---  以下まだ書いてない.
1.1       takayama  642: @table @var
                    643: @item return
                    644:
                    645: @end table
                    646:
1.3     ! takayama  647: @comment --- ここで関数の詳しい説明 ---
        !           648: @comment --- @itemize〜@end itemize は箇条書き ---
        !           649: @comment --- @bullet は黒点付き ---
        !           650: @itemize @bullet
        !           651: @item 使用するプロセスと素数の個数, 最小の素数を表示する. 準備されていない場合はその旨を表示.
        !           652: @item このパッケージでの分散計算は複数のcpuを搭載した計算機で実行されることを想定している.
        !           653: @item option nps (または number_of_processes)を与えると指定した数だけプロセスを用意する.
        !           654: @item option nprm (または number_of_primes)を与えるとnprmが文字列の場合指定された素数リストのファイルを読み込む. nprmが自然数の場合さらにoption minp (minp =MINimum Prime)を与えるとminpより大きな素数をnprm個生成する. その際option fgp (または file_of_generated_primes)を与えると生成した素数リストをファイル名をfgpとして保存する.
        !           655: @item 上記のoption を指定しなかった場合次のデフォルト値が用いられる. nps=1. nprm=10. fgp=0.
        !           656: @item option report=1を与えると現在の環境の報告のみを行う. setup(|report=1)の別名としてreport関数を使用することもできる.
1.1       takayama  657: @end itemize
                    658:
1.3     ! takayama  659: @comment --- @example〜@end example は実行例の表示 ---
        !           660: 例: 素数のリストを生成してファイル p.txt へ書き出す.
1.1       takayama  661: @example
                    662: gtt_ekn.setup(|nps=2,nprm=20,minp=10^10,fgp="p.txt")$
                    663: @end example
                    664:
                    665:
1.3     ! takayama  666: @comment --- 参照(リンク)を書く ---
1.1       takayama  667: @table @t
1.3     ! takayama  668: @item 参照
1.1       takayama  669: @ref{gtt_ekn.nc}
                    670: @ref{gtt_ekn.gmvector}
                    671: @end table
                    672:
1.3     ! takayama  673: @comment --- ChangeLog を書く. ソースコードの位置. 変更日時 など CVSサーバを見るため
1.1       takayama  674: @noindent
                    675: ChangeLog
                    676: @itemize @bullet
                    677: @item
1.3     ! takayama  678:  変更を受けたファイルは
1.1       takayama  679:  OpenXM/src/asir-contrib/packages/src/gtt_ekn.rr 1.1,
                    680:  gtt_ekn/g_mat_fac.rr
                    681:
                    682: @end itemize
                    683:
                    684: @comment **********************************************************
1.3     ! takayama  685: @comment --- ◯◯◯◯  の説明
        !           686: @comment --- 個々の関数の説明の開始 ---
        !           687: @comment --- section 名を正確に ---
        !           688: @node gtt_ekn.upAlpha,,, 超幾何関数E(k,n)
1.1       takayama  689: @subsection @code{gtt_ekn.upAlpha}
1.3     ! takayama  690: @comment --- 索引用キーワード
1.1       takayama  691: @findex gtt_ekn.upAlpha
                    692:
                    693: @table @t
                    694: @item gtt_ekn.upAlpha(@var{i},@var{k},@var{n})
                    695: ::
                    696: @end table
                    697:
1.3     ! takayama  698: @comment --- 引数の簡単な説明 ---  以下まだ書いてない.
1.1       takayama  699: @table @var
1.3     ! takayama  700: @item i  a_i を a_i+1 と変化させる contiguity relation.
        !           701: @item k  E(k+1,n+k+2)型の超幾何関数の k. 分割表では (k+1)×(n+1).
        !           702: @item n  E(k+1,n+k+2)型の超幾何関数の n. 分割表では (k+1)×(n+1).
        !           703: @item return  contiguity relation の pfaffian_basis についての行列表現を戻す. [GM2016] の Cor 6.3.
1.1       takayama  704: @end table
                    705:
1.3     ! takayama  706: @comment --- ここで関数の詳しい説明 ---
        !           707: @comment --- @itemize〜@end itemize は箇条書き ---
        !           708: @comment --- @bullet は黒点付き ---
1.1       takayama  709: @itemize @bullet
                    710: @item
1.3     ! takayama  711:  upAlpha は [GM2016] の Cor 6.3 の行列 U_i を戻す.
        !           712: @item 関連する各関数の簡潔な説明と例も加える.
        !           713: @item a_i を a_i-1 と変化させたい場合は関数 downAlpha を用いる.
        !           714: @item a_i と分割表の周辺和を見るには, 関数 marginaltoAlpha([行和,列和]) を用いる.
1.1       takayama  715: @item
1.3     ! takayama  716:    pfaffian_basis は [GM2016] の4章のベクトル F に対応する偏微分を戻す.
1.1       takayama  717: @end itemize
                    718:
1.3     ! takayama  719: @comment --- @example〜@end example は実行例の表示 ---
        !           720: 例: 以下の例は 2×2分割表(E(2,4)), 2×3分割表(E(2,5))の場合である.
        !           721: [2225] までは出力を略している.
1.1       takayama  722: @example
                    723: [2221] gtt_ekn.marginaltoAlpha([[1,4],[2,3]]);
                    724: [[a_0,-4],[a_1,-1],[a_2,3],[a_3,2]]
1.3     ! takayama  725: [2222] gtt_ekn.upAlpha(1,1,1);  // E(2,4) の a_1 方向の
        !           726:                                 //     contiguity を表現する行列
        !           727: [2223] gtt_ekn.upAlpha(2,1,1);  // E(2,4) の a_2 方向
        !           728: [2224] gtt_ekn.upAlpha(3,1,1);  // E(2,4) の a_3 方向
1.1       takayama  729: [2225] function f(x_1_1);
                    730: [2232] gtt_ekn.pfaffian_basis(f(x_1_1),1,1);
                    731: [ f(x_1_1) ]
                    732: [ (f{1}(x_1_1)*x_1_1)/(a_2) ]
                    733: [2233] function f(x_1_1,x_1_2);
                    734: f() redefined.
1.3     ! takayama  735: [2234] gtt_ekn.pfaffian_basis(f(x_1_1,x_1_2),1,2); // E(2,5), 2*3 分割表
1.1       takayama  736: [ f(x_1_1,x_1_2) ]
                    737: [ (f{1,0}(x_1_1,x_1_2)*x_1_1)/(a_2) ]
                    738: [ (f{0,1}(x_1_1,x_1_2)*x_1_2)/(a_3) ]
                    739: @end example
                    740:
                    741:
1.3     ! takayama  742: @comment --- 参照(リンク)を書く ---
1.1       takayama  743: @table @t
1.3     ! takayama  744: @item 参照
1.1       takayama  745: @ref{gtt_ekn.nc}
                    746: @ref{gtt_ekn.gmvector}
                    747: @end table
                    748:
1.3     ! takayama  749: @comment --- ChangeLog を書く. ソースコードの位置. 変更日時 など CVSサーバを見るため
1.1       takayama  750: @noindent
                    751: ChangeLog
                    752: @itemize @bullet
                    753: @item
1.3     ! takayama  754:  この関数は [GM2016]
        !           755: で与えられたアルゴリズムに従い contiguity relation を導出する.
1.1       takayama  756: @item
1.3     ! takayama  757:  変更を受けたファイルは
1.1       takayama  758:  OpenXM/src/asir-contrib/packages/src/gtt_ekn/ekn_pfaffian_8.rr 1.1.
                    759: @end itemize
                    760:
                    761:
                    762:
1.3     ! takayama  763: @comment --- おまじない ---
1.1       takayama  764: @node Index,,, Top
                    765: @unnumbered Index
                    766: @printindex fn
                    767: @printindex cp
                    768: @iftex
                    769: @vfill @eject
                    770: @end iftex
                    771: @summarycontents
                    772: @contents
                    773: @bye
1.3     ! takayama  774: @comment --- おまじない終り ---
1.1       takayama  775:
                    776:
1.3     ! takayama  777: // 2 x m 分割表において似た機能を有する関数の利用例を参考までに記載する;
        !           778: // 正規化定数とその微分関連.
        !           779: // その1.
1.1       takayama  780: [3077] A=tk_fd.marginal2abc([4,5],[2,4,3]);
                    781: [-4,[-4,-3],-1]
                    782: [3078] tk_fd.ahmat_abc(A[0],A[1],A[2],[[1,1/2,1/3],[1,1,1]]);
                    783: RS=[ 4 5 ], CSnew=[ 2 4 3 ], Ynew=[ 1 1/2 1/3 ]
                    784: [ 1 1 1 ]
                    785: Computing Dmat(ca) for parameters B=[-4,-3],X=[ 1/2 1/3 ]
                    786: [4483/124416,[[353/7776,1961/15552,185/1728],[553/20736,1261/15552,1001/13824]]]
1.3     ! takayama  787: // 戻値は [Z, [[d_11 Z, d_12 Z, d_13 Z],[d_21 Z, d_22 Z, d_23 Z]]] の値.
1.1       takayama  788:
1.3     ! takayama  789: // その2.
1.1       takayama  790: [3079] tk_fd.log_ahmat_abc(A[0],A[1],A[2],[[1,1/2,1/3],[1,1,1]]);
                    791: RS=[ 4 5 ], CSnew=[ 2 4 3 ], Ynew=[ 1 1/2 1/3 ]
                    792: [ 1 1 1 ]
                    793: Computing Dmat(ca) for parameters B=[-4,-3],X=[ 1/2 1/3 ]
                    794: [-3.32333832422461674639485797719209322217260539267246045320,
                    795:  [[1.25987062235110417131385233102832924380994869507026544724,3.49944233772027660049074280615659156814633058219942003122,2.97122462636627258532232879768012491635065804149007361142],
                    796:   [0.740129377648895828686147668971670756190051304929734552754,2.25027883113986169975462859692170421592683470890028998438,2.00959179121124247155922373410662502788311398616997546285]]]
1.3     ! takayama  797: // 戻値は [log(Z),
1.1       takayama  798: //          [[d_11 log(Z), d_12 log(Z), d_13 log(Z)],
                    799: //           [d_21 log(Z), d_22 log(Z), d_23 log(Z)]]]
1.3     ! takayama  800: // の近似値.
1.1       takayama  801:
1.3     ! takayama  802: // その3.
1.1       takayama  803: [3082] fd_hessian2(A[0],A[1],A[2],[1/2,1/3]);
                    804: Computing Dmat(ca) for parameters B=[-4,-3],X=[ 1/2 1/3 ]
                    805: [4483/124416,[ 1961/15552 185/1728 ],
                    806:  [ 79/288 259/864 ]
                    807:  [ 259/864 47/288 ]]
1.3     ! takayama  808: // 戻値は [F=F_D, gradient(F), Hessian(F)]
1.1       takayama  809:
1.3     ! takayama  810: // 参考.
        !           811: // ygahvec で巾関数分の調整. 独立した関数はないようだ.
1.1       takayama  812:
                    813: //-----------------------------------------------------------------------
1.3     ! takayama  814: // 2 x m 分割表において似た機能を有する関数の利用例を参考までに記載する;
        !           815: // 期待値関連.
1.1       takayama  816: [3079] A=tk_fd.marginal2abc([4,5],[2,4,3]);
                    817: [-4,[-4,-3],-1]
                    818: [3080] tk_fd.expectation_abc(A[0],A[1],A[2],[[1,1/2,1/3],[1,1,1]]);
                    819: RS=[ 4 5 ], CSnew=[ 2 4 3 ], Ynew=[ 1 1/2 1/3 ]
                    820: [ 1 1 1 ]
                    821: Computing Dmat(ca) for parameters B=[-4,-3],X=[ 1/2 1/3 ]
                    822: [[5648/4483,7844/4483,4440/4483],
                    823:  [3318/4483,10088/4483,9009/4483]]
1.3     ! takayama  824: // 各セルの期待値.
1.1       takayama  825:
                    826: //-----------------------------------------------------------------------
1.3     ! takayama  827: // ot_hgm_ahg.rr の例.  実験的なため module 化されていない.
1.1       takayama  828: [3237] import("ot_hgm_ahg.rr");
1.3     ! takayama  829: // 2 x 2 分割表.
1.1       takayama  830: [3238] hgm_ahg_expected_values_contiguity([[0,0,1,1],[1,0,1,0],[0,1,0,1]],
                    831:         [9,6,8],[1/2,1/3,1/5,1/7],[x1,x2,x3,x4]|geometric=1);
                    832: oohg_native=0, oohg_curl=1
                    833: [1376777025/625400597,1750225960/625400597,2375626557/625400597,3252978816/625400597]
1.3     ! takayama  834: // 2 x 2 分割表の期待値.
1.1       takayama  835:
1.3     ! takayama  836: // 2 x 3 分割表.
1.1       takayama  837: [3238] hgm_ahg_expected_values_contiguity(
                    838:  [[0,0,0,1,1,1],[1,0,0,1,0,0],[0,1,0,0,1,0],[0,0,1,0,0,1]],
                    839:  [5,2,4,3],[1,1/2,1/3,1,1,1],[x1,x2,x3,x4,x5,x6]|geometric=1);
                    840: [5648/4483,7844/4483,4440/4483,3318/4483,10088/4483,9009/4483]
1.3     ! takayama  841: // 2 x 3 分割表の期待値. 上と同じ問題.
1.1       takayama  842:
                    843: /*
1.3     ! takayama  844:   dojo, p.221.  成績3以下の生徒は集めてひとつに.
1.1       takayama  845:   2 1 1
                    846:   8 3 3
                    847:   0 2 6
                    848:
                    849:   row sum: 4,14,8
                    850:   column sum: 10,6,10
1.3     ! takayama  851:   0 を一つ含むので, (3,6) 型の A から 7 列目を抜く.
1.1       takayama  852: */
1.3     ! takayama  853: // 3 x 3 分割表. 構造的0が一つ.
1.1       takayama  854:
                    855: A=[[0,0,0,1,1,1, 0,0],
                    856:    [0,0,0,0,0,0, 1,1],
                    857:    [1,0,0,1,0,0, 0,0],
                    858:    [0,1,0,0,1,0, 1,0],
                    859:    [0,0,1,0,0,1, 0,1]];
                    860: B=[14,8,10,6,10];
                    861: hgm_ahg_expected_values_contiguity(A,B,[1,1/2,1/3,1,1/5,1/7,1,1],[x1,x2,x3,x4,x5,x6,x7,x8]|geometric=1);
                    862:
1.3     ! takayama  863: // 答.
1.1       takayama  864: [14449864949304/9556267369631,10262588586540/9556267369631,13512615942680/9556267369631,
                    865:  81112808747006/9556267369631,21816297744346/9556267369631,30858636683482/9556267369631,
                    866:                               25258717886900/9556267369631,51191421070148/9556267369631]
                    867:
                    868:
                    869: /*
1.3     ! takayama  870:  上のデータで 0 を 1 に変更.
1.1       takayama  871:   2 1 1
                    872:   8 3 3
                    873:   1 2 6
                    874:
                    875:   row sum: 4,14,9
                    876:   column sum: 11,6,10
                    877: */
1.3     ! takayama  878: // 3 x 3 分割表.
1.1       takayama  879: A=[[0,0,0,1,1,1,0,0,0],
                    880:    [0,0,0,0,0,0,1,1,1],
                    881:    [1,0,0,1,0,0,1,0,0],
                    882:    [0,1,0,0,1,0,0,1,0],
                    883:    [0,0,1,0,0,1,0,0,1]];
                    884: B=[14,9,11,6,10];
                    885: hgm_ahg_expected_values_contiguity(A,B,[1,1/2,1/3,1,1/5,1/7,1,1,1],[x1,x2,x3,x4,x5,x6,x7,x8]|geometric=1);
                    886:
1.3     ! takayama  887: // 期待値, 答.
1.1       takayama  888: [207017568232262040/147000422096729819,163140751505489940/147000422096729819,217843368649167296/147000422096729819,
                    889:  1185482401011137878/147000422096729819,358095302885438604/147000422096729819,514428205457640984/147000422096729819,
                    890:  224504673820628091/147000422096729819,360766478189450370/147000422096729819]
                    891:
1.3     ! takayama  892: // Z やその微分の計算は hgm_ahg_contiguity 関数がおこなうが, これの簡易インターフェースは
        !           893: // まだ書いてない.
1.1       takayama  894:
                    895:
1.3     ! takayama  896: 4. x_ij は [GM2016] の1章で,
        !           897:  たとえば 3x3 の時 [[1,1,1],[x_11,x_12,1],[x_21,x_22,1]]
        !           898: となっているが, [GM2016] の Prop 7.1 の対応では,
        !           899:    p = [[1,x_11,x_12],[1,x_21,x_22],[1,1,1]] となっているので注意.

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>