Annotation of OpenXM_contrib/PHC/Ada/Math_Lib/Matrices/standard_complex_linear_solvers.ads, Revision 1.1.1.1
1.1 maekawa 1: with Standard_Natural_Vectors;
2: with Standard_Floating_Numbers; use Standard_Floating_Numbers;
3: with Standard_Complex_Vectors; use Standard_Complex_Vectors;
4: with Standard_Complex_Matrices; use Standard_Complex_Matrices;
5:
6: package Standard_Complex_Linear_Solvers is
7:
8: -- DESCRIPTION :
9: -- This package offers a few routines to solve linear systems of equations.
10: -- The code for lufac, lufco and lusolve is a literal translation from the
11: -- f77-linpack code.
12:
13: procedure Scale ( a : in out Matrix; b : in out Vector );
14:
15: -- DESCRIPTION :
16: -- Divides the ith equation in the system a*x = b by the largest
17: -- element on the ith row of a, for i in a'range(1).
18:
19: -- REQUIRED : a'range(1) = b'range(1).
20:
21: procedure lufac ( a : in out Matrix; n : in integer;
22: ipvt : out Standard_Natural_Vectors.Vector;
23: info : out natural );
24:
25: -- DESCRIPTION :
26: -- lufac factors a complex matrix by gaussian elimination
27:
28: -- lufac is usually called by lufco, but it can be called
29: -- directly with a saving of time if rcond is not needed.
30: -- (time for lufco) = (1 + 9/n)*(time for lufac).
31:
32: -- ON ENTRY :
33: -- a complex matrix(1..n,1..n) to be factored
34: -- n the dimension of the matrix a
35:
36: -- ON RETURN :
37: -- a an upper triangular matrix and the multipliers
38: -- which were used to obtain it.
39: -- The factorization can be written a = l*u where
40: -- l is a product of permutation and unit lower
41: -- triangular matrices and u is upper triangular.
42: -- ipvt an integer vector of pivot indices
43: -- info = 0 normal value
44: -- = k if u(k,k) = 0.0.
45: -- This is not an error for this routine,
46: -- but it does indicate that lusolve will
47: -- divide by zero if called. Use rcond in
48: -- lufco for a reliable indication of singularity.
49:
50: procedure lufco ( a : in out Matrix; n : in integer;
51: ipvt : out Standard_Natural_Vectors.Vector;
52: rcond : out double_float );
53:
54: -- DESCRIPTION :
55: -- lufco factors a complex matrix by gaussian elimination
56: -- and estimates the condition of the matrix.
57:
58: -- If rcond is not needed, lufac is slightly faster.
59: -- To solve a*x = b, follow lufco by lusolve.
60:
61: -- ON ENTRY :
62: -- a complex matrix(1..n,1..n) to be factored
63: -- n the dimension of the matrix a
64:
65: -- ON RETURN :
66: -- a an upper triangular matrix and the multipliers
67: -- which are used to obtain it.
68: -- The factorization can be written a = l*u, where
69: -- l is a product of permutation and unit lower triangular
70: -- matrices and u is upper triangular.
71: -- ipvt an integer vector of pivot indices
72: -- rcond an estimate of the reciprocal condition of a.
73: -- For the system a*x = b, relative perturbations
74: -- in a and b of size epsilon may cause relative
75: -- perturbations in x of size epsilon/rcond.
76: -- If rcond is so small that the logical expression
77: -- 1.0 + rcond = 1.0
78: -- is true, than a may be singular to working precision.
79: -- In particular, rcond is zero if exact singularity is
80: -- detected or the estimate underflows.
81:
82: procedure lusolve ( a : in Matrix; n : in integer;
83: ipvt : in Standard_Natural_Vectors.Vector;
84: b : in out Vector );
85:
86: -- DESCRIPTION :
87: -- lusolve solves the complex system a*x = b using the factors
88: -- computed by lufac or lufco
89:
90: -- ON ENTRY :
91: -- a a complex matrix(1..n,1..n), the output from
92: -- lufac or lufco
93: -- n the dimension of the matrix a
94: -- ipvt the pivot vector from lufac or lufco
95: -- b the right hand side vector
96:
97: -- ON RETURN :
98: -- b the solution vector x
99:
100: procedure Triangulate ( a : in out Matrix; n,m : in integer );
101:
102: -- DESCRIPTION :
103: -- triangulate makes the n*m complex matrix a triangular using
104: -- Gaussian elimination.
105:
106: -- ON ENTRY :
107: -- a a complex matrix(1..n,1..m)
108: -- n the number of rows of a
109: -- m the number of columns of a
110:
111: -- ON RETURN :
112: -- a the triangulated matrix
113:
114: procedure Diagonalize ( a : in out Matrix; n,m : in integer );
115:
116: -- DESCRIPTION :
117: -- diagonalize makes the n*m complex matrix a diagonal using
118: -- Gauss-Jordan.
119:
120: -- ON ENTRY :
121: -- a a complex matrix(1..n,1..m)
122: -- n the number of rows of a
123: -- m the number of columns of a
124:
125: -- ON RETURN :
126: -- a the diagonalized matrix
127:
128: end Standard_Complex_Linear_Solvers;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>