Matrix-exponentiation operator: Difference between revisions

Content added Content deleted
m (→‎{{header|Scheme}}: Added a note)
Line 1,914: Line 1,914:
(apply + (map * row col)))
(apply + (map * row col)))


(define (multiply-matrix m1 m2)
(define (matrix-multiply m1 m2)
(map
(map
(lambda (row)
(lambda (row)
Line 1,921: Line 1,921:
m1))
m1))


(define (matrix-exp mat exp)

(define (matrix-expo mat exp)
(cond ((= exp 1) mat)
(cond ((= exp 1) mat)
((even? exp) (square-matrix (matrix-expo mat (halve exp))))
((even? exp) (square-matrix (matrix-exp mat (halve exp))))
(else (multiply-matrix mat (matrix-expo mat (dec exp))))))
(else (matrix-multiply mat (matrix-exp mat (dec exp))))))

(define (square-matrix mat)
(multiply-matrix mat mat))
</lang>
</lang>


{{out}}
<pre>
> (matrix-exp '((3 2) (2 1)) 50)
((16130531424904581415797907386349 9969216677189303386214405760200)
(9969216677189303386214405760200 6161314747715278029583501626149))
</pre>


=={{header|Seed7}}==
=={{header|Seed7}}==