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 nxn-matrix,
then A(i,i) is the left upper ixi 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 nxn 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 nxn-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.