Jump to content

Determinant and permanent: Difference between revisions

+perl
m (→‎Library determinant: library churn)
(+perl)
Line 1,374:
As of version 2.10, the matrix permanent is built in:
<lang parigp>matpermanent(M)</lang>
 
=={{header|Perl}}==
{{trans|C}}
<lang perl>#!/usr/bin/perl
use strict;
use warnings;
use PDL;
use PDL::NiceSlice;
 
sub permanent{
my $mat = shift;
my $n = shift // $mat->dim(0);
return undef if $mat->dim(0) != $mat->dim(1);
return $mat(0,0) if $n == 1;
my $sum = 0;
--$n;
my $m = $mat(1:,1:)->copy;
for(my $i = 0; $i <= $n; ++$i){
$sum += $mat($i,0) * permanent($m, $n);
last if $i == $n;
$m($i,:) .= $mat($i,1:);
}
return sclr($sum);
}
 
my $M = pdl([[2,9,4], [7,5,3], [6,1,8]]);
print "M = $M\n";
print "det(M) = " . $M->determinant . ".\n";
print "det(M) = " . $M->det . ".\n";
print "perm(M) = " . permanent($M) . ".\n";</lang>
 
<code>determinant</code> and <code>det</code> are already defined in PDL, see[http://pdl.perl.org/?docs=MatrixOps&title=the%20PDL::MatrixOps%20manpage#det]. <code>permanent</code> has to be defined manually.
 
{{out}}
<pre>
M =
[
[2 9 4]
[7 5 3]
[6 1 8]
]
 
det(M) = -360.
det(M) = -360.
perm(M) = 900.
</pre>
 
=={{header|Perl 6}}==
22

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.