PDLで逆行列を求める
行列を扱うには、PDL::Matrix
を使う必要がある。
詳しくは、PDL::MatrixとPDL::MatrixOpsを見ると良いかも。
3×3の単位行列はこんな感じで宣言する。
use strict; use warnings; use v5.10; use PDL; use PDL::Matrix; my $a = mpdl( [1,0,0], [0,1,0], [0,0,1] ); say $a; my $b = identity( 3, 3 ); say $b;
実行結果はこの通り。
$ perl aaa.pl
[
[1 0 0]
[0 1 0]
[0 0 1]
]
[
[1 0 0]
[0 1 0]
[0 0 1]
]
逆行列の計算はこんな感じ。
use strict; use warnings; use v5.10; use PDL; use PDL::Matrix; my $a = mpdl( [2,2,0], [0,2,0], [0,2,2] ); say $a; my $b = inv $a; say $b;
結果はこんな感じ。
$ perl bbb.pl
[
[2 2 0]
[0 2 0]
[0 2 2]
]
[
[ 0.5 0 0]
[-0.5 0.5 -0.5]
[ 0 0 0.5]
]
最後に行列の積について。
use strict; use warnings; use v5.10; use utf8; use PDL; use PDL::Matrix; my $a = mpdl( [2,2,0], [0,2,0], [0,2,2] ); my $b = inv $a; # 同じ位置の要素を掛け算しただけ say '# $a * $b', $a * $b; # 行列の積は'x'を使う say '# $a x $b', $a x $b;
ポイントは演算子で、'*'
じゃなくて'x'
を使っているところ。
$ perl ccc.pl
# $a * $b
[
[ 1 -1 0]
[ 0 1 0]
[ 0 -1 1]
]
# $a x $b
[
[1 0 0]
[0 1 0]
[0 0 1]
]
おしまい。
Leave a Comment