dpttrf

Compute the L * D * L^T factorization of a real symmetric positive definite tridiagonal matrix A.

Usage

var dpttrf = require( '@stdlib/lapack/base/dpttrf' );

dpttrf( N, D, E )

Computes the L * D * L^T factorization of a real symmetric positive definite tridiagonal matrix A.

var Float64Array = require( '@stdlib/array/float64' );

var D = new Float64Array( [ 4.0, 5.0, 6.0 ] );
var E = new Float64Array( [ 1.0, 2.0 ] );

dpttrf( 3, D, E );
// D => <Float64Array>[ 4, 4.75, ~5.15789 ]
// E => <Float64Array>[ 0.25, ~0.4210 ]

The function has the following parameters:

  • N: order of matrix A.
  • D: the N diagonal elements of A as a Float64Array.
  • E: the N-1 subdiagonal elements of A as a Float64Array.

Note that indexing is relative to the first index. To introduce an offset, use typed array views.

var Float64Array = require( '@stdlib/array/float64' );

// Initial arrays...
var D0 = new Float64Array( [ 0.0, 4.0, 5.0, 6.0 ] );
var E0 = new Float64Array( [ 0.0, 1.0, 2.0 ] );

// Create offset views...
var D1 = new Float64Array( D0.buffer, D0.BYTES_PER_ELEMENT*1 ); // start at 2nd element
var E1 = new Float64Array( E0.buffer, E0.BYTES_PER_ELEMENT*1 ); // start at 2nd element

dpttrf( 3, D1, E1 );
// D0 => <Float64Array>[ 0.0, 4.0, 4.75, ~5.15789 ]
// E0 => <Float64Array>[ 0.0, 0.25, ~0.4210 ]

dpttrf.ndarray( N, D, strideD, offsetD, E, strideE, offsetE )

Computes the L * D * L^T factorization of a real symmetric positive definite tridiagonal matrix A using alternative indexing semantics.

var Float64Array = require( '@stdlib/array/float64' );

var D = new Float64Array( [ 4.0, 5.0, 6.0 ] );
var E = new Float64Array( [ 1.0, 2.0 ] );

dpttrf.ndarray( 3, D, 1, 0, E, 1, 0 );
// D => <Float64Array>[ 4, 4.75, ~5.15789 ]
// E => <Float64Array>[ 0.25, ~0.4210 ]

The function has the following additional parameters:

  • strideD: stride length for D.
  • offsetD: starting index for D.
  • strideE: stride length for E.
  • offsetE: starting index for E.

While typed array views mandate a view offset based on the underlying buffer, the offset parameters support indexing semantics based on starting indices. For example,

var Float64Array = require( '@stdlib/array/float64' );

var D = new Float64Array( [ 0.0, 4.0, 5.0, 6.0 ] );
var E = new Float64Array( [ 0.0, 1.0, 2.0 ] );

dpttrf.ndarray( 3, D, 1, 1, E, 1, 1 );
// D => <Float64Array>[ 0.0, 4.0, 4.75, ~5.15789 ]
// E => <Float64Array>[ 0.0, 0.25, ~0.4210 ]

Notes

  • Both functions mutate the input arrays D and E.

  • Both functions return a status code indicating success or failure. A status code indicates the following conditions:

    • 0: factorization was successful.
    • <0: the k-th argument had an illegal value, where -k equals the status code value.
    • 0 < k < N: the leading principal minor of order k is not positive and factorization could not be completed, where k equals the status code value.
    • N: the leading principal minor of order N is not positive, and factorization was completed.
  • dpttrf() corresponds to the LAPACK routine dpttrf.

Examples

var discreteUniform = require( '@stdlib/random/array/discrete-uniform' );
var dpttrf = require( '@stdlib/lapack/base/dpttrf' );

var opts = {
    'dtype': 'float64'
};
var D = discreteUniform( 5, 1, 5, opts );
console.log( D );

var E = discreteUniform( D.length-1, 1, 5, opts );
console.log( E );

// Perform the `L * D * L^T` factorization:
var info = dpttrf( D.length, D, E );
console.log( D );
console.log( E );
console.log( info );

C APIs

Usage

TODO

TODO

TODO.

TODO

TODO

TODO

Examples

TODO
Did you find this page helpful?