Chapter 12: Utilities

matrix_norm_coordinate

Computes various norms of a matrix stored in coordinate format.

Synopsis

#include <imsl.h>

float imsl_f_matrix_norm_coordinate (int m, int n, int nz, Imsl_f_sparse_elem a[], ..., 0)

The type double function is imsl_d_matrix_norm_coordinate.

Required Arguments

int m   (Input)
The number of rows in matrix A.

int n   (Input)
The number of columns in matrix A.

int nz   (Input)
The number of nonzeros in the matrix A.

Imsl_f_sparse_elem a[]   (Input)
Matrix for which the norm will be computed.

Return Value

The requested norm of the input matrix, by default, the Frobenius norm. If the norm cannot be com­puted, NaN is returned.

Synopsis with Optional Arguments

#include <imsl.h>

float imsl_f_matrix_norm_coordinate (int m, int n, int nz, Imsl_f_sparse_elem a[],
IMSL_ONE_NORM,
IMSL_INF_NORM,
IMSL_SYMMETRIC,
0)

Optional Arguments

IMSL_ONE_NORM,
Compute the 1-norm of matrix A.

IMSL_INF_NORM,
Compute the infinity norm of matrix A.

IMSL_SYMMETRIC,
Matrix A is stored in symmetric coordinate format.

Description

By default, imsl_f_matrix_norm_coordinate computes the Frobenius norm

If the option IMSL_ONE_NORM is selected, the 1-norm

is returned. If the option IMSL_INF_NORM is selected, the infinity norm

is returned.

Examples

Example 1

Compute the Frobenius norm, infinity norm, and one norm of matrix A. Matrix A is stored in coor­dinate format.

#include <imsl.h>


void main()

{

        Imsl_f_sparse_elem a[] = {0, 0, 10.0,

                                  1, 1, 10.0,

                                  1, 2, -3.0,

                                  1, 3, -1.0,

                                  2, 2, 15.0,

                                  3, 0, -2.0,

                                  3, 3, 10.0,

                                  3, 4, -1.0,

                                  4, 0, -1.0,

                                  4, 3, -5.0,

                                  4, 4, 1.0,

                                  4, 5, -3.0,

                                  5, 0, -1.0,

                                  5, 1, -2.0,

                                  5, 5, 6.0};

        int                       m = 6, n = 6;

        int                       nz = 15;

        float                     frobenius_norm, inf_norm, one_norm;


        frobenius_norm = imsl_f_matrix_norm_coordinate (m, n, nz, a, 0);


        inf_norm = imsl_f_matrix_norm_coordinate(m, n, nz, a,

                                      IMSL_INF_NORM, 0);


        one_norm = imsl_f_matrix_norm_coordinate(m, n, nz, a,

                                      IMSL_ONE_NORM, 0);


        printf("Frobenius norm = %f\n", frobenius_norm);

        printf("Infinity norm  = %f\n", inf_norm);

        printf("One norm       = %f\n", one_norm);

}

Output

Frobenius norm = 24.839485

Infinity norm  = 15.000000

One norm       = 18.000000

Example 2

Compute the Frobenius norm, infinity norm and one norm of matrix A. Matrix A is stored in sym­metric coordinate format.

#include <imsl.h>


void main()

{

        Imsl_f_sparse_elem a[] = {0, 0, 10.0,

                                  0, 2, -1.0,

                                  0, 5, 5.0,

                                  1, 3, 2.0,

                                  1, 4, 3.0,

                                  2, 2, 3.0,

                                  2, 5, 4.0,

                                  4, 4, -1.0,

                                  4, 5, 4.0};

        int                       m = 6, n = 6;

        int                       nz = 9;

        float                     frobenius_norm, inf_norm, one_norm;


        frobenius_norm = imsl_f_matrix_norm_coordinate (m, n, nz, a,

                                      IMSL_SYMMETRIC, 0);


        inf_norm = imsl_f_matrix_norm_coordinate(m, n, nz, a,

                                      IMSL_INF_NORM,

                                      IMSL_SYMMETRIC, 0);


        one_norm = imsl_f_matrix_norm_coordinate(m, n, nz, a,

                                       IMSL_ONE_NORM,

                                       IMSL_SYMMETRIC, 0);


        printf("Frobenius norm = %f\n", frobenius_norm);

        printf("Infinity norm  = %f\n", inf_norm);

        printf("One norm       = %f\n", one_norm);

}

Output

Frobenius norm = 15.874508

Infinity norm  = 16.000000

One norm       = 16.000000


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