TSparseMtx.Solve Method

Overload List

#SignatureDescription
1procedure Solve(const B: TMtx; const X: TMtx; MtxType: TMtxType);Direct solve.
2procedure Solve(const B: TVec; const X: TVec; MtxType: TMtxType);Vector version of Solve.

Overload 1: procedure Solve(const B: TMtx; const X: TMtx; MtxType: TMtxType);

Direct solve.

#NameTypeDescription
1BTMtx
2XTMtx
3MtxTypeTMtxType

Result: stored in self (calling object)

Remarks:

Solve the system A*X = B, where A is the calling matrix. The actual system being solved is defined by TSparseMtx.SparseSystem property. A is sparse and unsymmetric. It is based on the Unsymmetric MultiFrontal method, which factorizes PAQ into the product LU, where L and U are lower and upper triangular, respectively, and P are Q are permutation matrices. Both P and Q are chosen to reduce fill-in (new nonzeros in L and U that are not present in A). The permutation P has the dual role of reducing fill-in and maintaining numerical accuracy (via relaxed partial pivoting and row interchanges).

The Solve method uses BLAS level 3 dgeem matrix multiply routine and takes full advantage of CPU specific optimized code and symmetric multiprocessing.

Examples
#include "MtxExpr.hpp"
#include "Sparse.hpp"
#include "MtxVecTee.hpp"

void  __fastcall Example()
{
    sVector x,b;
    TSparseMtx *SparseA = new TSparseMtx();
    try
    {
        // load data
        SparseA->LoadFromMatrixFile("system.mtx");
        b->LoadFromFile("coefficients.Vec");
        // set solution size
        x->Size(b);
        // solve
        SparseA->SparseSolver = ssUmfPack;
        SparseA->Solve(b,x);
        //view solution
        ViewValues(x);
    }
    __finally
    {
        delete SparseA;
    }
}
uses MtxExpr, MtxVecTee, Sparse;

procedure Example;
var x,b: Vector;
    SparseA: TSparseMtx;
begin
    // load data
    SparseA.LoadFromMatrixFile('system.mtx');
    b.LoadFromFile('coefficients.Vec');
    // set solution size
    x.Size(b);
    // solve
    SparseA.SparseSolver := ssUmfPack;
    SparseA.Solve(b,x);
    //view solution
    ViewValues(x);
end;
See Also: TSparseMtx.SparseSolver

Overload 2: procedure Solve(const B: TVec; const X: TVec; MtxType: TMtxType);

Vector version of Solve.

#NameTypeDescription
1BTVec
2XTVec
3MtxTypeTMtxType

Result: stored in self (calling object)