n_wishartd

n_wishartd User’s Manual

Edition 1.0

Aug 2016

by Masayuki Noro

Copyright © Masayuki Noro 2016. All rights reserved.


[ << ] [ < ] [?] [ > ] [ >> ]         [??] [??] [???] [ ? ]

1 matrix 1F1 の対角領域上への制限パッケージ n_wishartd.rr

このマニュアルでは, asir-contrib パッケージに収録されている, matrix 1F1 が対角領域上で満たす微分方程式系を計算するパッケージ ‘n_wishartd.rr’ について解説する. このパッケージを使うには, まず ‘n_wishartd.rr’ をロードする.

[...] load("n_wishartd.rr");

このパッケージの函数を呼び出すには, 全て n_wishartd. を先頭につける.


[ << ] [ < ] [?] [ > ] [ >> ]         [??] [??] [???] [ ? ]

1.1 matrix 1F1 の対角領域上への制限


[ << ] [ < ] [?] [ > ] [ >> ]         [??] [??] [???] [ ? ]

1.1.1 n_wishartd.diagpf

n_wishartd.diagpf(m,blocks)

m変数の 1F1 が満たす方程式を, blocks で指定される 対角領域上に制限した微分方程式系を計算する.

return

[E1,E2,...] なるリスト, 各 Ei は 部分分数を係数とする微分作用素で, 制限した 1F1を零化する.

m

自然数

vars

[[s1,e1],[s2,e2],...] なるリスト.

options

下の説明参照.

[2649] Z=n_wishartd.diagpf(5,[[1,3],[4,5]]); 
[
 [[[[-1,[]]],(1)*<<0,0,0,0,3,0>>],
  [[[-2,[[y1-y4,1]]],[-2,[[y4,1]]]],(1)*<<0,1,0,0,1,0>>],
  [[[9/2,[[y1-y4,1]]],[-3*c+11/2,[[y4,1]]],[3,[]]],(1)*<<0,0,0,0,2,0>>],
  ...
  [[[-6*a,[[y1-y4,1],[y4,1]]],[(4*c-10)*a,[[y4,2]]],[-4*a,[[y4,1]]]],
   (1)*<<0,0,0,0,0,0>>]],
 [[[[-1,[]]],(1)*<<0,4,0,0,0,0>>],

  [[[-6,[[y1-y4,1]]],[-6*c+10,[[y1,1]]],[6,[]]],(1)*<<0,3,0,0,0,0>>],
  [[[5,[[y1-y4,1]]],[-5,[[y1,1]]]],(1)*<<0,2,0,0,1,0>>],
  ...
  [[[21*a,[[y1-y4,2],[y1,1]]],[(36*c-87)*a,[[y1-y4,1],[y1,2]]],
   [-36*a,[[y1-y4,1],[y1,1]]],[(18*c^2-84*c+96)*a,[[y1,3]]],
   [-9*a^2+(-36*c+87)*a,[[y1,2]]],[18*a,[[y1,1]]]],(1)*<<0,0,0,0,0,0>>]]
]

[ << ] [ < ] [?] [ > ] [ >> ]         [??] [??] [???] [ ? ]

1.1.2 n_wishartd.message

n_wishartd.message(onoff)

計算中のメッセージ出力をon/off する.

onoff

onoff=1 のときメッセージを出力し, onoff=0 のときしない.


[ << ] [ < ] [?] [ > ] [ >> ]         [??] [??] [???] [ ? ]

1.2 制限した関数の計算


[ << ] [ < ] [?] [ > ] [ >> ]         [??] [??] [???] [ ? ]

1.2.1 n_wishartd.prob_by_hgm

n_wishartd.prob_by_hgm(m,n,[p1,p2,...],[s1,s2,...],t[|options])

HGM により重複固有値を持つ共分散行列に対する Wishart 行列の最大固有値の 分布関数の値を計算する.

return
m

変数の個数

n

自由度

[p1,p2,...]

重複固有値の個数のリスト

[s1,s2,...]

各重複固有値

[...] n_wishartd.message(1)$
[...] P=n_wishartd.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)

[ << ] [ < ] [?] [ > ] [ >> ]         [??] [??] [???] [ ? ]

1.2.2 n_wishartd.prob_by_ps

