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 ( |
((even? exp) (square-matrix (matrix-expo mat (halve exp)))) |
||
(else (multiply-matrix mat (matrix-expo mat ( |
(else (multiply-matrix mat (matrix-expo mat (dec exp)))))) |
||
</lang> |
</lang> |
||