Matrix multiplication: Difference between revisions
Content added Content deleted
m (→{{header|Phix}}: crash(), added examples) |
(add FreeBASIC) |
||
Line 1,990: | Line 1,990: | ||
end program |
end program |
||
</lang> |
</lang> |
||
=={{header|FreeBASIC}}== |
|||
<lang freebasic>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) |
|||
</lang> |
|||
=={{header|Frink}}== |
=={{header|Frink}}== |