2012-02-29 3 views
0

У меня есть подпрограмма, которая работает с двумя. Можно ли вызвать подпрограмму подпрограммой?Как умножить более чем на 2 матрицы в одной функции? PERL

+0

вам необходимо не изменять подпрограмму –

+0

возможный дубликат [Как умножить более двух матриц в perl?] (http://stackoverflow.com/questions/9475424/how-do-i-multiply-more-than-two-matrices- в-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.Например, если размеры 1-на-100 , 100 на 1 и 1 на 100, то (AB)C создает промежуточную стадию матрицу 1 на 1, тогда как A(BC) создает промежуточную стадию матрицу 100 на 100.)