Determinant and permanent: Difference between revisions

Content added Content deleted
(→‎Tcl: Added implementation)
Line 41: Line 41:
and the permanent can be defined as
and the permanent can be defined as
<lang parigp>matperm(M)=my(n=#M,t);sum(i=1,n!,t=numtoperm(n,i);prod(j=1,n,M[j,t[j]]))</lang>
<lang parigp>matperm(M)=my(n=#M,t);sum(i=1,n!,t=numtoperm(n,i);prod(j=1,n,M[j,t[j]]))</lang>

=={{header|Tcl}}==
The determinant is provided by the linear algebra package in Tcllib:
{{tcllib|math::linearalgebra}}
<lang tcl>package require Tcl
puts [math::linearalgebra::det $mat]</lang>
The permanent (being somewhat less common) requires definition, but is easily described:
{{tcllib|struct::list}}
<lang tcl>package require struct::list

proc permanent {matrix} {
for {set plist {};set i 0} {$i<[llength $matrix]} {incr i} {
lappend plist $i
}
foreach p [::struct::list permutations $plist] {
foreach i $plist j $p {
lappend prod [lindex $matrix $i $j]
}
lappend sum [tcl::mathop::* {*}$prod[set prod {}]]
}
return [tcl::mathop::+ {*}$sum]
}

puts [permanent $mat]</lang>