Overload List
| # | Signature | Description |
|---|---|---|
| 1 | procedure Solve(const B: TMtx; const X: TMtx; MtxType: TMtxType); | Direct solve. |
| 2 | procedure 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.
Result: stored in self (calling object)
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.
#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;