2012-02-29 3 views
0

私は2つで動作するサブルーチンを持っています。サブルーチン内でサブルーチンを呼び出すことはできますか?1つの関数で2つ以上の行列を乗算するにはどうすればよいですか? PERL

+0

サブルーチンを変更しないでください –

+0

[どのように私はperlで2つ以上の行列を乗算するのですか?](http://stackoverflow.com/questions/9475424/how-do-i-multiply-more-than-two-matrices- in-perl) – Toto

答えて

3

再帰—のビットはちょうどこの変更された最も簡単な方法:これまで

my $ref1 = $_[0]; 
my $ref2 = $_[1]; 

my $ref1 = shift; 
my $ref2 = shift; 

と、この:これに

return @product; 

if(@_ > 0) 
    { return &matrix(\@product, @_); } 
else 
    { return @product; } 

しかし、最も効率的な方法は、さまざまな配列の次元を調べることから始めて、乗算を実行する最適な順序を決定することです。 (配列の乗算は可換性ではありませんが結合型であり、配列の次元がすべて同じでない場合は、A(BC)は、(AB)Cよりもはるかに高価で、はるかに安価です。 、100×1、および1×100の場合、(AB)Cは中間ステップとして1行1列の行列を作成しますが、A(BC)は中間ステップとして100行100列の行列を作成します)。

関連する問題