Chapter 12: Utilities

generate_test_coordinate

Generates test matrices of class D(n, c) and E(n, c). Returns in either coordinate format.

Synopsis

#include <imsl.h>

Imsl_f_sparse_elem *imsl_f_generate_test_coordinate (int n, int c, int *nz, ..., 0)

The function imsl_d_generate_test_coordinate is the double precision analogue.

Required Arguments

int n   (Input)
Number of rows in the matrix.

int c   (Input)
Parameter used to alter structure.

int *nz   (Output)
Length of the return vector.

Return Value

A pointer to a vector of length nz of type Imsl_f_sparse_elem. To release this space, use free. If no test was generated, then NULL is returned.

Synopsis with Optional Arguments

#include <imsl.h>

void *imsl_f_generate_test_coordinate (int n, int c, int *nz,
IMSL_D_MATRIX,
IMSL_SYMMETRIC_STORAGE,
0)

Optional Arguments

IMSL_D_MATRIX
Return a matrix of class D(n, c).
Default: Return a matrix of class E(n, c).

IMSL_SYMMETRIC_STORAGE,
For coordinate representation, return only values for the diagonal and lower triangle. This option is not allowed if IMSL_D_MATRIX is specified.

Description

We use the same nomenclature as Østerby and Zlatev (1982).Test matrices of class
E(n, c), to which we will generally refer to as E-matrices, are symmetric, positive definite matrices of order n with 4 in the diagonal and -1 in the superdiagonal and subdiagonal. In addition there are two bands with -1 at a distance c from the diagonal. More precisely

ai,i = 4

0 £ i < n

ai,i+1 = -1

0 £ i < n - 1

ai+1,1 = -1

0 £ i < n - 1

ai,i+c = -1

0 £ i < n - c

ai+c,i = -1

0 £ i < n - c

for any n ³ 3 and 2 £ c £ n - 1.

E-matrices are similar to those obtained from the five-point formula in the discretization of elliptic partial differential equations.

Test matrices of class D(n, c) are square matrices of order n with a full diagonal, three bands at a distance c above the diagonal and reappearing cyclically under the diagonal, and a 10 ´ 10 triangle of elements in the upper right corner. More precisely:

 

ai,i = 1

0 £ i < n

ai,i+c = i + 2

0 £ i < n - c

ai,i-n+ci + 2

n - c £ i < n

ai,i+c+1 = -(i + 1)

0 £ i < n - c - 1

ai,i-n+c+1 = -(i + 1)

n - c - 1 £ i < n

ai,i+c+2 = 16

0 £ i < n - c - 2

ai,i-n+c+2 = 16

n - c - 2 £ i < n

ai,n-11+i+j = 100j

1 £ i< 11 - j,      0 £ j < 10

for any n ³ 14 and 1 £ c £ n - 13.

We now show the sparsity pattern of D(20, 5)

x

 

 

 

 

x

x

x

 

 

x

x

x

x

x

x

x

x

x

x

 

x

 

 

 

 

x

x

x

 

 

x

x

x

x

x

x

x

x

x

 

 

x

 

 

 

 

x

x

x

 

 

x

x

x

x

x

x

x

x

 

 

 

x

 

 

 

 

x

x

x

 

 

x

x

x

x

x

x

x

 

 

 

 

x

 

 

 

 

x

x

x

 

 

x

x

x

x

x

x

 

 

 

 

 

x

 

 

 

 

x

x

x

 

 

x

x

x

x

x

 

 

 

 

 

 

x

 

 

 

 

x

x

x

 

 

x

x

x

x

 

 

 

 

 

 

 

x

 

 

 

 

x

x

x

 

 

x

x

x

 

 

 

 

 

 

 

 

x

 

 

 

 

x

x

x

 

 

x

x

 

 

 

 

 

 

 

 

 

x

 

 

 

 

x

x

x

 

 

x

 

 

 

 

 

 

 

 

 

 

x

 

 

 

 

x

x

x

 

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

 

 

x

x

x

 

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

 

 

x

x

x

x

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

 

 

x

x

x

x

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

 

 

x

x

x

x

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

 

 

 

x

x

x

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

 

 

 

x

x

x

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

 

 

 

x

x

x

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

 

 

 

x

x

x

 

 

 

 

 

 

 

 

 

 

 

 

x

By default imsl_f_generate_test_coordinate returns an E-matrix in coordinate repre­sentation. By specifying the IMSL_SYMMETRIC_STORAGE option, only the diagonal and lower triangle are returned. The scalar nz will contain the number of nonzeros in this representation.

The option IMSL_D_MATRIX will return a matrix of class D(n, c). Since D-matrices are not sym­metric, the IMSL_SYMMETRIC_STORAGE option is not allowed.

Examples

Example 1

This example generates the matrix

and prints the result.

#include "imsl.h"


main()

{

        int i;

        int n = 5;

        int c = 3;

        int nz;

        Imsl_f_sparse_elem *a;


        a = imsl_f_generate_test_coordinate (n, c, &nz, 0);


        printf ("row    col    val\n");

        for (i=0; i<nz; i++)

                printf (" %d      %d   %5.1f\n",

                        a[i].row, a[i].col, a[i].val);

}

Output

row    col    val

 0      0     4.0

 1      1     4.0

 2      2     4.0

 3      3     4.0

 4      4     4.0

 1      0    -1.0

 2      1    -1.0

 3      2    -1.0

 4      3    -1.0

 0      1    -1.0

 1      2    -1.0

 2      3    -1.0

 3      4    -1.0

 3      0    -1.0

 4      1    -1.0

 0      3    -1.0

 1      4    -1.0

Example 2

In this example, the matrix E(5, 3) is returned in symmetric storage and printed.

#include <imsl.h>


main()

{

        int i;

        int n = 5;

        int c = 3;

        int nz;

        Imsl_f_sparse_elem *a;


        a = imsl_f_generate_test_coordinate (n, c, &nz,

                IMSL_SYMMETRIC_STORAGE,

                0);


        printf ("row    col    val\n");

        for (i=0; i<nz; i++)

                printf (" %d      %d   %5.1f\n",

                        a[i].row, a[i].col, a[i].val);

}

Output

row    col    val

 0      0     4.0

 1      1     4.0

 2      2     4.0

 3      3     4.0

 4      4     4.0

 1      0    -1.0

 2      1    -1.0

 3      2    -1.0

 4      3    -1.0

 3      0    -1.0

 4      1    -1.0


Visual Numerics, Inc.
Visual Numerics - Developers of IMSL and PV-WAVE
http://www.vni.com/
PHONE: 713.784.3131
FAX:713.781.9260