=================================================================== RCS file: /home/cvs/OpenXM/src/asir-doc/exp/exp-ja.texi,v retrieving revision 1.34 retrieving revision 1.58 diff -u -p -r1.34 -r1.58 --- OpenXM/src/asir-doc/exp/exp-ja.texi 2009/05/16 04:56:32 1.34 +++ OpenXM/src/asir-doc/exp/exp-ja.texi 2020/09/06 03:26:47 1.58 @@ -1,9 +1,9 @@ -%% $OpenXM: OpenXM/src/asir-doc/exp/exp-ja.texi,v 1.33 2009/05/16 03:13:07 ohara Exp $ -\input texinfo +%% $OpenXM: OpenXM/src/asir-doc/exp/exp-ja.texi,v 1.57 2018/10/17 00:33:49 takayama Exp $ +\input texinfo-ja @iftex @catcode`@#=6 @def@fref#1{@xrefX[#1,,@code{#1},,,]} -@def@b#1{{@bf@gt #1}} +@def@b#1{{@bf #1}} @catcode`@#=@other @end iftex @overfullrule=0pt @@ -12,7 +12,8 @@ @comment --- おまじない終り --- @comment --- GNU info ファイルの名前 --- -@setfilename xyzman +@setfilename exp +@documentlanguage ja @comment --- タイトル --- @settitle 実験的仕様の関数 @@ -38,13 +39,13 @@ @title 実験的仕様の関数 @subtitle Risa/Asir 実験的仕様関数説明書 @subtitle 1.0 版 -@subtitle 2008 年 1 月 +@subtitle 2018 年 3 月 @author by Risa/Asir committers @page @vskip 0pt plus 1filll Copyright @copyright{} Risa/Asir committers -2004. All rights reserved. +2004--2018. All rights reserved. @end titlepage @comment --- おまじない --- @@ -83,57 +84,58 @@ ChangeLog の項目は www.openxm.org の cvswe @comment --- section ``実験的関数'' の subsection xyz_abc @comment --- subsection xyz_pqr xyz_stu がある. @menu -* quotetotex:: -* quotetotex_env:: -* objtoquote:: +* asir-port.sh asir-install.sh:: +* asirgui.hnd:: +* chdir pwd:: * copyright:: -* string_to_tb:: -* tb_to_string:: -* write_to_tb:: +* dcurrenttime:: * dp_gr_main:: -* asir-port.sh:: -* asir-install.sh:: -* get_struct_name:: -* get_element_names:: -* get_element_at:: -* put_element_at:: * dp_initial_term:: * dp_order:: * dp_weyl_gr_main:: -* list:: -* mapat:: -* set_print_function:: -* small_jacobi:: +* eval_quote:: +* f_res:: +* fj_simplify.simplify:: * flatten_quote:: -* printf:: -* fprintf:: -* sprintf:: -* quote_to_funargs:: -* funargs_to_quote:: -* get_function_name:: -* remove_paren:: -* set_secure_mode:: -* set_secure_flag:: +* function:: +* get_struct_name get_element_names get_element_at put_element_at:: +* getpid:: * initialize_static_variable:: -* eval_quote:: +* list:: +* mapat:: +* nd_gr nd_gr_trace nd_weyl_gr nd_weyl_gr_trace (module):: +* nd_gr nd_gr_trace nd_weyl_gr nd_weyl_gr_trace (option):: +* noro_matrix.rr:: +* nqt_comp:: * nqt_match:: * nqt_match_rewrite:: +* objtoquote:: +* ot_hgm_ahg.cbase:: +* ot_hgm_ahg.get_mat2:: +* ot_hgm_ahg.hgm_ahg_contiguity:: +* pari setbprec setround todouble mpfr_gamma mpfr_floor mpfr_round:: +* printf fprintf sprintf:: +* qt_is_var qt_is_coef:: * qt_normalize:: +* qt_rewrite:: * qt_set_coef:: * qt_set_ord:: * qt_set_weight:: -* nqt_comp:: -* qt_is_var:: -* qt_is_ceof:: -* qt_rewrite:: -* asirgui.hnd:: -* noro_matrix.rr: -* f_res:: -* chdir:: -* pwd:: -* dcurrenttime:: -* nd_gr nd_gr_trace nd_weyl_gr nd_weyl_gr_trace (module):: -* nd_gr nd_gr_trace nd_weyl_gr nd_weyl_gr_trace (option):: +* quote_to_funargs funargs_to_quote remove_paren get_function_name:: +* quotetotex quotetotex_env:: +* set_print_function:: +* set_secure_flag set_secure_mode:: +* small_jacobi:: +* string_to_tb tb_to_string write_to_tb:: +* tk_fd.abc2ahg:: +* tk_fd.ahvec_abc:: +* tk_hgpoly.hgpoly:: +* tk_hgpoly.optip:: +* tk_jack.zonal:: +* tk_pfn.graph:: +* tk_pfn.rkn:: +* tk_rk.runge_kutta_4:: +* tk_rk.runge_kutta_4_linear:: @end menu @node クオート,,, 実験的仕様の関数 @@ -395,11 +397,12 @@ ChangeLog @end itemize -@node quote_to_funargs,,, クオート -@subsection @code{quote_to_funargs}, @code{funargs_to_quote}, @code{remove_paren} +@node quote_to_funargs funargs_to_quote remove_paren get_function_name,,, クオート +@subsection @code{quote_to_funargs}, @code{funargs_to_quote}, @code{remove_paren}, @code{get_function_name} @findex quote_to_funargs @findex funargs_to_quote @findex remove_paren +@findex get_function_name @table @t @item quote_to_funargs(@var{q}) @@ -517,7 +520,7 @@ ChangeLog @item 2004-6-26 の計算代数セミナーにおいて, 中川さんが simplifier についていろいろ問題提起 をした (計算代数セミナービデオ参照). -@item parse/quote.c の {\tt strcut fid_spec fid_spec_tab[] } +@item parse/quote.c の strcut fid_spec fid_spec_tab[] の部分に書いてある形式に @code{funargs_to_quote} は変換する. @end itemize @@ -1008,7 +1011,7 @@ ChangeLog @end itemize @comment **************************************************************** -@node qt_is_var,,, クオート +@node qt_is_var qt_is_coef,,, クオート @subsection @code{qt_is_var}, @code{qt_is_coef} @findex qt_is_var @findex qt_is_coef @@ -1322,8 +1325,10 @@ ChangeLog @end itemize -@node sprintf,,, 文字列処理 +@node printf fprintf sprintf,,, 文字列処理 @subsection @code{printf}, @code{fprintf}, @code{sprintf} +@findex printf +@findex fprintf @findex sprintf @table @t @@ -1834,7 +1839,7 @@ builtin/dp.c 1.49 @table @var @item gentrace @var{value} が 0 でないとき, グレブナー基底の計算経過情報を出力する. -@item gentsyz +@item gensyz @var{value} が 0 でないとき, 計算されたグレブナー基底に対する syzygy の生成系を出力する. @item nora @var{value} が 0 でないとき, 最終ステップで相互簡約を行わない. @@ -1887,7 +1892,7 @@ builtin/dp.c 1.49 @comment --- ◯◯◯◯ 関数 syz_pqr, xyz_stu の説明 ◯◯◯◯ @comment --- 複数の関数をまとめて説明する例 --- -@node asir-install.sh,,, システム +@node asir-port.sh asir-install.sh,,, システム @subsection @code{asir-port.sh}, @code{asir-install.sh} @findex asir-port.sh @findex asir-install.sh @@ -1945,9 +1950,10 @@ ChangeLog @comment **************************************************************** @itemize @bullet -@item asirgui (Windows 版) を起動すると asirgui.exe のあるフォルダおよび 環境変数 TEMP が定義されていればこのファイルが作成される. -@item 中身は10進整数で, asirgui の main winodw のハンドルである. このハンドルあてに PostMessage をすれば, asuirgui にキーボードから入力したのと同様な効果が得られる. +@item asirgui (Windows 版) を起動すると 環境変数 TEMP で指定されたフォルダにこのファイルが作成される. +@item 中身は10進整数で, asirgui の main window のハンドルである. このハンドルあてに PostMessage をすれば, asuirgui にキーボードから入力したのと同様な効果が得られる. @item text editor で作成, 保存したファイルを text editor 側から asirgui に読み込ませたりするために利用可能. +@item http://www.math.kobe-u.ac.jp/Asir/Add-ons にて winfep.exe を配布している. winfep ではあらかじめファイルに入力スクリプトを書いておいて, asirgui で一行づつ実行させることができる. winfep はプレゼンテーション用のソフトウエアである. これは asirgui.hnd を利用している. @end itemize @example @@ -1988,12 +1994,14 @@ ChangeLog @item この機能は 2006-12-5, 2007-02-13 に加えられた. @item @code{OpenXM_contrib2/windows/asir32gui/asir32gui.clw} 1.11 @item @code{OpenXM_contrib2/windows/asir32gui/asir32guiview.cpp} 1.15, 1.1.6 +@item winfep は 2010-01-20 頃に第一版が commit された. +@item @code{OpenXM_contrib2/windows/winfep} 1.1 @end itemize @comment **************************************************************** -@node chdir,,, システム +@node chdir pwd,,, システム @subsection @code{chdir}, @code{pwd} @findex chdir @findex pwd @@ -2017,8 +2025,6 @@ ChangeLog @code{pwd} はカレントディレクトリを文字列で返す. @item @code{chdir} はカレントディレクトリを @var{directory} に変更する. 成功すれば 0 を失敗すれば -1 を返す. -@item -これらの関数は UNIX 版にのみ実装されている. @end itemize @example @@ -2086,13 +2092,130 @@ ChangeLog @end itemize +@node getpid,,, システム +@subsection @code{getpid} +@findex getpid + +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- +@table @t +@item getpid() +@end table + +@table @var +@item return +整数 +@end table + +@itemize @bullet +@item asir のプロセス番号を戻す. +@item プロセス番号は asir, ox_asir 等で独立したプロセスに対してシステム内で一意である. +@end itemize + +@example +[219] getpid(); +3214 +@end example + + +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. +@noindent +ChangeLog +@itemize @bullet +@item この関数は ox_work_dir() 関数が一意な作業ファイル名を得るために使われている. +src/asir-contrib/packages/src/misc/rr 1.3, +asir2000/builtin/file.c 1.28, rat.c 1.5, +asir2000/parse/puref.c 1.9 を参照 (2013/02/15, 18). +@end itemize + + +@node loadpath,,, システム +@subsection @code{loadpath} +@findex loadpath + +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- +@table @t +@item ctrl(``loadpath''[,list]) +@end table + +@table @var +@item list +文字列(パス)のリスト +@item return +文字列(パス)のリスト, または数(listが与えられたとき) +@end table + +@itemize @bullet +@item asir の組み込み関数 ctrl のスイッチのひとつである. +@item asir のロードパスの出力または設定を行う. +@end itemize + +@example +[0] L=ctrl("loadpath"); +[/home/you/OpenXM/lib/asir-contrib,/home/you/OpenXM/lib/asir,.] +[1] ctrl("loadpath", cons(getenv("HOME")+"/lib",L)); +0 +@end example + + +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. +@noindent +ChangeLog +@itemize @bullet +@item この関数は 2014-5-12 にコミットされた. +変更をうけたソースコードは builtin/ctrl.c (1.41) である. +@end itemize + + +@node sysinfo,,, システム +@subsection @code{sysinfo} +@findex sysinfo + +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- +@table @t +@item sysinfo() +@end table + +@table @var +@item return +文字列のリスト +@end table + +@itemize @bullet +@item asir の動作しているオペレーティングシステムの情報を返す. +@item リストの各成分は, OSタイプ, カーネル名, OS名, CPUタイプ, OSバージョン, 完全な情報, ロケールである. +@item OSタイプは unix, macosx, windows のいずれかである. +@item unix および macosx においては, システムコールおよび uname コマンドにより情報を取得している. +windows では, GetVersionEx() などの Win32 API が用いられている. +@end itemize + +@example +[0] sysinfo(); +[windows,WindowsNT,Windows7,x86_64,6.1.7601,WindowsNT 6.1.7601 Windows7 Service Pack 1 x86_64,ja] +@end example + + +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. +@noindent +ChangeLog +@itemize @bullet +@item この関数は 2014-5-14 にコミットされた. +変更をうけたソースコードは builtin/ctrl.c (1.42) である. +@end itemize + + @comment **************************************************************** @node 言語,,, 実験的仕様の関数 @section 言語 -@node get_struct_name,,, 言語 +@node get_struct_name get_element_names get_element_at put_element_at,,, 言語 @subsection @code{get_struct_name}, @code{get_element_names}, @code{get_element_at}, @code{put_element_at} @findex get_struct_name @findex get_element_names @@ -2315,7 +2438,7 @@ ChangeLog @end itemize -@node set_secure_flag,,, 言語 +@node set_secure_flag set_secure_mode,,, 言語 @subsection @code{set_secure_flag}, @code{set_secure_mode} @findex set_secure_flag @findex set_secure_mode @@ -2471,6 +2594,46 @@ ChangeLog @comment **************************************************************** +@node function,,, 言語 +@subsection @code{function} +@findex function + +@table @t +@item function 宣言することにより函数形式の不定元を生成できる. +@end table + +@comment --- 説明 --- +@table @t +@item function 宣言することにより函数形式の不定元を生成できる. +@item 微分函数 diff はこの函数形式の不定元の微分をやはり函数形式の不定元として生成する. +たとえば f@{1,2@}(x,y) は f を x について一階偏微分, y について 2階偏微分したもの. +@item diff は合成関数としての処理も行う. +@end table + + +@example +[1915] function f(x,y); +[1916] F=f(f(x,y),y)$ +[1917] diff(F,y); +f@{1,0@}(f(x,y),y)*f@{0,1@}(x,y)+f@{0,1@}(f(x,y),y) +[1918] vtype(f(p,q)); +2 +[1919] deg(diff(F,y),f@{0,1@}(x,y)); +1 +@end example + +@xref{vtype} +@xref{diff} + +@comment --- ChangeLog +@noindent +ChangeLog +@itemize @bullet +@item いつの commit で導入されたか不明. +@end itemize + +@comment **************************************************************** + @node 数論・代数,,, 実験的仕様の関数 @section 数論・代数 @@ -2605,7 +2768,8 @@ ChangeLog @comment --- 関数の簡単な説明 --- @table @t @item nk_restriction.restriction(@var{Id}, @var{VL}, @var{DVL}, @var{W}) -:: ホロノミック D イデアル @var{Id} を重みベクトル @var{W} についての制限加群を返す。 +:: D 加群 M = D / @var{Id} (ホロノミック D イデアル @var{Id}) に対して, +重みベクトル @var{W} についての制限加群を返す. @end table @comment --- 引数の簡単な説明 --- @@ -2622,28 +2786,29 @@ ChangeLog @itemize @bullet @item -@var{W} の要素は非負整数で、0 番目の要素から連続して正の整数が入らなければならない。 -(すなわち、@code{[1,1,0,0,0]} は OK だが、 @code{[1,0,1,0,0]} はダメ) +@var{W} の要素は非負整数で, 0 番目の要素から連続して正の整数が入らなければならない. +(すなわち, @code{[1,1,0,0,0]} は OK だが、 @code{[1,0,1,0,0]} はダメ) @item -正の重みを持つ変数についての制限を行う。 -例えば、@var{VL} @code{=[x,y,z]}, @var{W} @code{=[1,1,0]} であれば -x,y について制限を行う。 +正の重みを持つ変数についての制限を行う. +例えば, @var{VL} @code{=[x,y,z]}, @var{W} @code{=[1,1,0]} であれば, +x,y について制限を行う. @end itemize -以下は、イデアル +以下は, イデアル @iftex @tex $I = D \cdot \{x \partial_x -1, y \partial_y - 1\} $ @end tex -の -@tex -$x$ -@end tex +とおいた時, D 加群 +@tex $M = D / I$ @end tex +の +@tex $x$ @end tex @end iftex @ifinfo -I = D . @{ x dx -1, y dy - 1 @} の x +I = D . @{ x dx -1, y dy - 1 @} とおいた時, +D 加群 M = D / I の x @end ifinfo -についての制限加群を計算した例である。 +についての制限加群を計算した例である. @example [1432] nk_restriction.restriction([x*dx-1,y*dy-1],[x,y],[dx,dy],[1,0]); -- generic_bfct_and_gr :0.001sec(0.001629sec) @@ -2653,8 +2818,22 @@ B_@{S0@} length : 2 -- fctr(BF) + base :0.000999sec(0.0005109sec) [[y*dy-1,(y*dy-1)*dx,-1],[[1],[0]]] @end example +返り値の第 1 番目の要素 @code{[[1],[0]]]} は, +制限加群の基底 +@iftex +@tex $\partial_x^1, \partial_x^0$ @end tex +を意味し, +返り値の第 0 番目の要素から, 制限加群は +@tex $(y \partial_y - 1, 0), (0, y\partial_y-1), (-1,0)$ @end tex +@end iftex +@ifinfo +dx^1, dx^0 +を意味し, +返り値の第 0 番目の要素から, 制限加群は +(y dy - 1, 0), (0, ydy-1), (-1,0) +@end ifinfo +で生成されることがわかる. - @node nk_restriction.restriction_ideal,,, D 加群の制限に関する関数 @subsection @code{nk_restriction.restriction_ideal} @comment --- 索引用キーワード @@ -2663,7 +2842,7 @@ B_@{S0@} length : 2 @comment --- 関数の簡単な説明 --- @table @t @item nk_restriction.restriction_ideal(@var{Id}, @var{VL}, @var{DVL}, @var{W}) -:: ホロノミック D イデアル @var{Id} を重みベクトル @var{W} についての制限イデアルを返す。 +:: ホロノミック D イデアル @var{Id} を重みベクトル @var{W} についての制限イデアルを返す. @end table @comment --- 引数の簡単な説明 --- @@ -2680,23 +2859,19 @@ B_@{S0@} length : 2 @itemize @bullet @item -@var{W} の要素は非負整数で、0 番目の要素から連続して正の整数が入らなければならない。 -(すなわち、@code{[1,1,0,0,0]} は OK だが、 @code{[1,0,1,0,0]} はダメ) +@var{W} の要素は非負整数で, 0 番目の要素から連続して正の整数が入らなければならない. +(すなわち, @code{[1,1,0,0,0]} は OK だが, @code{[1,0,1,0,0]} はダメ) @item -正の重みを持つ変数についての制限を行う。 -例えば、@var{VL} @code{=[x,y,z]}, @var{W} @code{=[1,1,0]} であれば -x,y について制限を行う。 +正の重みを持つ変数についての制限を行う. +例えば, @var{VL} @code{=[x,y,z]}, @var{W} @code{=[1,1,0]} であれば, +x,y について制限を行う. @end itemize -以下は、イデアル +以下は, イデアル @iftex -@tex -$I = D \cdot \{x \partial_x -1, y \partial_y - 1\} $ -@end tex +@tex $I = D \cdot \{x \partial_x -1, y \partial_y - 1\} $ @end tex の -@tex -$x$ -@end tex +@tex $x$ @end tex @end iftex @ifinfo I = D . @{ x dx -1, y dy - 1 @} の x @@ -2721,7 +2896,7 @@ B_@{S0@} length : 2 @comment --- 関数の簡単な説明 --- @table @t @item nk_restriction.integration(@var{Id}, @var{VL}, @var{DVL}, @var{W}) -:: ホロノミック D イデアル @var{Id} を重みベクトル @var{W} についての積分加群を返す。 +:: D 加群 M = D / @var{Id} (ホロノミック D イデアル @var{Id}) に対して, 重みベクトル @var{W} についての積分加群を返す. @end table @comment --- 引数の簡単な説明 --- @@ -2741,28 +2916,27 @@ B_@{S0@} length : 2 @comment --- @bullet は黒点付き --- @itemize @bullet @item -@var{W} の要素は非負整数で、0 番目の要素から連続して正の整数が入らなければならない。 -(すなわち、@code{[1,1,0,0,0]} は OK だが、 @code{[1,0,1,0,0]} はダメ) +@var{W} の要素は非負整数で, 0 番目の要素から連続して正の整数が入らなければならない. +(すなわち, @code{[1,1,0,0,0]} は OK だが, @code{[1,0,1,0,0]} はダメ) @item -正の重みを持つ変数についての積分を行う。 -例えば、@var{VL} @code{=[x,y,z]}, @var{W} @code{=[1,1,0]} であれば -x,y について積分を行う。 +正の重みを持つ変数についての積分を行う. +例えば, @var{VL} @code{=[x,y,z]}, @var{W} @code{=[1,1,0]} であれば, +x,y について積分を行う. @end itemize -以下は、イデアル +以下は, イデアル @iftex -@tex -$I = D \cdot \{2 t \partial_x + \partial_t, t \partial_t + 2 x \partial_x + 2\} $ -@end tex -の -@tex -$t$ -@end tex +@tex $I = D \cdot \{2 t \partial_x + \partial_t, t \partial_t + 2 x \partial_x + 2\}$ @end tex +とおいた時, D 加群 +@tex $M = D / I$ @end tex +の +@tex $t$ @end tex @end iftex @ifinfo -I = D . @{2 t dx + dt, t dt + 2 x dx + 2 @} の t +I = D . @{2 t dx + dt, t dt + 2 x dx + 2 @} +とおいた時, D 加群 M = D / I の t @end ifinfo -についての積分イデアルを計算した例である。([SST, Ex5.5.2, Ex5.5.6]) +についての積分加群を計算した例である. ([SST, Ex5.5.2, Ex5.5.6]) @example [1351] nk_restriction.integration([2*t*dx+dt,2*x*dx+t*dt+2],[t,x], [dt,dx],[1,0]); @@ -2773,6 +2947,25 @@ B_@{S0@} length : 2 -- fctr(BF) + base :0.001sec(0.0006731sec) [[4*x*dx^2+6*dx,-4*t*x*dx^2-6*t*dx,2*x*dx+1,-2*t*x*dx,2*t*dx],[[1],[0]]] @end example +返り値の第 1 番目の要素 @code{[[1],[0]]]} は, +積分加群の基底 +@iftex +@tex $t^1, t^0$ @end tex +@end iftex +@ifinfo +t^1, t^0 +@end ifinfo +を意味し, +返り値の第 0 番目の要素から, 積分加群は +@iftex +@tex $(4 x \partial_x^2 + 6 \partial_x, 0), (0, -4 x \partial_x^2 - 6 \partial_x), +(0, -2 x \partial_x), (0, 2 \partial_x)$ @end tex +@end iftex +@ifinfo +(4 x dx^2 + 6 dx, 0), (0, -4 x dx^2 - 6 dx), +(0, -2 x dx), (0, 2 dx) +@end ifinfo +で生成されることがわかる. @node nk_restriction.integration_ideal,,, D 加群の制限に関する関数 @subsection @code{nk_restriction.integration_ideal} @@ -2782,7 +2975,7 @@ B_@{S0@} length : 2 @comment --- 関数の簡単な説明 --- @table @t @item nk_restriction.integration_ideal(@var{Id}, @var{VL}, @var{DVL}, @var{W}) -:: ホロノミック D イデアル @var{Id} を重みベクトル @var{W} についての積分イデアルを返す。 +:: ホロノミック D イデアル @var{Id} を重みベクトル @var{W} についての積分イデアルを返す. @end table @comment --- 引数の簡単な説明 --- @@ -2802,28 +2995,26 @@ B_@{S0@} length : 2 @comment --- @bullet は黒点付き --- @itemize @bullet @item -@var{W} の要素は非負整数で、0 番目の要素から連続して正の整数が入らなければならない。 -(すなわち、@code{[1,1,0,0,0]} は OK だが、 @code{[1,0,1,0,0]} はダメ) +@var{W} の要素は非負整数で, 0 番目の要素から連続して正の整数が入らなければならない. +(すなわち, @code{[1,1,0,0,0]} は OK だが, @code{[1,0,1,0,0]} はダメ) @item -正の重みを持つ変数についての積分を行う。 -例えば、@var{VL} @code{=[x,y,z]}, @var{W} @code{=[1,1,0]} であれば -x,y について積分を行う。 +正の重みを持つ変数についての積分を行う. +例えば, @var{VL} @code{=[x,y,z]}, @var{W} @code{=[1,1,0]} であれば, +x,y について積分を行う. @end itemize -以下は、イデアル +以下は, イデアル @iftex @tex $I = D \cdot \{2 t \partial_x + \partial_t, t \partial_t + 2 x \partial_x + 2\} $ @end tex の -@tex -$t$ -@end tex +@tex $t$ @end tex @end iftex @ifinfo I = D . @{2 t dx + dt, t dt + 2 x dx + 2 @} の t @end ifinfo -についての積分イデアルを計算した例である。([SST, Ex5.5.2, Ex5.5.6]) +についての積分イデアルを計算した例である. ([SST, Ex5.5.2, Ex5.5.6]) @example [1431] nk_restriction.integration_ideal([2*t*dx+dt,t*dt+2*x*dx+2],[t,x], [dt,dx],[1,0]); @@ -2834,25 +3025,1323 @@ B_@{S0@} length : 2 -- fctr(BF) + base :0.001sec(0.001091sec) -- integration_ideal_internal :0.002sec(0.001879sec) [2*x*dx+1] -[1432] @end example +@node nk_restriction.ann_mul,,, D 加群の制限に関する関数 +@subsection @code{nk_restriction.ann_mul} +@comment --- 索引用キーワード +@findex nk_restriction.ann_mul + +@comment --- 関数の簡単な説明 --- +@table @t +@item nk_restriction.ann_mul(@var{I}, @var{J}, @var{VL}, @var{DVL}) +:: @var{f} を零化するホロノミック D イデアル @var{I}, +@var{g} を零化するホロノミック D イデアルを @var{J} としたとき, +@var{fg} を零化するホロノミック D イデアルを返す. +@end table + +@comment --- 引数の簡単な説明 --- +@table @var +@item I +イデアルの生成元のリスト +@item J +イデアルの生成元のリスト +@item VL +変数のリスト +@item DVL +変数のリスト(@var{VL} に対応する微分作用素の方の変数) +@end table + +@comment --- ここで関数の詳しい説明 --- +@comment --- @itemize〜@end itemize は箇条書き --- +@comment --- @bullet は黒点付き --- +@itemize @bullet +@item test_ann_mul(), test_ann_mul2(), test_ann_mul3() を参照. +@end itemize + + +@node nk_restriction (option) ,,, D 加群の制限, 積分に関する関数の説明 (option) +@subsection @code{nk_restriction (option)} +@comment --- 索引用キーワード +@findex nk_restriction (option) + +@comment --- 関数の簡単な説明 --- +@table @t +@item nk_restriction.restriction(... | inhomo=@var{n}, param=@var{p}, s0=@var{m}) +@item nk_restriction.restriction_ideal(... | inhomo=@var{n}, param=@var{p}, s0=@var{m}, ht=@var{b}, ord=@var{ord}) +@item nk_restriction.integration(... | inhomo=@var{n}, param=@var{p}, s0=@var{m}) +@item nk_restriction.integration_ideal(... | inhomo=@var{n}, param=@var{p}, s0=@var{m}, ht=@var{b}, ord=@var{ord}) +:: D 加群の制限, 積分に関する関数のオプションの説明 +@end table + +@comment --- 引数の簡単な説明 --- +@table @var +@item @var{n} +0 または 1 +@item @var{p} +リスト (係数体に属する変数のリスト) +@item @var{m} +整数 +@item @var{b} +0, 1, 2, 3 のいずれか +@item @var{ord} +重み0の変数に対する項順序 +@end table + +@comment --- ここで関数の詳しい説明 --- +@comment --- @itemize〜@end itemize は箇条書き --- +@comment --- @bullet は黒点付き --- +@itemize @bullet +@item @var{n} が 0 でないとき, 非斉次部分の計算を行う. + +restriction_ideal (integration_ideal) に関しては, イデアル @code{I} の +@code{M} 変数についての制限(積分)イデアル @code{J} と + +@iftex +@tex +{\tt J[K]-(1/IH[K][1])(IH[K][0][0][0]IH[K][0][0][1]+...+IH[K][0][M][0]IH[K][0][M][1])} $\in$ {\tt I} +@end tex +@end iftex +@ifinfo +J[K]-(1/IH[K][1])(IH[K][0][0][0]IH[K][0][0][1]+...+IH[K][0][M][0]IH[K][0][M][1]) \in I +@end ifinfo + +を満たす非斉次部分を構成する情報 @code{IH} とのペア @code{[J,IH]} を出力する. +詳しい出力の見方については, 下の例やソースの @code{inhomo_part} の +コメントを参照. + +restriction, integration に対する @code{inhomo} オプションは +restriction_ideal, integration_ideal のサブルーチンとしての実行用なので, +ユーザが明示的に使用することはない. + +@item @var{param} に指定された変数は係数体に属するものとみなされて計算が行われる. +また, ``generic'' であることが仮定される. +つまり, これらの変数に依存するような generic b-関数の根は, +最大整数根でないということである. + +@item @var{param} が指定されると, generic b-関数の計算は noro による +高速アルゴリズムではなく, 消去法が用いられる. +@var{param} に空リストを指定することで, b-関数の計算方法のフラグとしても +利用できる. + +@item @var{m} が負でないとき, 計算を行わずに s-m を generic b-関数として +制限, 積分等の計算を行う. + +@item @var{b} により, 加群のグレブナ基底計算に斉次化, trace アルゴリズム +を用いるかどうか指定できる. +ただし, 斉次化ありで計算できるのは Risa/Asir バージョン 20100415 以降である. + +0: 斉次化なし, trace なし + +1: 斉次化なし, trace あり + +2: 斉次化あり, trace なし (デフォルト) + +3: 斉次化あり, trace あり + +@item @var{ord} が指定されると, 出力の積分, 制限イデアルは, その項順序に +関するグレブナ基底となる. 加群のグレブナ基底計算の POT 順序の tie breaker +として使用されるので計算効率に大きな影響を与える可能性がある. +デフォルトは 0, つまり全次数逆次書式順序である. + +このオプションは @var{param} と同時利用できない. (後に対応予定.) +@end itemize + +以下は, +@iftex +@tex +$ t^{b-1} (1-t)^{c-b-1} (1-xt)^{-a} $ +@end tex +の annihilator +@tex +$I = D \cdot \{ x(1-x) \partial_x^2+((1-t) \partial_t-(a+b+1)x+c-1) + \partial_x-ab, (1-t)x \partial_x+t(1-t) \partial_t+(2-c)t+b-1, + (xt-1) \partial_x+at \}$ +@end tex +の +@tex +$t$ +@end tex +についての積分イデアル +@tex +$J$ +@end tex +を計算し, Gauss の超幾何微分方程式を導出した例である. ([SST, Chap 1.3]) +@end iftex +@ifinfo +t^@{b-1@} (1-t)^@{c-b-1@} (1-xt)^@{-a@} +の annihilator +I = D . @{ x(1-x)dx^2+((1-t)dt-(a+b+1)x+c-1)dx-ab, + (1-t)x dx+t(1-t)dt+(2-c)t+b-1, (xt-1)dx+at @} +の t についての積分イデアル J +を計算し, Gauss の超幾何微分方程式を導出した例である. ([SST, Chap 1.3]) +@end ifinfo +@example +[1555] A=ndbf.ann_n([t,1-t,1-x*t])$ +[1556] I=map(subst,A,s0,b-1,s1,c-b-1,s2,-a); +[(x^2-x)*dx^2+((t-1)*dt+(a+b+1)*x-c+1)*dx+b*a,(-t+1)*x*dx+(t^2-t)*dt+(-c+2)*t+b-1,(t*x-1)*dx+a*t] +[1557] J=nk_restriction.integration_ideal(I,[t,x],[dt,dx],[1,0]|inhomo=1, param=[a,b,c]); +-- nd_weyl_gr :0sec(0.001875sec) +-- weyl_minipoly_by_elim :0.008001sec(0.006133sec) +-- generic_bfct_and_gr :0.008001sec(0.006181sec) +generic bfct : [[-1,1],[s,1],[s-a+c-1,1]] +S0 : 0 +B_@{S0@} length : 1 +-- fctr(BF) + base :0sec(0.003848sec) +-- integration_ideal_internal :0sec(0.07707sec) +[[(x^2-x)*dx^2+((a+b+1)*x-c)*dx+b*a],[[[[dt,(-t+1)*dx]],1]]] +@end example +@iftex +この出力は +@tex +$\{(x^2-x) \partial_x^2+((a+b+1)x-c) \partial_x+ab \} +- 1/1 \{ \partial_t (-t+1) \partial_x \} \in I$ +@end tex +であることを意味する. +@end iftex +@ifinfo +この出力は +@{(x^2-x)dx^2+((a+b+1)x-c)dx+ab @} - 1/1 @{ dt (-t+1)dx @} \in I +であることを意味する. +@end ifinfo + +@node nk_restriction.trans_inhomo,,, D 加群の積分イデアルの非斉次部分に関する関数 +@subsection @code{nk_restriction.trans_inhomo} +@comment --- 索引用キーワード +@findex nk_restriction.trans_inhomo + +@comment --- 関数の簡単な説明 --- +@table @t +@item nk_restriction.trans_inhomo(@var{P}, @var{INT}, @var{VL}, @var{DVL}, @var{W}) +:: D 加群の制限イデアル, 積分イデアルの生成元に対する非斉次部分の情報から, 任意の元に対する非斉次部分を計算する関数 +@end table + +@comment --- 引数の簡単な説明 --- +@table @var +@item P +積分イデアルの元, または制限イデアルの元 +@item INT +nk_restriction.integration_ideal( ... |inhomo=1); または + +nk_restriction.restriction_ideal( ... |inhomo=1); の出力 +@item VL +変数のリスト +@item DVL +変数のリスト(@var{VL} に対応する微分作用素の方の変数) +@item W +重みベクトルを表すリスト +@end table + +@comment --- ここで関数の詳しい説明 --- +@comment --- @itemize〜@end itemize は箇条書き --- +@comment --- @bullet は黒点付き --- +@itemize @bullet +@item @var{VL}, @var{DVL}, @var{W} は @var{INT} の計算に用いたものをそのまま使用しなければならない. +@item もし, @var{P} が @var{INT[0]} で生成される積分, 制限イデアルの元でない場合はエラーメッセージが表示される. +@end itemize + +@node nk_restriction.ost_integration_ideal,,, D 加群の積分イデアル +@subsection @code{nk_restriction.ost_integration_ideal} +@comment --- 索引用キーワード +@findex nk_restriction.ost_integration_ideal + +@comment --- 関数の簡単な説明 --- +積分領域が区間の直積であるような積分の満たす +ホロノミック斉次微分方程式系を返す (Oaku-Shiraki-Takayama, 2003). +@table @t +@item nk_restriction.ost_integration_ideal(@var{Id}, @var{VL}, @var{DVL}, @var{W}, @var{LB}, @var{UB}) +:: Heaviside 関数との積の満たす微分方程式系の計算にショートカット法を用いる. +@item nk_restriction.ost_integration_ideal2(@var{Id}, @var{VL}, @var{DVL}, @var{W}, @var{LB}, @var{UB}) +:: Heaviside 関数との積の満たす微分方程式系の計算に制限イデアルを用いる. +@end table + +@comment --- 引数の簡単な説明 --- +@table @var +@item Id +イデアルの生成元のリスト +@item VL +変数のリスト +@item DVL +変数のリスト(@var{VL} に対応する微分作用素の方の変数) +@item W +重みベクトルを表すリスト +@item LB +積分区間の下端を表すリスト +@item UB +積分区間の上端を表すリスト +@end table + +@comment --- ここで関数の詳しい説明 --- +@comment --- @itemize〜@end itemize は箇条書き --- +@comment --- @bullet は黒点付き --- +@itemize @bullet +@item 下端, 上端に無限大を指定するときは, 文字列 "inf", "+inf", "-inf" を用いる. +@end itemize + +以下は, Oaku-Shiraki-Takayama (2003) の例5.1を計算したものである. +@iftex +@tex +$ \int_0^\infty \exp((-t^3+t)x) dt $ +@end tex +の被積分関数の満たすホロノミックイデアルは +@tex +$ I = \langle \partial_t +(3t^2-1)x, \partial_x+t^3-t \rangle $ +@end tex +であるから, これを入力として次のように計算を行う. +@end iftex +@ifinfo +\int_0^∞ exp((-t^3+t)x) dt +の非積分関数の満たすホロノミックイデアルは +I = < dt +(3t^2-1)x, dx+t^3-t > +であるから, これを入力として次のように計算を行う. +@end ifinfo +@example +[1871] Id=[dt+(3*t^2-1)*x, dx+t^3-t]$ +[1872] VL=[t,x]$ +[1873] DVL=[dt,dx]$ +[1874] W=[1,0]$ +[1875] nk_restriction.ost_integration_ideal(Id,VL,DVL,W,[0],["inf"]); +-- nd_weyl_gr :0.008sec(0.006768sec) +-- weyl_minipoly :0.004001sec(0.003029sec) +-- generic_bfct_and_gr :0.012sec(0.0129sec) +generic bfct : [[1,1],[s,1],[s-2,1]] +S0 : 2 +B_@{S0@} length : 3 +-- fctr(BF) + base :0.008sec(0.007395sec) +-- integration_ideal_internal :0.012sec + gc : 0.016sec(0.04311sec) +[-27*x^3*dx^3-54*x^2*dx^2+(4*x^3+3*x)*dx+4*x^2-3,27*x^2*dx^4+135*x*dx^3+(-4*x^2+105)*dx^2-16*x*dx-8] + + +[1876] nk_restriction.ost_integration_ideal2(Id,VL,DVL,W,[0],["inf"]); +(略) +[27*x^3*dx^3+54*x^2*dx^2+(-4*x^3-3*x)*dx-4*x^2+3,-27*x^2*dx^4-135*x*dx^3+(4*x^2-105)*dx^2+16*x*dx+8] +@end example +この出力は, 積分を零化するホロノミック系である. + +@node nk_restriction.ost_sum,,, D 加群の積分イデアル +@subsection @code{nk_restriction.ost_sum} +@comment --- 索引用キーワード +@findex nk_restriction.ost_sum + +@comment --- 関数の簡単な説明 --- +@table @t +@item nk_restriction.ost_sum(@var{Id}, @var{VL}, @var{DVL}, @var{W}) +:: 和の満たす(斉次/非斉次)差分方程式系を返す. +@end table + +@comment --- 引数の簡単な説明 --- +@table @var +@item Id +イデアルの生成元のリスト +@item VL +変数のリスト +@item DVL +変数のリスト(@var{VL} に対応する差分作用素の方の変数) +@item W +重みベクトルを表すリスト +@end table + +@comment --- ここで関数の詳しい説明 --- +@comment --- @itemize〜@end itemize は箇条書き --- +@comment --- @bullet は黒点付き --- +@itemize @bullet +@item Oaku-Shiraki-Takayama (2003) の第6節のアルゴリズムの実装. +@item オプション inhomo が 0 でないとき, 非斉次部分を与える情報も返す. +@end itemize + +以下は, Oaku-Shiraki-Takayama (2003) の例6.5の非斉次部分まで計算したものである. +@iftex +@tex +$ \sum_{k=a}^b {n \choose k} $ +@end tex +の非和関数の満たすホロノミックイデアルは +@tex +$ I = \langle (n-k+1)E_n-(n+1), (k+1)E_k-(n-k) \rangle $ +@end tex +であるから, これを入力として次のように計算を行う. +@end iftex +@ifinfo +\sum_@{k=a@}^b n_C_k +の非和関数の満たすホロノミックイデアルは +I = < (n-k+1)E_n-(n+1), (k+1)E_k-(n-k) > +であるから, これを入力として次のように計算を行う. +@end ifinfo +@example +[1871] Id=[(n-k+1)*en-(n+1), (k+1)*ek-(n-k)]$ +[1872] VL=[k,n]$ +[1873] DVL=[ek,en]$ +[1874] W=[1,0]$ +[1875] nk_restriction.ost_sum(Id,VL,DVL,W|inhomo=1); +-- nd_weyl_gr :0.006667sec(0.004057sec) +-- weyl_minipoly :0sec(0.001163sec) +-- generic_bfct_and_gr :0.01sec(0.007085sec) +generic bfct : [[1,1],[s,1]] +S0 : 0 +B_@{S0@} length : 1 +-- fctr(BF) + base :0.003333sec(0.001785sec) +-- restriction_ideal_internal :0sec(0.002336sec) +[[(en-2)*n+en-2],[[[[ek-1,[(-en+1)*n-en+1,1]]],1]]] +@end example + +@node nk_restriction.module_restriction,,, D 加群の制限に関する関数 +@subsection @code{nk_restriction.module_restriction} +@comment --- 索引用キーワード +@findex nk_restriction.module_restriction + +@comment --- 関数の簡単な説明 --- +@table @t +@item nk_restriction.module_restriction(@var{M}, @var{VL}, @var{DVL}, @var{W}) +:: D 加群 D^r/@var{M} (@var{M} は D^r の部分加群) の重みベクトル @var{W} についての制限加群を返す. +@end table + +@comment --- 引数の簡単な説明 --- +@table @var +@item M +D 自由加群 D^r の部分加群 +@item VL +変数のリスト +@item DVL +変数のリスト(@var{VL} に対応する微分作用素の方の変数) +@item W +重みベクトルを表すリスト +@end table + +@itemize @bullet +@item +@var{W} の要素は非負整数で, 0 番目の要素から連続して正の整数が入らなければならない. +@comment{(すなわち、@code{[1,1,0,0,0]} は OK だが、 @code{[1,0,1,0,0]} はダメ)} +現在のところ, 1 変数についてだけ制限をとるようにしか実装していないため, +@var{W} は 0 番目の要素だけ正の整数が入る. +@item +正の重みを持つ変数についての制限を行う. +例えば, @var{VL} @code{=[x,y,z]}, @var{W} @code{=[1,0,0]} であれば +x について制限を行う. +@end itemize + +以下は, D 自由加群 +@iftex +@tex $D^2$ @end tex +の部分加群 +@tex +$M = D \cdot \{(\partial_x, \partial_y), (\partial_y, \partial_x), (x,y) \}$ +@end tex +をとり, D 加群 +@tex $D^2 / M$ @end tex +の +@tex $x$ @end tex +@end iftex +@ifinfo +D^2 の部分加群 M = D . @{ (dx, dy), (dy, dx), (x, y) @} +をとり, D 加群 D^2 / M の x +@end ifinfo +ついての制限加群を計算した例である. +@example +[2691] nk_restriction.module_restriction([[dx,dy],[dy,dx],[x,y]], [x,y], [dx,dy], [1,0]); +.... +bfunction : +s +[[1,1],[s,1]] +integer roots : +[0,0] +Generators: +[e1,e2] +Relations: +[-8*e2*dy,4*e2*dy^2,-4*e2*dy^3,4*e1*y*dy-4*e1,-4*e1*dy^2,-4*e2,-e2*y*dy^2+2*e2*dy,-e1*y*dy+e1,e1*y*dy-e1] +[[0,-1],[-dy^2,0],[y*dy-1,0]] +@end example +制限加群は +@iftex +@tex $(0, -1), (-\partial_y^2, 0), (y \partial_y -1 , 0)$ @end tex +@end iftex +@ifinfo +(0, -1), (-dy^2, 0), (y, dy-1, 0) +@end ifinfo +で生成されることがわかる. + +@node nk_restriction.module_integration,,, D 加群の制限に関する関数 +@subsection @code{nk_restriction.module_integration} +@comment --- 索引用キーワード +@findex nk_restriction.module_integration + +@comment --- 関数の簡単な説明 --- +@table @t +@item nk_restriction.module_integration(@var{M}, @var{VL}, @var{DVL}, @var{W}) +:: D 加群 D^r/M (@var{M} は D^r の部分加群) の重みベクトル @var{W} についての積分加群を返す. +@end table + +@comment --- 引数の簡単な説明 --- +@table @var +@item M +D 自由加群 D^r の部分加群 +@item VL +変数のリスト +@item DVL +変数のリスト(@var{VL} に対応する微分作用素の方の変数) +@item W +重みベクトルを表すリスト +@end table + +@itemize @bullet +@item +@var{W} の要素は非負整数で, 0 番目の要素から連続して正の整数が入らなければならない. +@comment{(すなわち、@code{[1,1,0,0,0]} は OK だが、 @code{[1,0,1,0,0]} はダメ)} +現在のところ, 1 変数についてだけ積分をとるようにしか実装していないため, +@var{W} は 0 番目の要素だけ正の整数が入る. +@item +正の重みを持つ変数についての積分を行う. +例えば, @var{VL} @code{=[x,y,z]}, @var{W} @code{=[1,0,0]} であれば +x について積分を行う. +@end itemize + +以下は, D 自由加群 +@iftex +@tex $D^2$ @end tex +の部分加群 +@tex $M = D \cdot \{(x, y), (y, x), (\partial_x, \partial_y) \}$ @end tex +をとり, D 加群 +@tex $D^2/M$ @end tex +の +@tex $x$ @end tex +@end iftex +@ifinfo +D^2 の部分加群 M = D . @{ (x, y), (y, x), (dx, dy) @} をとり, +D 加群 D^2 / M の x +@end ifinfo +についての積分加群を計算した例である. +@example +[2702] nk_restriction.module_integration([[x,y],[y,x],[dx,dy]], [x,y], [dx,dy], [1,0]); +... +bfunction : +s +[[1,1],[s,1]] +integer roots : +[0,0] +Generators: +[e1,e2] +Relations: +[-8*e2*y,-4*e2*y^2,-4*e2*y^3,-4*e1*y*dy-8*e1,-4*e1*y^2,-4*e2,-e2*y^2*dy-4*e2*y,e1*y*dy+2*e1,e1*y*dy+2*e1] +[[0,-1],[y*dy+2,0],[-y^2,0]] +@end example +積分加群は +@iftex +@tex $(0, -1), (y \partial_y + 2, 0), (-y^2, 0)$ @end tex +@end iftex +@ifinfo +(0, -1), (y dy + 2, 0), (-y^2, 0) +@end ifinfo +で生成されることがわかる. + @noindent ChangeLog @itemize @bullet @item これらの関数は OpenXM/src/asir-contrib/packages/src/nk_restriction.rr で定義されている. nk_restriction.rr, 1.1--1.6 を見よ. +@item 2010-02-05 に 3 つの option (@code{inhomo}, @code{param}, @code{s0}) が追加された. 1.7--1.9 を見よ. +@item 2010-05 から 2010-07 にかけて 2 つの option (@code{ht}, @code{ord}) と +新たな関数 trans_inhomo() が追加された. 1.10--1.13 を見よ. +@item 2011-08 に ost_sum() が追加された. 1.20 を見よ. +@item 2016-05 に module_integration(), module_restriction() が追加された. @end itemize -@node その他,,, 実験的仕様の関数 -@section その他 +@node その他(未分類),,, 実験的仕様の関数 +@section その他(未分類) -@comment ----------- 以下は見本. 消すな. +@node tk_pfn.rkn,,, 実験的仕様の関数 +@subsection @code{tk_pfn.rkn} +@findex tk_pfn.rkn + +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- +@table @t +@item tk_pfn.rkn(@var{F},@var{X},@var{Y},@var{Xs},@var{Ys},@var{Ht},@var{H}) +:: Pfaffian 方程式に対する Runge-Kutta 法 +@end table + +@table @var +@item return +リスト 独立変数と解の組 +@item F, X, Y, Xs, Ys, Ht, H +@var{F} は Pfaffian 方程式の係数行列リスト. +@var{X} は独立変数リスト. +@var{Y} は従属変数リスト. +@var{Xs} 独立変数の出発値リスト. +@var{Ys} は出発時の従属変数の値リスト. +@var{Xt} は停止する独立変数の値リスト. +@var{H} は微少数. +@end table + +@itemize @bullet +@item この関数は連立Pfaffian方程式 dY/d X[i] = F[i] Y を数値的に解く. +@item 任意の holonomic system は Pfaffian 方程式に変換できる ([SST, Chap 1]). 変換には yang.rr パッケージを用いる. +@item d F[i]/d X[j] + F[i] F[j] = d F[j]/d X[i] + F[j] F[i] = 0 が任意の i, j に対して成立していることが解が存在する必要十分条件である. この条件が成立しないときにこの関数を用いて解を計算してもその解は偽物である. +@item X[i] が動く範囲は実数でないといけない. +@item Xs[i] <= X[i] <= Xt[i] または Xt[i] <= X[i] <= Xs[i] である. +@item 引数の与え方の例はソースコード (@code{OpenXM/lib/asir-contrib/tk_pfn.rr} )の @code{tk_pfn.test1}, @code{tk_pfn.test2} を参照. +@item 下の例の出力は X=(1,3) での値が Y=(-8,2,-6) であることを意味する. +@item 参考. taka_runge_kutta.rr, yang.rr +@end itemize + +@example +[1355] import("tk_pfn.rr"); +[1590] tk_pfn.test1(); +Value at (3,0.1)[8.99,6,-0.2] +Value at (1,3)[-8,2,-6] +[[[1,3],-8,2,-6], + [[1,2.9],-7.41,2,-5.8], + --- snip --- + [[3,0.1],8.99,6,-0.2]] +@end example + + +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. +@noindent +ChangeLog +@itemize @bullet +@item この関数は 2009-12 から 2010-01 にかけて最初の版が書かれた. +@item @code{OpenXM/src/asir-contrib/packages/src/tk_pfn.rr} 1.1, 1.2 +@item このモジュールの前身は @code{tk_pf2.rr} である. これは独立変数が 2 個の場合である. +@end itemize + + +@node tk_pfn.graph,,, 実験的仕様の関数 +@subsection @code{tk_pfn.graph} +@findex tk_pfn.graph + +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- +@table @t +@item tk_pfn.graph(@var{Pf},@var{Dom},@var{Iv},@var{Step}) +:: 2変数 Pfaffian 方程式を Runge-Kutta 法で解いてグラフ表示する. +@end table + +@table @var +@item return +リスト リストの要素は以下の形式 [[xの値,yの値],Y_1の値,Y_2の値, ...]. +[xの値, yの値] は [0,0],[0.2,0],[0.4,0], ... , [0,0.2],[0.2,0.2], ... のように +y の値が外側ループ, x の値が内側ループの形式で増える. +@item Pf, Dom, Iv, Step +@var{Pf} は Pfaffian 方程式の係数行列リスト. 独立変数は x, y で固定. +@var{Dom} リスト. 解くべき領域. +@var{Iv} リスト. 領域の左端での初期値. +@var{Step} 刻み幅. +@end table + +@itemize @bullet +@item tk_pf2.rr, mt_graph.rr を import しておく必要がある. +@item この関数は連立Pfaffian方程式 dY/dx = Pf[0] Y, dY/dy = Pf[1] Y を数値的に解いてグラフ表示する. +@item @var{Dom} は [[xmin,xmax],[ymin,ymax]] の形式. +@item 例はソースコード (@code{OpenXM/lib/asir-contrib/tk_pfn.rr} )の @code{tk_pfn.testgraph1()}, @code{tk_pfn.testgraph2()} を参照. +@item option としては fit=1 がある. Z軸を適宜調整する. +@item @var{Dom} の端はグラフ表示の時に一部カットされるので注意. +@end itemize + +@example +[1355] import("tk_pf2.rr"); import("mt_graph.rr"); import("tk_pfn.rr"); +[1590] tk_pfn.testgraph1(); + +ここで testgraph1() は以下のとおり. +def testgraph1() @{ + /* tk_bess2.bess2pf(1/2); */ + Pf= [[[ 0, (1)/(x), 0 ], + [ -x, (2*x^2+1)/(x), -2*x ], + [ -y, 0, 0 ]], + [[ 0, 0, (1)/(y) ], + [ -x, 0, 0 ], + [ -x, (1/2)/(x), (-1/2)/(y) ]]]; + /* tk_bess2.bess2Iv(1/2,[0.5,1.5]); */ + Iv = [0.105994,-0.651603,-0.760628]; + Dom=[[0.5,1.5],[1.5,9]]; + Step = 0.5; + return tk_pfn.graph(Pf,Dom,Iv,Step | fit=1); +@} + + +@end example + + +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. +@noindent +ChangeLog +@itemize @bullet +@item この関数は 2010-08 に最初の版が書かれた. +@item @code{OpenXM/src/asir-contrib/packages/src/tk_pfn.rr} 1.8 +@end itemize + +@node tk_rk.runge_kutta_4,,, 実験的仕様の関数 +@subsection @code{tk_rk.runge_kutta_4} +@findex tk_rk.runge_kutta_4 + +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- +@table @t +@item tk_rk.runge_kutta_4(@var{Eq},@var{X},@var{Y},@var{X0},@var{Y0},@var{Terminal},@var{Step}) +:: 4次の Runge-Kutta 法による微分方程式の数値近似解 +@end table + +@table @var +@item return +リスト リストの要素は以下の形式 [@var{X}の値,Y_1の値,Y_2の値, ...]. + @var{X} の値は減っていく. よってリストの先頭が @var{Terminal} 付近での @var{Y} の値. +@item Eq, X, Y, Step +@var{Eq} は 方程式の右辺. リスト. Y[0]'=Eq[0], Y[1]'=Eq[1], ... である. +@var{X} 独立変数名. +@var{Y} リスト. 従属変数のリスト. +@var{Step} 刻み幅. +@item X0, Y0, Terminal +@var{X0} 出発点の @var{X} の値. +@var{Y0} 出発点での @var{Y} の初期値. +@var{Terminal} @var{X} の終着点. +@end table + +@itemize @bullet +@item taka_runge_kutta.rr を import しておく必要がある. +@item この関数は連立常微分方程式 Y[0]'=Eq[0], Y[1]'=Eq[1], ... を数値的に解く. +@item 例はソースコード (@code{OpenXM/lib/asir-contrib/src/taka_runge_kutta.rr} )の +@code{tk_rk.test4()} を参照. +@end itemize + +@example +[1355] import("taka_runge_kutta.rr"); +[1590] tk_rk.test4(); + +ここで test4() は以下のとおり. 振動の方程式, y0'=y1, y1'=-y0 (y0''+y0=0). 答は y0=cos(x) +taka_plot_auto は下方向で y が正. + +def test4() @{ + A=runge_kutta_4([y1,-y0],x,[y0,y1],0,[1,0],3.14*2,0.1); + taka_plot_auto(A); + return(A); +@} + +@end example + + +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. +@noindent +ChangeLog +@itemize @bullet +@item この関数は 2000 年代の前半に最初の版が書かれた. 2010年 Pfaffian の数値解析の為に再度整備 +@item @code{OpenXM/src/asir-contrib/packages/src/taka_runge_kutta.rr} 1.17 +@end itemize + +@node tk_rk.runge_kutta_4_linear,,, 実験的仕様の関数 +@subsection @code{tk_rk.runge_kutta_4_linear} +@findex tk_rk.runge_kutta_4_linear + +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- +@table @t +@item tk_rk.runge_kutta_4_linear(@var{P},@var{X},@var{Y},@var{X0},@var{Y0},@var{Terminal},@var{Step}) +:: 4次の Runge-Kutta 法による微分方程式の数値近似解. 線形方程式専用. +@end table + +@table @var +@item return +リスト リストの要素は以下の形式 [@var{X}の値,Y_1の値,Y_2の値, ...]. + @var{X} の値は減っていく. よってリストの先頭が @var{Terminal} 付近での @var{Y} の値. +@item P, X, Y, Step +@var{P} は 方程式の右辺. リスト. Y'=P Y である. 従属変数 @var{Y} は不要. +@var{X} 独立変数名. +@var{Y} リスト. 従属変数のリスト. 従属変数は自動生成される. 使われていないので空リストでよい. +@var{Step} 刻み幅. +@item X0, Y0, Terminal +@var{X0} 出発点の @var{X} の値. +@var{Y0} 出発点での @var{Y} の初期値. +@var{Terminal} @var{X} の終着点. +@end table + +@itemize @bullet +@item taka_runge_kutta.rr を import しておく必要がある. +@end itemize + +@example +[1355] import("taka_runge_kutta.rr"); +[1590] A=tk_rk.runge_kutta_4_linear([[0,1],[-1,0]],x,[ ], 0, [1,0], 3.14*2, 0.1); +[1591] taka_plot_auto(A); + +振動の方程式, y0'=y1, y1'=-y0 (y0''+y0=0). 答は y0=cos(x) を解いている. +taka_plot_auto は下方向で y が正. + +@end example + + +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. +@noindent +ChangeLog +@itemize @bullet +@item 2010年 Pfaffian の数値解析の為に再整備. +@item @code{OpenXM/src/asir-contrib/packages/src/taka_runge_kutta.rr} 1.17 +@end itemize + + + +@node fj_simplify.simplify,,, 実験的仕様の関数 +@subsection @code{fj_simplify.simplify} +@findex fj_simplify.simplify + +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- +@table @t +@item fj_simplify.simplify(@var{arg1}) +:: arg1 を簡単化する. +@end table + +@table @var +@item return +多項式, 有理式 または quote +@item arg1 +多項式 または 有理式 +@end table + +@itemize @bullet +@item +この関数は +Joel S. Cohen, Computer Algebra and Symbolic Computation, +http://web.cs.du.edu/~jscohen/MathematicalMethods/index.htm +に記述されている Automatic simplification algorithm と +B.F.Caviness, R.J.Fateman, Simplification of Radical Expressions (1976) +に記述されている radcan アルゴリズムの実装である. +@item +複素多値関数としては (x*y)^a = x^a*x^b は一般には成立しないので, 結果を複素関数に使うときは +注意が必要である. (x^a = exp(a*log(x)) なので) +@end itemize + +@example +import("fj_simplify.rr"); +[1434] fj_simplify.simplify((x^(1/2))^3); +((x)^(3/2)) +[1435] fj_simplify.simplify((2^(1/2))^2); +2 +[1436] fj_simplify.simplify((2+2^(1/2))^3); +14*((2)^(1/2))+20 +[1437] fj_simplify.simplify(exp(x)*exp(-x+y)); +((@@e)^(y)) +@end example + +@table @t +@item 参照 +@ref{quote} +@end table + +@noindent +ChangeLog +@itemize @bullet +@item +Todo: exp 以外の特殊関数についてのsimplification の機能. +@item +この関数は 2010.01 に M.Fujimoto により最初の版が書かれた. +OpenXM/src/asir-contrib/packages/src/fj_simplify.rr +@end itemize + +@node tk_jack.zonal,,, 実験的仕様の関数 +@subsection @code{tk_jack.zonal} +@findex tk_jack.zonal + +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- +@table @t +@item tk_jack.zonel(@var{p},@var{n}) +:: 分割 p に対する n 変数の zonal 多項式を出力する. +@end table + +@table @var +@item return +多項式. x_1, x_2, ... が変数. +@item p +数のリスト. p=[p0,p1,...] の時 p0>=p1>=...>0. +@item n +自然数 +@end table + +@itemize @bullet +@item +この関数は +Koev-Edelman による Pieri 型公式を用いた Jack symmetric function の計算 +アルゴリズムの実装である. +詳しくは Wikipedia 英語版 Jack symmetric function の項を参照. +@item zonal(P,N) = jack(P,N,2) である. +@end itemize + +@example +load("tk_jack.rr"); +[1434] tk_jack.zonal([3,2,1],3); +(112*x_3*x_2^2+112*x_3^2*x_2)*x_1^3+(112*x_3*x_2^3+168*x_3^2*x_2^2+112*x_3^3*x_2)*x_1^2+(112*x_3^2*x_2^3+112*x_3^3*x_2^2)*x_1 +[1435] tk_jack.zonal([1,1],3); +(2*x_2+2*x_3)*x_1+2*x_3*x_2 +[1436] tk_jack.jack([1,1],3,2); +(2*x_2+2*x_3)*x_1+2*x_3*x_2 +@end example + +@table @t +@item 参照 +@end table + +@noindent +ChangeLog +@itemize @bullet +@item +この関数は wishart 分布に従う対称行列の第一固有値が x 以下である確率の計算を +holonomic gradient method でやるためにその初期値を計算する C のプログラムが +必要であった. それを debug するためにとりあえず書いたもの. +@item 最適化をまだまださぼってる. +@end itemize + +@node ot_hgm_ahg.cbase,,, 実験的仕様の関数 +@subsection @code{ot_hgm_ahg.cbase} +@findex ot_hgm_ahg.cbase + +@table @t +@item cbase(@var{A}) +:: @var{A} で定義される A-超幾何方程式系の Pfaffian の基底を求める. +@end table + +@table @var +@item return +Pfaffianの基底(微分作用素のモノミアル)のリスト +@item A +整数を成分とする行列 (maximal rank のもの)を表すリスト +@end table + +@itemize @bullet +@item A-超幾何イデアルの Q(x)[dx] における標準基底は Pfaffian の基底となるが, 逆はかならずしも真ではない. 個数はもちろん同じである. +@item +アルゴリズムは +T.Hibi, K.Nishiyama, N.Takayama, Pfaffian Systems of A-Hypergeometric Equations I, Bases of Twisted Cohomology Groups, arxiv:1212.6103 +による. +さらにパラメータ b を数に特殊化する確率算法を用いている. +@end itemize + +@example +[2190] import("ot_hgm_ahg.rr"); +1 +[2191] ot_hgm_ahg.cbase([[1,1,1,1],[0,1,2,3]]); +We use a probabilistic algorithm to determine the base.[dx2^2,dx3*dx2,dx3^2] + +[dx3,dx4,1] +@end example + +@table @t +@item 参照 +@ref{get_mat2} +@end table + +@noindent +ChangeLog +@itemize @bullet +@item +この関数は 2012 から 2014-春休みにかけてかかれた. +@item version 1.1 以前の版は h-mle/A-hg/Prog (研究グループの共有フォルダ) にあり. +@end itemize + +@node ot_hgm_ahg.get_mat2,,, 実験的仕様の関数 +@subsection @code{ot_hgm_ahg.get_mat2} +@findex ot_hgm_ahg.get_mat2 +@comment get_mat2 +@table @t +@item get_mat2(@var{A},@var{W},@var{Std},@var{Mset}) +:: @var{A} で定義される A-超幾何方程式系 H_A の Pfaffian の基底を求めるための Sylvester 法 を適用するための行列を生成する. +@end table + +@table @var +@item return +リスト +@item A +整数を成分とする行列 (maximal rank のもの)を表すリスト +@item W +リスト. toric ideal のグレブナー基底を計算するための weight vector. +多分なんでもいいはず. +@item Std +リスト. Pfaffian の基底. cbase(A) の出力を用いる. +@item Mset +Sylvester 型行列を作るための微分作用素のモノミアルのリスト. +@end table + +@itemize @bullet +@item 出力を @var{P} に代入すると, +@var{P}[0]*@var{P}[2] - @var{P}[1]*@var{Std} が modulo H_A で 0 となる. +@var{P}[0] と @var{P}[2] を結合した行列が, sylvester 行列 (論文の記号での F'). +@var{P}[2], @var{Std} が index モノミアルである. +論文での記号では @var{P}[2] は M_t, @var{Std} は S. +@item +アルゴリズムは +K.Ohara, N.Takayama, Pfaffian Systems of A-Hypergeometric Equations II, Holonomic Gradient Method +による. 論文の行列 F'. +@end itemize + +@example +[2190] import("ot_hgm_ahg.rr"); +1 +[2191] A=[[1,1,1,1],[0,1,2,3]]$ +Std=ot_hgm_ahg.cbase(A)$ +W=[[dx1,1,dx2,1,dx3,1,dx4,1]]$ +Mset=[1,dx1,dx2,dx3,dx4]$ +[2192] ot_hgm_ahg.get_mat2(A,W,Std,Mset); + +省略 +@end example + +@table @t +@item 参照 +@ref{cbase} +@end table + +@noindent +ChangeLog +@itemize @bullet +@item +この関数は 2012 から 2014-春休みにかけてかかれた. +@item version 1.1 以前の版は h-mle/A-hg/Prog (研究グループの共有フォルダ) にあり. +@item +ソース ot_hgm_ahg.rr の test3(), test3b(), test4(), test5(), test6(), test6c() 等に利用例がある. +@item +test3b() で @var{Mset} を一次式全部にしたものが, 論文の例. +@end itemize + +@comment ------------------- +@comment hgm_ahg_contiguity +@comment ------------------- +@node ot_hgm_ahg.hgm_ahg_contiguity,,, 実験的仕様の関数 +@subsection @code{ot_hgm_ahg.hgm_ahg_contiguity} +@findex ot_hgm_ahg.hgm_ahg_contiguity + +@table @t +@item hgm_ahg_contiguity(@var{A},@var{StdMon},@var{Line},@var{X0},@var{InitVal},@var{Start},@var{End}) +:: @var{A} で定義される A-超幾何方程式系のcontiguity relation +を Sylvester matrix を用いて計算し, それを用いて超幾何関数の値を求める. +@end table + +@table @var +@item return +基底を超幾何関数に作用させたベクトルの値 F(End;X0) ?? +@item A +整数を成分とする行列 (maximal rank のもの)を表すリスト. +@item StdMon +リスト. Pfaffian の基底を与える微分作用素のモノミアルのリスト. +@item Line +リスト [ContiDir,Beta,Z]. +@item X0 +リスト. x 変数の値. +@item InitVal +リスト. 基底を超幾何関数に作用させたベクトルの初期値 F(Start;X0) +@item Start +リスト. Z パラメータの初期値?? +@item End +リスト. Z パラメータの終端値?? +@end table + +@itemize @bullet +@item Todo, この関数のインタフェースは変更される予定. +@item X0 は有理数のリスト. +@item ContiDir は End-Start と同じ方向. +@item Beta. A超幾何関数の B パラメータの初期値 ?? +@item Z. ContiDir での一次元 contiguity を表現するための不定元の名前. +@item ソース中の利用例. test_fd_conti(), test_c111_conti() +@item +アルゴリズムおよび利点は +K.Ohara, N.Takayama, Pfaffian Systems of A-Hypergeometric Equations II, Holonomic Gradient Method +参照. +@end itemize + +@example +[2190] import("ot_hgm_ahg.rr"); +1 +[2191] ot_hgm_ahg.test_fd_conti(); +(Todo, 引数がどうなるかの例を加える.) +@end example + +@table @t +@item 参照 +@ref{get_mat2} +@ref{hgm_ahg_expected_value_contiguity} +@ref{hgm_ahg} +@end table + +@noindent +ChangeLog +@itemize @bullet +@item +この関数は 2014-07-11 に最初の版が 1.10版 ot_hgm_ahg.rr に commit された. +@item インタフェースが更新された版は, 1.??版. +@end itemize + +@comment ------------------- +@comment tk_hgpoly.optip +@comment ------------------- +@node tk_hgpoly.optip,,, 実験的仕様の関数 +@subsection @code{tk_hgpoly.optip} +@findex tk_hgpoly.optip + +@table @t +@item hgpoly.optip(@var{A},@var{B},@var{W}) +:: 整数計画問題をグレブナー基底を用いて解く. +@end table + +@table @var +@item return +リスト. +@item A +非負整数を成分とする行列 (maximal rank のもの)を表すリスト +@item B +非負整数を成分とするベクトルを表すリスト +@item W +非負整数を成分とするベクトルを表すリスト +@end table + +@itemize @bullet +@item @var{A} U = @var{B} を満たす非負の整数ベクトル U の中で, +内積 @var{W} U を最小化する U を戻す. +@end itemize + +@example +[0] import("tk_hgpoly.rr"); +[2191] tk_hgpoly.optip([[1,1,1,1],[0,1,2,3]],[20,40],[1,1,1,0]); +[6,1,0,13] +@end example + +@table @t +@item 参照 +@ref{feasible} +@end table + +@noindent +ChangeLog +@itemize @bullet +@item +この関数は 2014-12-12 に commit された. +元版は h-mle/A-hg/Prog +@end itemize + +@comment ------------------- +@comment tk_hgpoly.hgpoly +@comment ------------------- +@node tk_hgpoly.hgpoly,,, 実験的仕様の関数 +@subsection @code{tk_hgpoly.hgpoly} +@findex tk_hgpoly.hgpoly +@table @t +@item hgpoly.hgpoly(@var{A},@var{B}) +:: @var{A}, @var{B} で定義される超幾何多項式を計算する. +@end table + +@table @var +@item return +リスト. +@item A +非負整数(todo, 再度確認)を成分とする行列 (maximal rank のもの)を表すリスト +@item B +非負整数を成分とするリスト. +@end table + +@itemize @bullet +@item 戻り値を F とするとき, F[0] が超幾何多項式. 変数は x_1, x_2, ... +F[1] は F[0] の分散表現多項式. +@end itemize + +@example +[0] import("tk_hgpoly.rr"); +[2191] tk_hgpoly.hgpoly([[1,1,1,1],[0,1,2,3]],[2,2]); +[x_3*x_1+1/2*x_2^2,(1/2)*<<0,2,0,0>>+(1)*<<1,0,1,0>>] +@end example + + +@noindent +ChangeLog +@itemize @bullet +@item +この関数は 2014-12-12 に commit された. +@end itemize + +@comment ------------------- +@comment tk_fd.abc2ahg +@comment ------------------- +@node tk_fd.abc2ahg,,, 実験的仕様の関数 +@subsection @code{tk_fd.abc2ahg} +@findex tk_fd.abc2ahg +@table @t +@item tk_fd.abc2ahg(@var{A},@var{B},@var{C}) +:: F_D(@var{A}, @var{B},@var{C}) を解にもつ A-超幾何方程式系を求める. +@end table + +@table @var +@item return +リスト. +@item A +数 +@item B +数のリスト +@item C +数 +@end table + +@itemize @bullet +@item 戻り値リストの第0成分は A-超幾何方程式系を定義する行列. +第1成分はA-超幾何方程式系のパラメータβ. +@end itemize + +@example +[2191] tk_fd.abc2ahg(-3,[-4,-5],3); + +[[[0,0,0,1,1,1],[1,0,0,1,0,0],[0,1,0,0,1,0],[0,0,1,0,0,1]],[11,5,4,5]] +@end example + +@table @t +@item 参照 +@ref{abc2marginal} +@ref{marginal2abc} +@end table + +@noindent +ChangeLog +@itemize @bullet +@item +この関数は 2014-12-13 に tk_fd.rr に追加された. +@end itemize + +@comment ------------------- +@comment tk_fd.ahvec_abc +@comment ------------------- +@node tk_fd.ahvec_abc,,, 実験的仕様の関数 +@subsection @code{tk_fd.ahvec_abc} +@findex tk_fd.ahvec_abc +@table @t +@item tk_fd.ahvec_abc(@var{A},@var{B},@var{C},@var{Y} | all=1) +:: abc2marginal(@var{A}, @var{B},@var{C}) を周辺和にもつ (2,m+1) 分割表全体についての正規化定数 Z, および Z の変数 Y[1][0], ..., Y[1][m] +(2番目の行)についての偏微分を計算する. +@end table + +@table @var +@item return +リスト @var{Ans} +@item A +数 +@item B +数のリスト. 長さは m. +@item C +数 +@item Y +(2,m+1) 変数値をあらわすリストのリスト. +@end table + +@itemize @bullet +@item +@var{A}, @var{B}, @var{C}, に現れる数は整数を与える. +@var{Y} の成分は有理数を与える. +@item +@var{Ans}[2]*@var{Ans}[1] が Z. +@var{Ans}[2]*@var{Ans}[0][I] が Z の Y[1][I] についての偏微分. +@item +論文 +1.Y.Goto, Contiguity relations of Lauricella's F_D revisited, arxiv:1412.3256 +で導出されている +contiguity relation を用いて計算する. +@end itemize + +@example +[2449] marginal2abc([3,12],[6,3,3,3]); +[-3,[-3,-3,-3],4] + +[2450] tk_fd.ahvec_abc(-3,[-3,-3,-3],4,[[1,1/2,1/3,1/4],[1,1,1,1]]); +[[ 24041/1152 143551/11520 16973/1280 78827/5760 ],1/7776] + +[2451] expectation_abc(-3,[-3,-3,-3],4,[[1,1/2,1/3,1/4],[1,1,1,1]]); +[721230/173593,430653/173593,458271/173593,67566/24799] +@end example + +@table @t +@item 参照 +@ref{expectation_abc} +@end table + +@noindent +ChangeLog +@itemize @bullet +@item +この関数は 2014-夏に開発された. +@end itemize + + +@node pari setbprec setround todouble mpfr_gamma mpfr_floor mpfr_round,,, 実験的仕様の関数 +@subsection @code{pari}, @code{setbprec},@code{setround},@code{todouble},@code{mpfr_gamma},@code{mpfr_floor},@code{mpfr_round}, +@findex pari +@findex setbprec +@findex setround +@findex todouble +@findex mpfr_gamma +@findex mpfr_floor +@findex mpfr_round + +@comment --- 関数の簡単な説明 --- +@comment --- @itemx は複数に対して説明を一つつける場合に使う --- +@table @t +@item pari(@var{arg1},@var{arg2},...) +:: MPFR で pari の関数を emulate するか ox_pari サーバーを呼び出す. +@itemx setbprec(@var{arg1}) +@itemx setround(@var{arg1}) + 丸めの方法の指定. mpfr 準拠. +@itemx todouble(@var{arg1}) +:: bigfloat 型を double に変換する. +@itemx mpfr_gamma(@var{arg1}) +:: gamma 関数の計算. +@itemx mpfr_floor(@var{arg1}) +:: floor の計算. +@itemx mpfr_round(@var{arg1}) +:: 丸めの計算. +@end table + +@table @var +@item return +後述. +@item arg1, arg2 +後述. +@end table + +@itemize @bullet +@item 20150807 以降の asir では, bigfloat が pari ではなく mpfr を用いて計算される. +Todo, pari は ox_pari を呼び出すが, まだ ox_pari に未実装の機能が多くある. +区間演算への対応は行っていない. +@item +pari(floor,@var{arg1}), +pari(round,@var{arg1}), +pari(gamma,@var{arg1}) +は mpfr で pari を emulate しているので, 動作が異なる. +特に gamma は複素数の引数を受け取らない. +pari の floor は桁数が足りなくなるとエラーで終了したが, +この floor では setprec で指定した桁数以内なら正しく floor を戻す. +Todo, ox_pari を指定して呼び出す方法. +@end itemize + +@example +[219] ctrl("bigfloat",1)$ +[220] setprec(100)$ +[221] pari(floor,1111111111111.1+1/10); +1111111111111 +@end example + +@table @t +@item 参照 +@ref{pari} +@end table + +@comment --- ChangeLog を書く. 動機. ソースコードの位置. 変更日時 など CVSサーバを見るため +@comment --- openxm の外部からの寄与も述べる. Credit. +@noindent +ChangeLog +@itemize @bullet +@item これらの大変更は 2015-08-03 より 08-07 の asir 合宿でおこなわれた. +まだ作業中. Todo, asirgui への対応. debug, ... +@item 変更をうけたソースコードは asir2000/builtin/bfaux.c, +asir2000/engine/bf.c, asir2000/builtin/parif.c 等多数. +@end itemize + @comment **************************************************************** @comment --- ◯◯◯◯ 以下他の関数について真似して記述する. ◯◯◯◯ @comment 新しい関数の説明を書くためのテンプレートである. 消すな. @comment --- ◯◯◯◯ 関数 syz_pqr, xyz_stu の説明 ◯◯◯◯ @comment --- 複数の関数をまとめて説明する例 --- -@node xyz_pqr,,, 実験的仕様の関数 +@node xyz_pqr syz_stu,,, 実験的仕様の関数 +@comment @menu にも * syz_pqr syz_stu:: と続けて書く事. 分けてはいけない. @subsection @code{xyz_pqr}, @code{syz_stu} @findex xyz_pqr @findex xyz_stu