24 lines
619 B
Tcl
24 lines
619 B
Tcl
package require Tcl 8.5
|
|
namespace path {::tcl::mathop ::tcl::mathfunc}
|
|
|
|
proc matrix_exp {m pow} {
|
|
if { ! [string is int -strict $pow]} {
|
|
error "non-integer exponents not implemented"
|
|
}
|
|
if {$pow < 0} {
|
|
error "negative exponents not implemented"
|
|
}
|
|
lassign [size $m] rows cols
|
|
# assume square matrix
|
|
set temp [identity $rows]
|
|
for {set n 1} {$n <= $pow} {incr n} {
|
|
set temp [matrix_multiply $temp $m]
|
|
}
|
|
return $temp
|
|
}
|
|
|
|
proc identity {size} {
|
|
set i [lrepeat $size [lrepeat $size 0]]
|
|
for {set n 0} {$n < $size} {incr n} {lset i $n $n 1}
|
|
return $i
|
|
}
|