30 lines
942 B
Racket
30 lines
942 B
Racket
#lang racket
|
|
(require math)
|
|
|
|
(define a (matrix ((3 2) (2 1))))
|
|
|
|
;; Using the builtin matrix exponentiation
|
|
(for ([i 11])
|
|
(printf "a^~a = ~s\n" i (matrix-expt a i)))
|
|
|
|
;; Output:
|
|
;; a^0 = (array #[#[1 0] #[0 1]])
|
|
;; a^1 = (array #[#[3 2] #[2 1]])
|
|
;; a^2 = (array #[#[13 8] #[8 5]])
|
|
;; a^3 = (array #[#[55 34] #[34 21]])
|
|
;; a^4 = (array #[#[233 144] #[144 89]])
|
|
;; a^5 = (array #[#[987 610] #[610 377]])
|
|
;; a^6 = (array #[#[4181 2584] #[2584 1597]])
|
|
;; a^7 = (array #[#[17711 10946] #[10946 6765]])
|
|
;; a^8 = (array #[#[75025 46368] #[46368 28657]])
|
|
;; a^9 = (array #[#[317811 196418] #[196418 121393]])
|
|
;; a^10 = (array #[#[1346269 832040] #[832040 514229]])
|
|
|
|
;; But it could be implemented manually, using matrix multiplication
|
|
(define (mpower M p)
|
|
(cond [(= p 1) M]
|
|
[(even? p) (mpower (matrix* M M) (/ p 2))]
|
|
[else (matrix* M (mpower M (sub1 p)))]))
|
|
(for ([i (in-range 1 11)])
|
|
(printf "a^~a = ~s\n" i (matrix-expt a i)))
|