n_wishartd.prrob_by_ps(m,n,[p1,p2,...],[s1,s2,...],t[|options])

べき級数により重複固有値を持つ共分散行列に対する Wishart 行列の最大固有値の 分布関数の値を計算する.

m

変数の個数

n

自由度

[p1,p2,...]

重複固有値の個数のリスト

[s1,s2,...]

各重複固有値

[...] Q=n_wishartd.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=n_wishartd.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)

[ << ] [ < ] [?] [ > ] [ >> ]         [??] [??] [???] [ ? ]

1.2.3 n_wishartd.ps

n_wishartd.ps(z,v,td)

微分方程式系のべき級数解を指定された全次数まで計算する.

return

多項式リスト

z

部分分数係数の微分作用素のリスト

v

変数リスト

[...] Z=n_wishartd.diagpf(10,[[1,5],[6,10]])$
[...] Z0=subst(Z,a,(10+1)/2,c,(10+100+1)/2)$
[...] PS=n_wishartd.ps(Z0,[y1,y6],10)$
[...] PS[0];
197230789502743383953639/230438384724900975787223158176000*y1^10+
...
+(6738842542131976871672233/1011953706634779427957034268904320*y6^9
...+3932525/62890602*y6^2+1025/4181*y6+55/111)*y1
+197230789502743383953639/230438384724900975787223158176000*y6^10
+...+1395815/62890602*y6^3+3175/25086*y6^2+55/111*y6+1

[ << ] [ < ] [?] [ > ] [ >> ]         [??] [??] [???] [ ? ]

1.3 部分分数係数の微分作用素


[ << ] [ < ] [?] [ > ] [ >> ]         [??] [??] [???] [ ? ]

1.3.1 部分分数の表現

matrix 1F1 が満たす微分方程式の係数は 1/yi, 1/(yi-yj) の定 数倍の和として書かれている. さらに, ロピタル則を用いた対角領域への制限 アルゴリズムの結果も同様に部分分数の和として書ける.


[ << ] [ < ] [?] [ > ] [ >> ]         [??] [??] [???] [ ? ]

1.3.2 部分分数係数の微分作用素の表現

前節の部分分数を用いて, それらを係数とする微分作用素が表現できる. f1,...,fk を部分分数の表現, d1,...,dk を分散表現単項式 (現 在設定されている項順序で d1>...>dk) とするとき, 微分作用素 f1*d1+...+fk*dk[f1,d1],...[fk,dk]]で表現される.


[ << ] [ < ] [?] [ > ] [ >> ]         [??] [??] [???] [ ? ]

1.3.3 部分分数係数の微分作用素の演算


[ << ] [ < ] [?] [ > ] [ >> ]         [??] [??] [???] [ ? ]

1.3.3.1 n_wishartd.wsetup

n_wishartd.wsetup(m)
m

自然数


[ << ] [ < ] [?] [ > ] [ >> ]         [??] [??] [???] [ ? ]

1.3.3.2 n_wishartd.addpf

n_wishartd.addpf(p1,p2)
return

部分分数係数の微分作用素

p1, p2

部分分数係数の微分作用素


[ << ] [ < ] [?] [ > ] [ >> ]         [??] [??] [???] [ ? ]

1.3.3.3 n_wishartd.mulcpf

n_wishartd.mulcpf(c,p)
return

部分分数係数の微分作用素

c

部分分数

p

部分分数係数の微分作用素


[ << ] [ < ] [?] [ > ] [ >> ]         [??] [??] [???] [ ? ]

1.3.3.4 n_wishartd.mulpf

n_wishartd.mulpf(p1,p2)
return

部分分数係数の微分作用素

p1, p2

部分分数係数の微分作用素


[ << ] [ < ] [?] [ > ] [ >> ]         [??] [??] [???] [ ? ]

1.3.3.5 n_wishartd.muldpf

n_wishartd.muldpf(y,p)
return

部分分数係数の微分作用素

y

変数

p

部分分数係数の微分作用素

