Matrix multiplication: Difference between revisions
Content deleted Content added
Line 545: | Line 545: | ||
} |
} |
||
=={{header|ELLA}}== |
|||
Sample originally from ftp://ftp.dra.hmg.gb/pub/ella (a now dead link) - Public release. |
|||
Code for matrix multiplication hardware design verification: |
|||
<pre> |
|||
MAC ZIP = ([INT n]TYPE t: vector1 vector2) -> [n][2]t: |
|||
[INT k = 1..n](vector1[k], vector2[k]). |
|||
MAC TRANSPOSE = ([INT n][INT m]TYPE t: matrix) -> [m][n]t: |
|||
[INT i = 1..m] [INT j = 1..n] matrix[j][i]. |
|||
MAC INNER_PRODUCT{FN * = [2]TYPE t -> TYPE s, FN + = [2]s -> s} |
|||
= ([INT n][2]t: vector) -> s: |
|||
IF n = 1 THEN *vector[1] |
|||
ELSE *vector[1] + INNER_PRODUCT {*,+} vector[2..n] |
|||
FI. |
|||
MAC MATRIX_MULT {FN * = [2]TYPE t->TYPE s, FN + = [2]s->s} = |
|||
([INT n][INT m]t: matrix1, [m][INT p]t: matrix2) -> [n][p]s: |
|||
BEGIN |
|||
LET transposed_matrix2 = TRANSPOSE matrix2. |
|||
OUTPUT [INT i = 1..n][INT j = 1..p] |
|||
INNER_PRODUCT{*,+}ZIP(matrix1[i],transposed_matrix2[j]) |
|||
END. |
|||
TYPE element = NEW elt/(1..20), |
|||
product = NEW prd/(1..1200). |
|||
FN PLUS = (product: integer1 integer2) -> product: |
|||
ARITH integer1 + integer2. |
|||
FN MULT = (element: integer1 integer2) -> product: |
|||
ARITH integer1 * integer2. |
|||
FN MULT_234 = ([2][3]element:matrix1, [3][4]element:matrix2) -> |
|||
[2][4]product: |
|||
MATRIX_MULT{MULT,PLUS}(matrix1, matrix2). |
|||
FN TEST = () -> [2][4]product: |
|||
( LET m1 = ((elt/2, elt/1, elt/1), |
|||
(elt/3, elt/6, elt/9)), |
|||
m2 = ((elt/6, elt/1, elt/3, elt/4), |
|||
(elt/9, elt/2, elt/8, elt/3), |
|||
(elt/6, elt/4, elt/1, elt/2)). |
|||
OUTPUT |
|||
MULT_234 (m1, m2) |
|||
). |
|||
COM test: just displaysignal MOC |
|||
</pre> |
|||
=={{header|Mathematica}}== |
=={{header|Mathematica}}== |
||
M1 = {{1, 2}, |
M1 = {{1, 2}, |