Determinant and permanent: Difference between revisions
Content added Content deleted
m (→{{header|J}}) |
(→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> |