以前、行列計算をFCMPプロシジャで実現する方法を紹介しました。
FCMPプロシジャと行列計算
同様に、PROC DS2 の MATRIXパッケージというものを使って行列計算を行う事も出来ます。
簡単な例として、以下の連立方程式をMATRIXパッケージによる行列計算で求めてみたいと思います。
行列で解を求める式はこんな感じでしょうか。
proc ds2; data OUT1 / overwrite=yes; /* 配列を定義 */ dcl double m1 [3,3]; dcl double m2 [3,1]; vararray double out [3,1]; /* matrixを定義 */ dcl package matrix _m1; dcl package matrix _m2; dcl package matrix _inv; dcl package matrix _mult; method run(); /* 計算対象の行列をいったん配列に格納 */ m1 := (1 1 1 2 4 3 5 3 2); m2 := (6 19 17); /* 配列を行列にSET */ _m1 = _new_ matrix( m1, 3, 3 ); _m2 = _new_ matrix( m2, 3, 1 ); /* 逆行列 と 行列の積 を求める */ _inv = _m1.inverse(); _mult = _inv.mult(_m2); /* 結果を配列に格納 */ _mult.out(out); end; run; quit; データセットOUT1
x=1, y=2, z=3 という結果が得られました。 |
いちいち配列をかませないといけないのがちょっと面倒。
0 件のコメント:
コメントを投稿