[...] n_wishartd.wsetup(4)$
[...] P=n_wishartd.wishartpf(4,1);
[[[[1,[]]],(1)*<<0,2,0,0,0>>],[[[1/2,[[y1-y2,1]]],[1/2,[[y1-y3,1]]],
...,[[[-a,[[y1,1]]]],(1)*<<0,0,0,0,0>>]]
[...] Q=n_wishartd.muldpf(y1,P);
[[[[1,[]]],(1)*<<0,3,0,0,0>>],[[[1/2,[[y1-y2,1]]],[1/2,[[y1-y3,1]]],
...,[[[a,[[y1,2]]]],(1)*<<0,0,0,0,0>>]]

[ << ] [ < ] [?] [ > ] [ >> ]         [??] [??] [???] [ ? ]

1.4 Runge-Kutta 法の試験的実装


[ << ] [ < ] [?] [ > ] [ >> ]         [??] [??] [???] [ ? ]

n_wishartd.ps_by_hgm では, パフィアン行列を計算したあと, 与えられたステップ数で Runge-Kutta 法を実行して近似解の値を計算する組み込み関数 rk_ratmat を実行している. この関数を, 値が与えられた精度で安定するまでステップ数を2倍しながら繰り返して実行する. rk_ratmat 自体, ある程度汎用性があるので, ここでその使用法を解説する.

1.4.1 rk_ratmat

rk_ratmat(rk45,num,den,x0,x1,s,f0)

有理関数係数のベクトル値一階線形常微分方程式系を Runge-Kutta 法で解く

return

実数のリスト

rk45

4 または 5

num

定数行列の配列

den

多項式

x0, x1

実数

s

自然数

f0

実ベクトル

[...] F=ltov([sin(1/x),cos(1/x),sin(1/x^2),cos(1/x^2)]);
[ sin((1)/(x)) cos((1)/(x)) sin((1)/(x^2)) cos((1)/(x^2)) ]
[...] F0=map(eval,map(subst,F,x,1/10));
[ -0.54402111088937 -0.839071529076452 -0.506365641109759 0.862318872287684 ]
[...] N0=matrix(4,4,[[0,0,0,0],[0,0,0,0],[0,0,0,-2],[0,0,2,0]])$
[...] N1=matrix(4,4,[[0,-1,0,0],[1,0,0,0],[0,0,0,0],[0,0,0,0]])$
[...] N=ltov([N0,N1])$
[...] D=x^3$
[...] R=rk_ratmat(5,N,D,1/10,10,10^4,F0)$
[...] for(T=R,A=1;T!=[];T=cdr(T))A *=car(T)[1];
[...] A;
0.0998334
[...] F1=map(eval,map(subst,F,x,10));
[ 0.0998334166468282 0.995004165278026 0.00999983333416666 0.999950000416665 ]

[ << ] [ < ] [?] [ > ] [ >> ]         [??] [??] [???] [ ? ]

Index

??:   N   R  
?????  ?

N
n_wishartd.addpf 1.3.3.2 n_wishartd.addpf
n_wishartd.diagpf 1.1.1 n_wishartd.diagpf
n_wishartd.message 1.1.2 n_wishartd.message
n_wishartd.mulcpf 1.3.3.3 n_wishartd.mulcpf
n_wishartd.muldpf 1.3.3.5 n_wishartd.muldpf
n_wishartd.mulpf 1.3.3.4 n_wishartd.mulpf
n_wishartd.prob_by_hgm 1.2.1 n_wishartd.prob_by_hgm
n_wishartd.prob_by_ps 1.2.2 n_wishartd.prob_by_ps
n_wishartd.ps 1.2.3 n_wishartd.ps
n_wishartd.wsetup 1.3.3.1 n_wishartd.wsetup

R
rk_ratmat 1.4.1 rk_ratmat

??:   N   R  

[??] [??] [???] [ ? ]

??


[??] [??] [???] [ ? ]

???????


[??] [??] [???] [ ? ]

????????

?????12? 18, 2017?texi2html 5.0????????????

????????????????????????????

??? ?? ??? 1.2.3???????
[ << ] FastBack Beginning of this chapter or previous chapter 1
[ < ] Back Previous section in reading order 1.2.2
[?] Up Up section 1.2
[ > ] Forward Next section in reading order 1.2.4
[ >> ] FastForward Next chapter 2
[??] ?? Cover (top) of document  
[??] ?? Table of contents  
[???] ??? ???  
[ ? ] About About (help)  

?????????????????1.2.3???????????????


?????12? 18, 2017?texi2html 5.0????????????