**Table 3:** Predefined Relational Operators

C-XSC provides a special notation to manipulate subarrays of
vectors and matrices. Subarrays are arbitrary rectangular parts of
arrays.
All predefined operators may also use subarrays as operands.
A subarray of a matrix or vector is accessed using
the `()`

-operator or the `[]`

-operator.
The `()`

-operator specifies a
subarray of an object of the same type as the original object.
For example, if `A`

is a real *n*x*n*-matrix,
then `A(i,i)`

is the left upper *i*x*i* submatrix.
Note that parentheses in the declaration of a dynamic vector or
matrix do not specify a subarray, but define the index ranges of
the object to be allocated.
The `[]`

-operator generates a subarray of a ``lower'' type. For
example, if `A`

is a *n*x*n* *rmatrix*, then `A[i]`

is
the *i*-th row of `A`

of type *rvector*
and `A[i][j]`

is the *(i,j)*-th
element of `A`

of type *real*.

Both types of subarray access may also be combined, for example:
`A[k](i,j)`

is a subvector from index *i* to index *j*
of the *k*-th row vector of the matrix `A`

.

The use of subarrays is illustrated in the following
example describing the LU-factorization of a *n*x*n*-matrix
`A`

:

for (j=1; j<=n-1; j++) { for (k=j+1; k<=n; k++) { A[k][j] = A[k][j] / A[j][j]; A[k](j+1,n) = A[k](j+1,n) - A[k][j] * A[j](j+1,n); } }

This example demonstrates two important features of C-XSC. First,
we save one loop by using the subarray notation. This reduces
program complexity. Second, the program fragment above
is independent of the type of matrix `A`

(either *rmatrix*, *imatrix*, *cmatrix* or *cimatrix*), since all arithmetic
operators are suitably predefined in the mathematical sense.

Wed Mar 29 13:50:24 MET DST 1995