RosettaCodeData/Task/Matrix-exponentiation-operator/Scheme/matrix-exponentiation-operator-2.scm
2026-04-30 12:34:36 -04:00

28 lines
796 B
Scheme

(import (srfi 231))
(define (matrix* A B)
(array-copy! (array-inner-product A + * B)))
(define (matrix-square A)
(matrix* A A))
(define (matrix-identity A)
(array-copy! (make-array (array-domain A)
(lambda (i j) (if (= i j) 1 0)))))
(define (matrix-expt A n)
(cond ((zero? n) (matrix-identity A))
((= 1 n) A)
((even? n) (matrix-expt (matrix-square A)
(quotient n 2)))
(else (matrix* A (matrix-expt (matrix-square A)
(quotient n 2))))))
(define a
(list*->array 2 '((3 2)
(2 1))))
(for-each (lambda (i)
(for-each display
(list "a^" i " = " (array->list* (matrix-expt a i)) #\newline)))
(iota 11))