RosettaCodeData/Task/Matrix-exponentiation-operator/FreeBASIC/matrix-exponentiation-opera...

27 lines
599 B
Plaintext

#include once "matmult.bas"
#include once "rowech.bas"
#include once "matinv.bas"
operator ^ (byval M as Matrix, byval n as integer ) as Matrix
dim as uinteger i, j, k = ubound( M.m, 1 )
if n < 0 then return matinv(M) ^ (-n)
if n = 0 then return M * matinv(M)
return (M ^ (n-1)) * M
end operator
dim as Matrix M = Matrix(2,2), Q
dim as integer i, j, n
M.m(0,0) = 1./3 : M.m(0,1) = 2./3
M.m(1,0) = 2./7 : M.m(1,1) = 5./7
for n = -2 to 4
Q = (M ^ n)
for i = 0 to 1
for j = 0 to 1
print Q.m(i, j),
next j
print
next i
print
next n