version 1.1, 2016/08/30 22:44:30 |
version 1.5, 2020/09/08 09:16:57 |
|
|
%comment $OpenXM$ |
%comment $OpenXM: OpenXM/src/asir-contrib/packages/doc/noro_module_syz/noro_module_syz-ja.texi,v 1.4 2017/08/31 06:31:47 takayama Exp $ |
%comment --- おまじない --- |
%comment --- 障 --- |
\input ../../../../asir-doc/texinfo |
\input texinfo-ja |
@iftex |
@iftex |
@catcode`@#=6 |
@catcode`@#=6 |
@def@fref#1{@xrefX[#1,,@code{#1},,,]} |
@def@fref#1{@xrefX[#1,,@code{#1},,,]} |
|
|
@catcode`@#=@other |
@catcode`@#=@other |
@end iftex |
@end iftex |
@overfullrule=0pt |
@overfullrule=0pt |
|
@documentlanguage ja |
@c -*-texinfo-*- |
@c -*-texinfo-*- |
@comment %**start of header |
@comment %**start of header |
@comment --- おまじない終り --- |
@comment --- 障腟 --- |
|
|
@comment --- GNU info ファイルの名前 --- |
@comment --- GNU info <ゃ --- |
@setfilename asir-contrib-noro_module_syz |
@setfilename asir-contrib-noro_module_syz |
|
|
@comment --- タイトル --- |
@comment --- 帥ゃ --- |
@settitle noro_module_syz |
@settitle noro_module_syz |
|
|
@comment %**end of header |
@comment %**end of header |
@comment %@setchapternewpage odd |
@comment %@setchapternewpage odd |
|
|
@comment --- おまじない --- |
@comment --- 障 --- |
@ifinfo |
@ifinfo |
@macro fref{name} |
@macro fref{name} |
@ref{\name\,,@code{\name\}} |
@ref{\name\,,@code{\name\}} |
|
|
@end iftex |
@end iftex |
|
|
@titlepage |
@titlepage |
@comment --- おまじない終り --- |
@comment --- 障腟 --- |
|
|
@comment --- タイトル, バージョン, 著者名, 著作権表示 --- |
@comment --- 帥ゃ, 若吾с, , 篏罔茵腓 --- |
@title noro_module_syz |
@title noro_module_syz |
@subtitle noro_module_syz User's Manual |
@subtitle noro_module_syz User's Manual |
@subtitle Edition 1.0 |
@subtitle Edition 2.0 |
@subtitle Aug 2016 |
@subtitle Sep 2020 |
|
|
@author by Masayuki Noro |
@author by Masayuki Noro |
@page |
@page |
Line 48 Copyright @copyright{} Masayuki Noro |
|
Line 49 Copyright @copyright{} Masayuki Noro |
|
2016. All rights reserved. |
2016. All rights reserved. |
@end titlepage |
@end titlepage |
|
|
@comment --- おまじない --- |
@comment --- 障 --- |
@synindex vr fn |
@synindex vr fn |
@comment --- おまじない終り --- |
@comment --- 障腟 --- |
|
|
@comment --- @node は GNU info, HTML 用 --- |
@comment --- @node GNU info, HTML --- |
@comment --- @node の引数は node-name, next, previous, up --- |
@comment --- @node 綣違 node-name, next, previous, up --- |
@node Top,, (dir), (dir) |
@node Top,, (dir), (dir) |
|
|
@comment --- @menu は GNU info, HTML 用 --- |
@comment --- @menu GNU info, HTML --- |
@comment --- chapter 名を正確に並べる --- |
@comment --- chapter 罩g∈筝鴻 --- |
@menu |
@menu |
* noro_module_syz.rr :: |
* noro_module_syz.rr :: |
* Index:: |
* Index:: |
@end menu |
@end menu |
|
|
@comment --- chapter の開始 --- |
@comment --- chapter 紮 --- |
@comment --- 親 chapter 名を正確に --- |
@comment --- 荀 chapter 罩g∈ --- |
@node noro_module_syz.rr ,,, Top |
@node noro_module_syz.rr ,,, Top |
@chapter noro_module_syz.rr |
@chapter noro_module_syz.rr |
@comment --- section 名を正確に並べる --- |
@comment --- section 罩g∈筝鴻 --- |
@menu |
@menu |
* 加群の syzygy:: |
* 紊綣遺臂:: |
* 加群の自由分解:: |
* 臂ゃ syzygy:: |
|
* 臂ゃ怨茹:: |
@end menu |
@end menu |
|
|
このマニュアルでは, asir-contrib パッケージに収録されている, |
ャ≪с, asir-contrib 宴若吾蚊, |
加群の syzygy および自由分解を計算するパッケージ |
臂ゃ syzygy 活怨茹c荐膊宴若 |
@samp{noro_module_syz.rr} について解説する. |
@samp{noro_module_syz.rr} ゃ茹h. |
このパッケージを使うには, まず @samp{noro_module_syz.rr} をロードする. |
宴若吾篏帥, 障 @samp{noro_module_syz.rr} 若. |
@example |
@example |
[...] load("noro_module_syz.rr"); |
[...] load("noro_module_syz.rr"); |
@end example |
@end example |
@noindent |
@noindent |
このパッケージの函数を呼び出すには, 全て @code{newsyz.} を先頭につける. |
宴若吾醇違若喝冴, @code{newsyz.} ゃ. |
|
|
@comment --- section の開始 --- |
@comment --- section 紮 --- |
@comment --- 書体指定について --- |
@comment --- 娯絎ゃ --- |
@comment --- @code{} はタイプライタ体表示 --- |
@comment --- @code{} 帥ゃゃ推茵腓 --- |
@comment --- @var{} は斜字体表示 --- |
@comment --- @var{} 絖篏茵腓 --- |
@comment --- @b{} はボールド表示 --- |
@comment --- @b{} 若茵腓 --- |
@comment --- @samp{} はファイル名などの表示 --- |
@comment --- @samp{} <ゃ茵腓 --- |
|
|
@node 加群の syzygy,,, noro_module_syz.rr |
@node 紊綣遺臂,,, noro_module_syz.rr |
@section 加群の syzygy |
@section 紊綣遺臂 |
|
|
@menu |
紊綣遺怨臂ゃ, 臂ゅ綣 te_i 膩茵憗. |
* noro_module_syz.modue_syz:: |
t 紊綣違綣, e_i 怨臂ゃ罔羣阪с. 臂ゅ綣, 紊綣違綣 |
@end menu |
篏臀 i 菴遵 @code{<<a,b,...,c:i>>} ц;. 臂ゅ綣, ≦臂ゅ綣膩, |
|
荐絎臂ら綺c翫. 臂ら綺篁ヤ3腮蕁. |
|
|
@node newsyz.module_syz,,, 加群の syzygy |
@table @code |
|
@item TOP 綺 |
|
|
@subsection @code{newsyz.module_syz} |
, te_i > se_j t>s 障 (t=s i<j) 綺с. , |
@findex newsyz.module_syz |
t, s 罸莠紊綣違荐絎綺ц. |
|
綺, @code{dp_ord([0,Ord])} |
|
荐絎. , @code{Ord} 紊綣違綺с. |
|
|
@table @t |
@item POT 綺 |
@item newsyz.module_syz(@var{f},@var{v},@var{h},@var{O}[|@var{weyl=1}]) |
|
|
|
@end table |
, te_i > se_j i<j 障 (i=j t>s) 綺с. , |
|
t, s 罸莠紊綣違荐絎綺ц. |
|
綺, @code{dp_ord([1,Ord])} |
|
荐絎. , @code{Ord} 紊綣違綺с. |
|
|
@table @var |
@item Schreyer 綺 |
@item return |
|
syzygy の生成系 (グレブナー基底) を計算する. |
|
|
|
@item f |
罔羣阪 e_i 絲障, ャ怨臂ゃ臂ゅ綣 T_i 筝, te_i > se_j |
多項式リスト, または多項式リストのリスト |
tT_i > sT_j 障 (tT_i=sT_j i<j) 綺с. tT_i, sT_j |
@item v |
罸莠, 絮怨臂ゃ荐絎綺ц. |
変数リスト |
綺, 絽後絽亥荐絎. , T_i 絮怨臂ゃ綺 Schreyer |
@item h |
с, 障 TOP, POT 綺. |
非負整数 |
綺 @code{dpm_set_schreyer([H_1,H_2,...])} 絎. , |
@item O |
@code{H_i=[T_1,T_2,...]} 臂ゅ綣鴻, @code{[H_2,...]} у臂 Schreyer 綺 |
項順序 |
@code{tT_i} 潟с. |
@end table |
@end table |
|
|
@itemize @bullet |
臂ゅ綣ュ号, @code{<<a,b,...:i>>} 綵√х贋・ュ篁, |
@item 多項式 |
紊綣鴻篏, @code{dpm_ltod()} 紊号. |
多項式列またが多項式ベクトル列に対する syzygy 加群のグレブナー基底を計算する. |
|
@item @var{f=[f1,...,fm]} に対し, @var{h1*f1+...+hm*fm=0}を |
|
満たす多項式ベクトル @var{(h1,...,hm)} 全体のなす加群のグレブナー基底を |
|
計算する. |
|
@item @var{fi} が多項式リストの場合, 自然に多項式ベクトルと見なす. |
|
@item 与えられた項順序 @var{O} に対し, 加群の項順序 @var{[1,O]} すなわち |
|
@var{O} で定まる POT (position over term) 項順序でのグレブナー基底を |
|
結果として返す. |
|
@item @var{h} が 0 のとき有理数体上で trace アルゴリズムにより計算する. |
|
@var{h} が 1 のとき有理数体上で斉次化 trace アルゴリズムにより計算する. |
|
@var{h} が 2 以上の素数のとき有限体上で計算する. |
|
オプション @var{weyl} が 1 のとき Weyl 代数上で計算する. |
|
@end itemize |
|
|
|
@example |
@node 臂ゃ syzygy,,, noro_module_syz.rr |
afo |
@section 臂ゃ syzygy |
@end example |
|
|
|
@node 加群の自由分解,,, noro_module_syz.rr |
|
@section 加群の自由分解 |
|
|
|
@menu |
@menu |
* newsyz.module_minres:: |
* noro_module_syz.modue_syz:: |
@end menu |
@end menu |
|
|
@node newsyz.module_minres,,,加群の自由分解 |
@node newsyz.module_syz,,, 臂ゃ syzygy |
@subsection @code{newsyz.module_minres} |
|
@findex newsyz.module_minres |
|
|
|
@table @t |
@subsection @code{newsyz.module_syz} |
@item newsyz.module_syz(@var{f},@var{v},@var{h},@var{O}[|@var{weyl=1}]) |
@findex newsyz.module_syz |
加群の |
|
HGM により重複固有値を持つ共分散行列に対する Wishart 行列の最大固有値の |
|
分布関数の値を計算する. |
|
@end table |
|
|
|
@table @var |
|
@item return |
|
@item m |
|
変数の個数 |
|
@item n |
|
自由度 |
|
@item [p1,p2,...] |
|
重複固有値の個数のリスト |
|
@item [s1,s2,...] |
|
各重複固有値 |
|
@end table |
|
|
|
@itemize @bullet |
|
@item |
|
固有値 @var{si} を @var{pi} 個もつ対角行列を共分散行列とする Wishart 行 |
|
列の最大固有値 @var{l1}の分布関数の値 @var{Pr[l1<t]} を計算する. |
|
|
|
@item ステップ数を指定したルンゲ=クッタ法を, ステップ数を 2 倍しながら |
|
一つ前の計算結果との相対誤差が @var{eps} (デフォルトで @var{10^(-4)}) |
|
になるまで繰り返す. |
|
@item |
|
@var{eq} オプション指定がない場合, @var{[p1,p2,...]} で指定される対角領 |
|
域に制限した微分方程式系を計算する. 指定がある場合, オプションとして指 |
|
定されたリストをチェックなしに制限した方程式と見なして計算する. |
|
@item @var{eps}オプションが指定された場合, 指定された値を @var{eps} として計算する. |
|
@item @var{td} オプションが指定された場合, 初期ベクトル計算のためのべき級数を @var{td} で |
|
指定された全次数まで計算する (デフォルトは100). |
|
@item @var{rk} オプションが指定された場合, 指定された次数のルンゲ=クッタ法を用いる. |
|
許される値は 4 または 5, でデフォルトは 5である. |
|
@item べき級数解の計算の困難さ, およびパフィアン行列の計算の困難さから, ブロック数が 2 以下の場合にのみ |
|
実用性がある. |
|
@end itemize |
|
|
|
@example |
|
[...] noro_module_syz.message(1)$ |
|
[...] P=noro_module_syz.prob_by_hgm(10,100,[9,1],[1/100,1],100|eps=10^(-6)); |
|
... |
|
[x0=,8/25] |
|
Step=10000 |
|
[0] |
|
[8.23700622458446e-17,8.23700622459772e-17] |
|
... |
|
Step=1280000 |
|
[0][100000][200000][300000]...[900000][1000000][1100000][1200000] |
|
[0.516246820120598,0.516246820227214] |
|
[log ratio=,4.84611265040128] |
|
|
|
Step=2560000 |
|
[0][100000][200000][300000]...[2200000][2300000][2400000][2500000] |
|
[0.516246912003845,0.516246912217004] |
|
[log ratio=,4.93705929488356] |
|
[diag,18.6292,pfaffian,1.09207,ps,41.0026,rk,213.929] |
|
0.516246912217004 |
|
266.4sec + gc : 8.277sec(276.8sec) |
|
@end example |
|
|
|
@node noro_module_syz.prob_by_ps,,, 制限した関数の計算 |
|
@subsection @code{noro_module_syz.prob_by_ps} |
|
@findex noro_module_syz.prob_by_ps |
|
|
|
@table @t |
@table @t |
@item noro_module_syz.prrob_by_ps(@var{m},@var{n},@var{[p1,p2,...]},@var{[s1,s2,...]},@var{t}[|@var{options}]) |
@item newsyz.module_syz(@var{f},@var{v},@var{h},@var{O}[|weyl=1,dp=1,f4=1]) |
べき級数により重複固有値を持つ共分散行列に対する Wishart 行列の最大固有値の |
syzygy 膤 (違弱阪) 荐膊. |
分布関数の値を計算する. |
|
@end table |
@end table |
|
|
@table @var |
@table @var |
@item m |
|
変数の個数 |
|
@item n |
|
自由度 |
|
@item [p1,p2,...] |
|
重複固有値の個数のリスト |
|
@item [s1,s2,...] |
|
各重複固有値 |
|
@end table |
|
|
|
@itemize @bullet |
|
@item |
|
直前の値との相対誤差が @var{eps} (デフォルト値は @var{10^(-4)}) 以下に |
|
なるまで, べき級数を全次数ごとに計算する. その値から分布関数の値を計算 |
|
して返す. |
|
@item @var{eps}オプションが指定された場合, 指定された値を @var{eps} として計算する. |
|
@var{eq} オプション指定がない場合, @var{[p1,p2,...]} で指定される対角領 |
|
域に制限した微分方程式系を計算する. 指定がある場合, オプションとして指 |
|
定されたリストをチェックなしに制限した方程式と見なして計算する. |
|
@item @var{t} の値が小さい場合にのみ実用的に用いることができる. |
|
@end itemize |
|
|
|
@example |
|
[...] Q=noro_module_syz.prob_by_ps(10,100,[9,1],[1/100,1],1/2); |
|
... |
|
[I=,109,act,24.9016,actmul,0,gr,19.7852] |
|
2.69026137621748e-165 |
|
61.69sec + gc : 2.06sec(64.23sec) |
|
[...] R=noro_module_syz.prob_by_hgm(10,100,[9,1],[1/100,1],1/2|td=50); |
|
[diag,15.957,pfaffian,1.00006,ps,5.92437,rk,1.29208] |
|
2.69026135182769e-165 |
|
23.07sec + gc : 1.136sec(24.25sec) |
|
@end example |
|
|
|
@node noro_module_syz.ps,,, 制限した関数の計算 |
|
@subsection @code{noro_module_syz.ps} |
|
@findex noro_module_syz.ps |
|
|
|
@table @t |
|
@item noro_module_syz.ps(@var{z},@var{v},@var{td}) |
|
微分方程式系のべき級数解を指定された全次数まで計算する. |
|
@end table |
|
|
|
@table @var |
|
@item return |
@item return |
多項式リスト |
荀膣3ゃ鴻, 荀膣紊綣鴻障臂ゅ綣鴻 |
|
|
@item z |
@item f |
部分分数係数の微分作用素のリスト |
紊綣鴻, 障紊綣鴻鴻 |
@item v |
@item v |
変数リスト |
紊違鴻 |
|
@item h |
|
莢贋 |
|
@item O |
|
綺 |
@end table |
@end table |
|
|
@itemize @bullet |
@itemize @bullet |
@item |
@item 紊綣 |
結果は @var{[p,pd]} なるリストで, @var{p} は @var{td} 次まで求めたべき級数解, @var{pd} は |
紊綣障紊綣絲障 syzygy 臂ゃ違弱阪荐膊. |
@var{p} の @var{td} 次部分である. |
@item @var{f=[f1,...,fm]} 絲障, @var{h1*f1+...+hm*fm=0} |
@item @var{z} は, @var{v} に指定される変数以外のパラメタを含んではいけない. |
羣紊綣 @var{(h1,...,hm)} 篏臂ゃ違弱阪 |
|
荐膊. |
|
@item @var{fi} 紊綣鴻翫, 吟紊綣荀. |
|
@item 菴腟 @var{[S,G,C]} 綵≪鴻с. |
|
@var{S}, |
|
筝綺 @var{O} 絲障, 臂ゃ綺 @var{[1,O]} |
|
@var{O} у障 POT (position over term) 綺с違弱阪с. |
|
@var{G}, ュ臂ゃPOT 綺с違弱阪с. |
|
@var{C}, ュ膤祉@var{G}篆違鴻鴻с. |
|
|
|
@item @var{h} 0 遺筝 trace ≪眼冴荐膊. |
|
@var{h} 1 遺筝ф罨≦ trace ≪眼冴荐膊. |
|
@var{h} 2 篁ヤ膣違篏筝ц膊. |
|
|
|
@item 激с @var{f4} 1 , F4 ≪眼冴荐膊. |
|
@item 激с @var{weyl} 1 Weyl 篁f遺, 綏ゃ≪ (綏臂) 荐膊. |
|
@item 激с @var{dp}l 1 , 菴腟, 臂ゃ荀膣茵 |
|
紊綣鴻篁c臂ゅ綣. |
@end itemize |
@end itemize |
|
|
@example |
@example |
[...] Z=noro_module_syz.diagpf(10,[[1,5],[6,10]])$ |
[0] load("noro_module_syz.rr")$ |
[...] Z0=subst(Z,a,(10+1)/2,c,(10+100+1)/2)$ |
[43] load("cyclic")$ |
[...] PS=noro_module_syz.ps(Z0,[y1,y6],10)$ |
[53] F=cyclic(4); |
[...] PS[0]; |
[c3*c2*c1*c0-1,((c2+c3)*c1+c3*c2)*c0+c3*c2*c1,(c1+c3)*c0+c2*c1+c3*c2, |
197230789502743383953639/230438384724900975787223158176000*y1^10+ |
c0+c1+c2+c3] |
... |
[54] V=[c0,c1,c2,c3]$ |
+(6738842542131976871672233/1011953706634779427957034268904320*y6^9 |
[55] L=newsyz.module_syz(F,V,0,0)$ |
...+3932525/62890602*y6^2+1025/4181*y6+55/111)*y1 |
[56] L[0]; |
+197230789502743383953639/230438384724900975787223158176000*y6^10 |
[[(-c2^2+c3^2)*c1-c3*c2^2+c3^3,-c3^2*c2^2+1,(c3*c2^3-c3^3*c2)*c1+...], |
+...+1395815/62890602*y6^3+3175/25086*y6^2+55/111*y6+1 |
...,[0,0,c0+c1+c2+c3,(-c1-c3)*c0-c2*c1-c3*c2]] |
|
[57] L[1]; |
|
[[(-c2+c3)*c1-c3^4*c2^2-c3*c2+2*c3^2],[-c3^2*c2^3-c3^3*c2^2+c2+c3], |
|
...,[c1^2+2*c3*c1+c3^2],[c0+c1+c2+c3]] |
|
[58] L[2]; |
|
[[(c2-c3)*c1+c3*c2-2*c3^2,c3^2*c2,(-c3*c2^2+c3^2*c2)*c1-c3*c2^3,...], |
|
...,[0,0,-1,c1+c3],[0,0,0,1]] |
|
[59] C0=L[2][0]; |
|
[(c2-c3)*c1+c3*c2-2*c3^2,c3^2*c2,(-c3*c2^2+c3^2*c2)*c1-c3*c2^3, |
|
(c3*c2^3-c3^2*c2^2)*c1+c3^2*c2^3-c3^3*c2^2] |
|
[60] L[1][0][0]-(C0[0]*F[0]+C0[1]*F[1]+C0[2]*F[2]+C0[3]*F[3]); |
|
0 |
|
[61] M=newsuz.modules_syz(F,V,0,0dp=1)$ |
|
[62] M[0]; |
|
[(-1)*<<0,1,2,0:1>>+(-1)*<<0,0,2,1:1>>+(1)*<<0,1,0,2:1>>+..., |
|
...,(1)*<<1,0,0,0:3>>+(1)*<<0,1,0,0:3>>+(1)*<<0,0,1,0:3>>+ |
|
...+(-1)*<<0,1,1,0:4>>+(-1)*<<1,0,0,1:4>>+(-1)*<<0,0,1,1:4>>] |
@end example |
@end example |
|
|
@node 部分分数係数の微分作用素,,, noro_module_syz.rr |
@node 臂ゃ怨茹,,, noro_module_syz.rr |
@section 部分分数係数の微分作用素 |
@section 臂ゃ怨茹 |
|
|
@menu |
@menu |
* 部分分数の表現:: |
* newsyz.fres newsyz.minres:: |
* 部分分数係数の微分作用素の表現:: |
* newsyz.lres newsyz.sres newsyz.minsres:: |
* 部分分数係数の微分作用素の演算:: |
|
@end menu |
@end menu |
|
|
@node 部分分数の表現,,, 部分分数係数の微分作用素 |
R 紊綣違. F_i R 筝怨臂, n_i F_i 潟. |
@subsection 部分分数の表現 |
膀∽違, F_0 臂 I 絲障, F_0/I 怨茹 |
|
@iftex |
|
@tex |
|
$$0\to F_l\to \cdots \to F_0 \to F_0/I \to 0$$ |
|
@end tex |
|
@end iftex |
|
@ifnottex |
|
0->F_l->...->F_0->F_0/I->0 |
|
@end ifnottex |
|
筝∽違ゃ茹h. |
|
怨茹c phi_i:F_i->F_(i-1) . |
|
|
matrix 1F1 が満たす微分方程式の係数は @var{1/yi}, @var{1/(yi-yj)} の定 |
@node newsyz.fres newsyz.minres,,,臂ゃ怨茹 |
数倍の和として書かれている. さらに, ロピタル則を用いた対角領域への制限 |
@subsection @code{newsyz.fres}, @code{newsyz.minres} |
アルゴリズムの結果も同様に部分分数の和として書ける. |
@findex newsyz.fres |
|
@findex newsyz.minres |
|
|
@itemize @bullet |
|
@item |
|
分母に現れる @var{yi0^n0(yi1-yj1)^n1(yi2-yj2)^n2...(yik-yjk)^nk} は |
|
@var{[[yi0,n0],[yi1-yj1,n1],...,[yik-yjk,nk]]} なる形のリストとして表現 |
|
される. ここで, 各因子 @var{yi-yj} は @var{i>j} を満たし, さらに因子は |
|
ある一定の順序で整列される. |
|
@item |
|
@var{f} を上のようなべき積とし, @var{c} を定数とするとき, 単項式にあた |
|
る @var{c/f} は @var{[c,f]} で表現される. @var{f=[]} の場合, 分母が 1 |
|
であることを意味する. |
|
@item |
|
最後に, @var{c1/f1+...+ck/fk} は @var{[[c1,f1],...,[ck,fk]]} と表現され |
|
る. ここでも, 各項はある一定の順序で整列される. |
|
@item |
|
部分分数を通分して簡約した結果, 0 になることもあることに注意する. |
|
@end itemize |
|
|
|
@node 部分分数係数の微分作用素の表現,,, 部分分数係数の微分作用素 |
|
@subsection 部分分数係数の微分作用素の表現 |
|
|
|
前節の部分分数を用いて, それらを係数とする微分作用素が表現できる. |
|
@var{f1,...,fk} を部分分数の表現, @var{d1,...,dk} を分散表現単項式 (現 |
|
在設定されている項順序で @var{d1>...>dk}) とするとき, 微分作用素 |
|
@var{f1*d1+...+fk*dk} が@var{[f1,d1],...[fk,dk]]}で表現される. |
|
|
|
@node 部分分数係数の微分作用素の演算,,, 部分分数係数の微分作用素 |
|
@subsection 部分分数係数の微分作用素の演算 |
|
|
|
@menu |
|
* noro_module_syz.wsetup:: |
|
* noro_module_syz.addpf:: |
|
* noro_module_syz.mulcpf:: |
|
* noro_module_syz.mulpf:: |
|
* noro_module_syz.muldpf:: |
|
@end menu |
|
|
|
@node noro_module_syz.wsetup,,, 部分分数係数の微分作用素の演算 |
|
@subsubsection @code{noro_module_syz.wsetup} |
|
@findex noro_module_syz.wsetup |
|
|
|
@table @t |
@table @t |
@item noro_module_syz.wsetup(@var{m}) |
@item newsyz.fres(@var{f},@var{v},@var{h},@var{O}[|weyl=1]) |
|
@itemx newsyz.minres(@var{f},@var{v},@var{h},@var{O}[|weyl=1]) |
|
臂ゃ怨茹c荐膊. |
@end table |
@end table |
|
|
@table @var |
@table @var |
@item m |
|
自然数 |
|
@end table |
|
|
|
@itemize @bullet |
|
@item @var{m} 変数の計算環境をセットする. 変数は @var{y0,y1,...,ym}, @var{dy0,...,dym} |
|
で @var{y0, dy0} は中間結果の計算のためのダミー変数である. |
|
@end itemize |
|
|
|
@node noro_module_syz.addpf,,, 部分分数係数の微分作用素の演算 |
|
@subsubsection @code{noro_module_syz.addpf} |
|
@findex noro_module_syz.addpf |
|
@table @t |
|
@item noro_module_syz.addpf(@var{p1},@var{p2}) |
|
@end table |
|
|
|
@table @var |
|
@item return |
@item return |
部分分数係数の微分作用素 |
紊綣鴻鴻鴻 |
@item p1, p2 |
|
部分分数係数の微分作用素 |
|
@end table |
|
|
|
@itemize @bullet |
@item f |
@item 微分作用素 @var{p1}, @var{p2} の和を求める. |
紊綣鴻, 障紊綣鴻鴻 |
@end itemize |
@item v |
|
紊違鴻 |
@node noro_module_syz.mulcpf,,, 部分分数係数の微分作用素の演算 |
@item h |
@subsubsection @code{noro_module_syz.mulcpf} |
莢贋 |
@findex noro_module_syz.mulcpf |
@item O |
@table @t |
綺 |
@item noro_module_syz.mulcpf(@var{c},@var{p}) |
|
@end table |
@end table |
|
|
@table @var |
|
@item return |
|
部分分数係数の微分作用素 |
|
@item c |
|
部分分数 |
|
@item p |
|
部分分数係数の微分作用素 |
|
@end table |
|
|
|
@itemize @bullet |
@itemize @bullet |
@item 部分分数 @var{c} と微分作用素 @var{p} の積を計算する. |
f=[f_1,...,f_m] 臂 I 膤祉, |
|
膤祉. ∽違, F_0/I 怨茹c荐膊. |
|
@item 腟 [M_1,...,M_l] 鴻, M_i [phi_i(e_1),...,phi_i(e_(n_i)] |
|
鴻, syz M_(i-1) , O 筝 POT 綺≪違弱阪с. |
|
@item @code{newsyz.module_syz} 罨∞絎茵. |
|
@code{newsyz.minres} с, 緇 syzygy 膤祉, 絎違ゃ膂∞茵. |
|
@item @code{newsyz.minres} , f 罨<翫, 罐球怨茹c緇. |
|
@item h, O, 激с weyl ゃ @code{newsyz.module_syz} 罕с. |
@end itemize |
@end itemize |
|
|
@node noro_module_syz.mulpf,,, 部分分数係数の微分作用素の演算 |
|
@subsubsection @code{noro_module_syz.mulpf} |
|
@findex noro_module_syz.mulpf |
|
@table @t |
|
@item noro_module_syz.mulpf(@var{p1},@var{p2}) |
|
@end table |
|
|
|
@table @var |
|
@item return |
|
部分分数係数の微分作用素 |
|
@item p1, p2 |
|
部分分数係数の微分作用素 |
|
@end table |
|
|
|
@itemize @bullet |
|
@item 微分作用素 @var{p1}, @var{p2} の積を計算する. |
|
@end itemize |
|
|
|
@node noro_module_syz.muldpf,,, 部分分数係数の微分作用素の演算 |
|
@subsubsection @code{noro_module_syz.muldpf} |
|
@findex noro_module_syz.muldpf |
|
@table @t |
|
@item noro_module_syz.muldpf(@var{y},@var{p}) |
|
@end table |
|
|
|
@table @var |
|
@item return |
|
部分分数係数の微分作用素 |
|
@item y |
|
変数 |
|
@item p |
|
部分分数係数の微分作用素 |
|
@end table |
|
|
|
@itemize @bullet |
|
@item 変数 @var{y} に対し, 微分作用素 @var{dy} と @var{p} の微分作用素としての |
|
積を計算する. |
|
@end itemize |
|
|
|
@example |
@example |
[...] noro_module_syz.wsetup(4)$ |
[0] load("noro_module_syz.rr")$ |
[...] P=noro_module_syz.wishartpf(4,1); |
[43] load("katsura")$ |
[[[[1,[]]],(1)*<<0,2,0,0,0>>],[[[1/2,[[y1-y2,1]]],[1/2,[[y1-y3,1]]], |
[47] F=hkatsura(4)$ |
...,[[[-a,[[y1,1]]]],(1)*<<0,0,0,0,0>>]] |
[48] V=[t,u0,u1,u2,u3,u4]$ |
[...] Q=noro_module_syz.muldpf(y1,P); |
[49] R=newsyz.fres(F,V,0,0)$ |
[[[[1,[]]],(1)*<<0,3,0,0,0>>],[[[1/2,[[y1-y2,1]]],[1/2,[[y1-y3,1]]], |
[51] map(length,R); |
...,[[[a,[[y1,2]]]],(1)*<<0,0,0,0,0>>]] |
[5,22,28,12,2] |
|
[52] S=newsyz.minres(F,V,0,0)$ |
|
[5,10,10,5,1] |
@end example |
@end example |
|
|
@node Runge-Kutta 法の試験的実装,,, noro_module_syz.rr |
@node newsyz.lres newsyz.sres newsyz.minsres,,,臂ゃ怨茹 |
@section Runge-Kutta 法の試験的実装 |
@subsection @code{newsyz.lres}, @code{newsyz.sres}, @code{newsyz.minsres}, |
|
@findex newsyz.lres |
|
@findex newsyz.sres |
|
@findex newsyz.minsres |
|
|
@menu |
|
* rk_ratmat:: |
|
@end menu |
|
|
|
@node rk_ratmat,,, Runge-Kutta 法の試験的実装 |
|
|
|
@code{noro_module_syz.ps_by_hgm} では, パフィアン行列を計算したあと, 与えられたステップ数で |
|
Runge-Kutta 法を実行して近似解の値を計算する組み込み関数 @code{rk_ratmat} を実行している. |
|
この関数を, 値が与えられた精度で安定するまでステップ数を2倍しながら繰り返して実行する. |
|
@code{rk_ratmat} 自体, ある程度汎用性があるので, ここでその使用法を解説する. |
|
|
|
@subsection @code{rk_ratmat} |
|
@findex rk_ratmat |
|
|
|
@table @t |
@table @t |
@item rk_ratmat(@var{rk45},@var{num},@var{den},@var{x0},@var{x1},@var{s},@var{f0}) |
@item newsyz.lres(@var{f},@var{v},@var{h},@var{O}[|dp=1,top=1]) |
有理関数係数のベクトル値一階線形常微分方程式系を Runge-Kutta 法で解く |
@itemx newsyz.sres(@var{f},@var{v},@var{h},@var{O}[|dp=1]) |
|
@itemx newsyz.minsres(@var{f},@var{v},@var{h},@var{O}[|dp=1]) |
|
臂ゃ怨茹c荐膊. |
@end table |
@end table |
|
|
@table @var |
@table @var |
@item return |
@item return |
実数のリスト |
紊綣鴻鴻鴻 |
|
|
@item rk45 |
@item f |
4 または 5 |
紊綣鴻, 障紊綣鴻鴻 |
@item num |
@item v |
定数行列の配列 |
紊違鴻 |
@item den |
@item h |
多項式 |
0 障 1 |
@item x0, x1 |
@item O |
実数 |
綺 |
@item s |
|
自然数 |
|
@item f0 |
|
実ベクトル |
|
@end table |
@end table |
|
|
@itemize @bullet |
@itemize @bullet |
@item |
|
配列 @var{num} のサイズを @var{k} とするとき, |
|
@var{P(x)=1/den(num[0]+num[1]x+...+num[k-1]x^(k-1))} に対し @var{dF/dx = P(x)F}, @var{F(x0)=f0} を |
|
Runge-Kutta 法で解く. |
|
@item |
@item |
@var{rk45} が 4 のとき 4 次 Runge-Kutta, 5 のとき 5 次 Runge-Kutta アルゴリズムを実行する. |
f=[f_1,...,f_m] 臂 I 膤祉, |
実験的実装のため, adaptive アルゴリズムは実装されていない. |
@code{newsyz.lres} F_0/I 怨茹c La Scala-Stillman ≪眼冴荐膊. |
|
@code{newsyz.sres}, @code{newsyz.minsres} F_0/I 怨茹c Schreyer ≪眼冴荐膊. |
@item |
@item |
@var{s} はステップ数で, 刻み幅は@var{(x1-x0)/s} である. |
遺筝紊綣遺臂ゃ絲障水茖. |
@item |
@item 腟 [M_1,...,M_l] 鴻, M_i syz M_(i-1) , Schreyer 綺≪ |
@var{f0} がサイズ@var{n} のとき, @var{num} の各成分は @var{n} 次正方行列である. |
違弱阪с. |
@item |
@item h=1 , 違弱阪荐膊罨≦腟宴ц. |
結果は, 長さ @var{s} の実数リスト @var{[r1,...,rs]} で, @var{ri} は @var{i} ステップ目に計算された |
@item dp=1 , 腟臂ゅ綣ц. |
解ベクトルの第0成分である. 次のステップに進む前に解ベクトルを @var{ri} で割るので, 最終的に |
@item @code{newsyz.lres} top=1 , S-紊綣遺荐膊, 膂∞сc鴻т信篋. |
解 @var{F(x1)} の第 0 成分が @var{rs*r(s-1)*...*r1} となる. |
@item f 罨<翫, @code{newsyz.lres} @code{newsyz.minsres} 罐球怨茹c緇. |
@item 方程式が線形なので, Runge-Kutta の各ステップも線形となることを利用し, |
|
第0成分を1に正規化することで, 途中の解の成分が倍精度浮動小数の |
|
範囲に収まることを期待している. 初期ベクトル @var{f0} の成分が倍精度浮動小数に収まらない場合 |
|
は, @var{f0} を正規化してから @code{rk_ratmat} を実行し, 前項の結果に @var{f0} の第 0 成分をかければ |
|
よい. |
|
@end itemize |
@end itemize |
|
|
@example |
@example |
[...] F=ltov([sin(1/x),cos(1/x),sin(1/x^2),cos(1/x^2)]); |
[0] load("noro_module_syz.rr")$ |
[ sin((1)/(x)) cos((1)/(x)) sin((1)/(x^2)) cos((1)/(x^2)) ] |
[43] F=[x00*x11-x01*x10,x01*x12-x02*x11,x02*x13-x03*x12,-x11*x20+x21*x10, |
[...] F0=map(eval,map(subst,F,x,1/10)); |
-x21*x12+x22*x11,-x22*x13+x23*x12,x31*x20-x30*x21,x32*x21-x31*x22,x33*x22-x32*x23]$ |
[ -0.54402111088937 -0.839071529076452 -0.506365641109759 0.862318872287684 ] |
[44] V=[x00,x01,x02,x03,x10,x11,x12,x13,x20,x21,x22,x23,x30,x31,x32,x33]$ |
[...] N0=matrix(4,4,[[0,0,0,0],[0,0,0,0],[0,0,0,-2],[0,0,2,0]])$ |
[45] cputime(1)$ |
[...] N1=matrix(4,4,[[0,-1,0,0],[1,0,0,0],[0,0,0,0],[0,0,0,0]])$ |
1.8e-05sec(1.502e-05sec) |
[...] N=ltov([N0,N1])$ |
[46] R=newsyz.minres(F,V,0,0)$ |
[...] D=x^3$ |
333.4sec(339.6sec) |
[...] R=rk_ratmat(5,N,D,1/10,10,10^4,F0)$ |
[47] S=newsyz.lres(F,V,0,0)$ |
[...] for(T=R,A=1;T!=[];T=cdr(T))A *=car(T)[1]; |
85.34sec(85.56sec) |
[...] A; |
[48] T=newsyz.minsres(F,V,0,0)$ |
0.0998334 |
241.2sec(250.3sec) |
[...] F1=map(eval,map(subst,F,x,10)); |
[49] cputime(0)$ |
[ 0.0998334166468282 0.995004165278026 0.00999983333416666 0.999950000416665 ] |
[50] map(length,R); |
|
[9,75,456,1602,3391,4680,4388,2849,1290,393,72,6] |
|
[51] map(length,S); |
|
[9,75,456,1602,3391,4680,4388,2849,1290,393,72,6,0] |
|
[52] map(length,T); |
|
[9,75,456,1602,3391,4680,4388,2849,1290,393,72,6,0] |
|
|
@end example |
@end example |
|
|
|
@comment --- 障 --- |
@comment --- おまじない --- |
|
@node Index,,, Top |
@node Index,,, Top |
@unnumbered Index |
@unnumbered Index |
@printindex fn |
@printindex fn |
Line 548 Runge-Kutta 法で解く. |
|
Line 360 Runge-Kutta 法で解く. |
|
@summarycontents |
@summarycontents |
@contents |
@contents |
@bye |
@bye |
@comment --- おまじない終り --- |
@comment --- 障腟 --- |
|
|