Matrix-exponentiation operator: Difference between revisions

Content added Content deleted
(→‎{{header|Scheme}}: Fixed scheme implementation)
(→‎{{header|Scheme}}: Added some missing functions)
Line 1,905: Line 1,905:


<lang scheme>
<lang scheme>
(define (even? n)
(if (= 0 (remainder n 2))
#t
#f))

(define (dec x)
(- x 1))

(define (halve x)
(/ x 2))

(define (row*col row col)
(define (row*col row col)
(apply + (map * row col)))
(apply + (map * row col)))
Line 1,918: Line 1,929:
(define (matrix-expo mat exp)
(define (matrix-expo mat exp)
(cond ((= exp 1) mat)
(cond ((= exp 1) mat)
((even? exp) (square-matrix (matrix-expo mat (/ exp 2))))
((even? exp) (square-matrix (matrix-expo mat (halve exp))))
(else (multiply-matrix mat (matrix-expo mat (- exp 1))))))
(else (multiply-matrix mat (matrix-expo mat (dec exp))))))


</lang>
</lang>