28 lines
796 B
Scheme
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))
|