MATMUL

Transformational Intrinsic Function (Generic): Performs matrix multiplication of numeric or logical matrices.

Syntax

result = MATMUL (matrix_a, matrix_b)

matrix_a
(Input) Must be an array of rank one or two. It must be of numeric (integer, real, or complex) or logical type.

matrix_b
(Input) Must be an array of rank one or two. It must be of numeric type if matrix_a is of numeric type or logical type if matrix_a is logical type.

At least one argument must be of rank two. The size of the first (or only) dimension of matrix_b must equal the size of the last (or only) dimension of matrix_a.

Results:

The result is an array whose type depends on the data type of the arguments, according to the rules shown in Conversion Rules for Numeric Assignment Statements. The rank and shape of the result depends on the rank and shapes of the arguments, as follows:

If the arguments are of numeric type, element (i, j) of the result has the value SUM ((row i of matrix_a) * (column j of matrix_b)). If the arguments are of logical type, element (i, j) of the result has the value ANY ((row i of matrix_a) .AND. (column j of matrix_b)).

Compatibility

CONSOLE STANDARD GRAPHICS QUICKWIN GRAPHICS WINDOWS DLL LIB

See Also: TRANSPOSE, PRODUCT

Examples

A is matrix

  [ 2  3  4 ]
  [ 3  4  5 ],
B is matrix
  [ 2  3 ]
  [ 3  4 ]
  [ 4  5 ],
X is vector (1, 2), and Y is vector (1, 2, 3).

The result of MATMUL (A, B) is the matrix-matrix product AB with the value

  [ 29  38 ]
  [ 38  50 ].

The result of MATMUL (X, A) is the vector-matrix product XA with the value (8, 11, 14).

The result of MATMUL (A, Y) is the matrix-vector product AY with the value (20, 26).

The following shows another example:

 INTEGER a(2,3), b(3,2), c(2), d(3), e(2,2), f(3), g(2)
 a = RESHAPE((/1, 2, 3, 4, 5, 6/), (/2, 3/))
 !  a is   1 3 5
 !         2 4 6
 b = RESHAPE((/1, 2, 3, 4, 5, 6/), (/3, 2/))
 !  b is   1 4
 !         2 5
 !         3 6
 c = (/1, 2/)      ! c is [1 2]
 d = (/1, 2, 3/)   ! d is [1 2 3]

 e = MATMUL(a, b)    ! returns 22 49
                     !         28 64

 f = MATMUL(c,a)   ! returns [5 11 17]
 g = MATMUL(a,d)   ! returns [22 28]
 WRITE(*,*) e, f, g
 END