0031682: Visualization - Prs3d_ShadingAspect::SetTransparency() has no effect with...
[occt.git] / src / math / math_GaussLeastSquare.cxx
CommitLineData
b311480e 1// Copyright (c) 1997-1999 Matra Datavision
973c2be1 2// Copyright (c) 1999-2014 OPEN CASCADE SAS
b311480e 3//
973c2be1 4// This file is part of Open CASCADE Technology software library.
b311480e 5//
d5f74e42 6// This library is free software; you can redistribute it and/or modify it under
7// the terms of the GNU Lesser General Public License version 2.1 as published
973c2be1 8// by the Free Software Foundation, with special exception defined in the file
9// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
10// distribution for complete text of the license and disclaimer of any warranty.
b311480e 11//
973c2be1 12// Alternatively, this file may be used under the terms of Open CASCADE
13// commercial license or contractual agreement.
b311480e 14
0797d9d3 15//#ifndef OCCT_DEBUG
7fd59977 16#define No_Standard_RangeError
17#define No_Standard_OutOfRange
18#define No_Standard_DimensionError
42cf5bc1 19
7fd59977 20//#endif
21
42cf5bc1 22#include <math_GaussLeastSquare.hxx>
23#include <math_Matrix.hxx>
7fd59977 24#include <math_Recipes.hxx>
7fd59977 25#include <Standard_DimensionError.hxx>
42cf5bc1 26#include <StdFail_NotDone.hxx>
7fd59977 27
28math_GaussLeastSquare::math_GaussLeastSquare (const math_Matrix& A,
29 const Standard_Real MinPivot) :
30 LU(1, A.ColNumber(),
31 1, A.ColNumber()),
32 A2(1, A.ColNumber(),
33 1, A.RowNumber()),
34 Index(1, A.ColNumber()) {
35 A2 = A.Transposed();
36 LU.Multiply(A2, A);
37
38 Standard_Integer Error = LU_Decompose(LU, Index, D, MinPivot);
39 Done = (!Error) ? Standard_True : Standard_False;
40
41}
42
43void math_GaussLeastSquare::Solve(const math_Vector& B, math_Vector& X) const{
44 StdFail_NotDone_Raise_if(!Done, " ");
45 Standard_DimensionError_Raise_if((B.Length() != A2.ColNumber()) ||
46 (X.Length() != A2.RowNumber()), " ");
47
48 X.Multiply(A2, B);
49
50 LU_Solve(LU, Index, X);
51
52 return;
53}
54
55
56void math_GaussLeastSquare::Dump(Standard_OStream& o) const {
57
58 o <<"math_GaussLeastSquare ";
59 if (Done) {
60 o << " Status = Done \n";
61 }
62 else {
63 o << "Status = not Done \n";
64 }
65}
66
67