44 lines
1.4 KiB
Plaintext
44 lines
1.4 KiB
Plaintext
type Matrix
|
|
dim as double m( any , any )
|
|
declare constructor ( )
|
|
declare constructor ( byval x as uinteger , byval y as uinteger )
|
|
end type
|
|
|
|
constructor Matrix ( )
|
|
end constructor
|
|
|
|
constructor Matrix ( byval x as uinteger , byval y as uinteger )
|
|
redim this.m( x - 1 , y - 1 )
|
|
end constructor
|
|
|
|
operator * ( byref a as Matrix , byref b as Matrix ) as Matrix
|
|
dim as Matrix ret
|
|
dim as uinteger i, j, k
|
|
if ubound( a.m , 2 ) = ubound( b.m , 1 ) and ubound( a.m , 1 ) = ubound( b.m , 2 ) then
|
|
redim ret.m( ubound( a.m , 1 ) , ubound( b.m , 2 ) )
|
|
for i = 0 to ubound( a.m , 1 )
|
|
for j = 0 to ubound( b.m , 2 )
|
|
for k = 0 to ubound( b.m , 1 )
|
|
ret.m( i , j ) += a.m( i , k ) * b.m( k , j )
|
|
next k
|
|
next j
|
|
next i
|
|
end if
|
|
return ret
|
|
end operator
|
|
|
|
'some garbage matrices for demonstration
|
|
dim as Matrix a = Matrix(4 , 2)
|
|
a.m(0 , 0) = 1 : a.m(0 , 1) = 0
|
|
a.m(1 , 0) = 0 : a.m(1 , 1) = 1
|
|
a.m(2 , 0) = 2 : a.m(2 , 1) = 3
|
|
a.m(3 , 0) = 0.75 : a.m(3 , 1) = -0.5
|
|
dim as Matrix b = Matrix( 2 , 4 )
|
|
b.m(0 , 0) = 3.1 : b.m(0 , 1) = 1.6 : b.m(0 , 2) = -99 : b.m (0, 3) = -8
|
|
b.m(1 , 0) = 2.7 : b.m(1 , 1) = 0.6 : b.m(1 , 2) = 0 : b.m(1,3) = 21
|
|
dim as Matrix c = a * b
|
|
print c.m(0, 0), c.m(0, 1), c.m(0, 2), c.m(0, 3)
|
|
print c.m(1, 0), c.m(1, 1), c.m(1, 2), c.m(1, 3)
|
|
print c.m(2, 0), c.m(2, 1), c.m(2, 2), c.m(2, 3)
|
|
print c.m(3, 0), c.m(3, 1), c.m(3, 2), c.m(3, 3)
|