blob: 282aa5ffced1fbadec359bf81170018afc90d896 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
-- File: Gauss.cdl
-- Created: Mon May 13 15:45:42 1991
-- Author: Laurent PAINNOT
-- <lpa@topsn3>
---Copyright: Matra Datavision 1991, 1992
class Gauss from math
---Purpose:
-- This class implements the Gauss LU decomposition (Crout algorithm)
-- with partial pivoting (rows interchange) of a square matrix and
-- the different possible derived calculation :
-- - solution of a set of linear equations.
-- - inverse of a matrix.
-- - determinant of a matrix.
uses Vector from math,
IntegerVector from math,
Matrix from math,
OStream from Standard
raises NotSquare from math,
DimensionError from Standard,
NotDone from StdFail
is
Create(A: Matrix; MinPivot: Real = 1.0e-20)
---Purpose:
-- Given an input n X n matrix A this constructor performs its LU
-- decomposition with partial pivoting (interchange of rows).
-- This LU decomposition is stored internally and may be used to
-- do subsequent calculation.
-- If the largest pivot found is less than MinPivot the matrix A is
-- considered as singular.
-- Exception NotSquare is raised if A is not a square matrix.
returns Gauss
raises NotSquare;
IsDone(me)
---Purpose: Returns true if the computations are successful, otherwise returns false
---C++: inline
returns Boolean
is static;
Solve(me; B: Vector; X : out Vector)
---Purpose:
-- Given the input Vector B this routine returns the solution X of the set
-- of linear equations A . X = B.
-- Exception NotDone is raised if the decomposition of A was not done
-- successfully.
-- Exception DimensionError is raised if the range of B is not
-- equal to the number of rows of A.
raises NotDone,
DimensionError
is static;
Solve(me; B: in out Vector)
---Purpose:
-- Given the input Vector B this routine solves the set of linear
-- equations A . X = B. B is replaced by the vector solution X.
-- Exception NotDone is raised if the decomposition of A was not done
-- successfully.
-- Exception DimensionError is raised if the range of B is not
-- equal to the number of rows of A.
raises DimensionError
is static;
Determinant(me)
---Purpose:
-- This routine returns the value of the determinant of the previously LU
-- decomposed matrix A.
-- Exception NotDone may be raised if the decomposition of A was not done
-- successfully, zero is returned if the matrix A was considered as singular.
returns Real
raises NotDone
is static;
Invert(me; Inv: out Matrix)
---Purpose:
-- This routine outputs Inv the inverse of the previously LU decomposed
-- matrix A.
-- Exception DimensionError is raised if the ranges of B are not
-- equal to the ranges of A.
raises DimensionError
is static;
Dump(me; o: in out OStream)
---Purpose: Prints on the stream o information on the current state
-- of the object.
-- Is used to redefine the operator <<.
is static;
fields
Done: Boolean;
Singular: Boolean is protected;
LU: Matrix is protected;
Index: IntegerVector is protected;
D: Real is protected;
end Gauss;
|