Как мне умножить более 2 матриц в одной функции? PERL - PullRequest
0 голосов
/ 29 февраля 2012

У меня есть подпрограмма, которая работает с двумя.Могу ли я вызвать подпрограмму в подпрограмме?

1 Ответ

3 голосов
/ 29 февраля 2012

Самый простой способ - немного рекурсии - просто измените это:

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-by-100, 100 на 1 и 1 на 100, затем (AB)C создает матрицу 1 на 1 в качестве промежуточного шага, тогда как A(BC) создает матрицу 100 на 100 в качестве промежуточнойшаг.)

...