2012-02-23 8 views
2

私はperlを使って行列を指数関数化する関数を探しています。私はCPANを検索しましたが、適切なものを見つけることができません。誰もが適切なパッケージ、または簡単な機能を知っていますか?例えばperlで行列を指数化する

は、次の行列($ mの)ために:

$m = [[-1.85294,0.36417,1.34865,0.14012], 
     [0.13385,-0.70885,0.16502,0.40998], 
     [0.48588,0.16174,-0.77471,0.12709], 
     [0.13424,1.06859,0.33797,-1.54081]]; 

電子^ M〜=

0.25438971 0.2029723 0.4580481 0.08458940 
0.07460393 0.6061030 0.1588883 0.16040370 
0.16502112 0.1557330 0.6025270 0.07671839 
0.08103971 0.4180838 0.2040153 0.29685570 
+2

http://search.cpan.org/~ellipse/PDL-LinearAlgebra-0.06/Trans/trans.pd#mexpまたはhttp://www.davideous.com/matrixexp/matrix.pmはどうですか? –

答えて

1

PDLは、J.D @として、これを処理します。指摘している。

use strict; 
use warnings; 

use PDL; 
use PDL::LinearAlgebra::Trans; 
use PDL::IO::Dumper; 

my $m = pdl [[-1.85294,0.36417,1.34865,0.14012], 
      [0.13385,-0.70885,0.16502,0.40998], 
      [0.48588,0.16174,-0.77471,0.12709], 
      [0.13424,1.06859,0.33797,-1.54081]]; 

my $new = mexp $m; 

print sdump $new; 

結果:

{my($VAR1); 
my($PDL_140600590505856) = (double(0.254389714179579,0.202972289234997,0.458048094091295,0.08458940315894629,0.0746039289026906,0.606102994157082,0.158888283526803,0.160403695685552,0.165021120118487,0.155733015860466,0.602527027489139,0.07671838765811791,0.08103970821403091,0.418083774202018,0.204015347133539,0.296855703714981)->reshape(4,4)); 


$VAR1 = $PDL_140600590505856; 

} 

double()関数内のビットは、結果行列です。

+0

それはトリックです。これは、赤字化されたサブルーチンについての3つの警告を表示しているようです。私は心配することは何もないと確信していますが、これを防ぐ方法を知っていますか?ありがとう! – wannymahoots

+0

奇妙な。私はperl 5.14.2の下でそれを実行している警告を受け取っていませんでした。どのバージョンのPerlとPDLを使用していますか? – friedo

+0

私はperl v5.12.4を実行していますが、PDLのインストールで何かが起きる可能性があります(主にUbuntuではapt-getを使用してインストールされましたが、PDL :: LinearAlgebra :: Transはソースからインストールされています)。私は調査します... – wannymahoots

関連する問題