[BACK]Return to givens_rotations.ads CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / PHC / Ada / Math_Lib / Supports

Annotation of OpenXM_contrib/PHC/Ada/Math_Lib/Supports/givens_rotations.ads, Revision 1.1.1.1

1.1       maekawa     1: with Standard_Floating_Numbers;          use Standard_Floating_Numbers;
                      2: with Standard_Integer_Vectors;
                      3: with Standard_Floating_Vectors;          use Standard_Floating_Vectors;
                      4: with Standard_Floating_Matrices;         use Standard_Floating_Matrices;
                      5:
                      6: package Givens_Rotations is
                      7:
                      8: -- DESCRIPTION :
                      9: --   This package contains operations to construct and perform
                     10: --   Given rotations on vectors and matrices.
                     11: --   The procedures in this package are listed in order like
                     12: --   they have to be applied to write a right hand side vector
                     13: --   as a linear combination of the column vectors of a matrix.
                     14:
                     15:   procedure Givens_Factors ( v : in Vector; i,j : in integer;
                     16:                              cosi,sine : out double_float );
                     17:   -- DESCRIPTION :
                     18:   --   Computes the cosine and sine of the angle to be used in the
                     19:   --   Givens rotation on the vector.
                     20:
                     21:   -- REQUIRED : v(i) /= 0 and v(j) /= 0, with i<j.
                     22:
                     23:   procedure Givens_Factors ( mat : in Matrix; i,j : in integer;
                     24:                              cosi,sine : out double_float );
                     25:   -- DESCRIPTION :
                     26:   --   Computes the cosine and sine of the angle to be used in the
                     27:   --   Givens rotation on the matrix.
                     28:
                     29:   -- REQUIRED : mat(i,i) /= 0 and mat(j,i) /= 0, with i<j.
                     30:
                     31:   procedure Givens_Rotation ( v : in out Vector; i,j : in integer;
                     32:                               cosi,sine : in double_float );
                     33:   -- DESCRIPTION :
                     34:   --   Performs one Givens rotation on the vector
                     35:   --   with given cosine and sine of the angle.
                     36:
                     37:   -- REQUIRED : v(i) /= 0 and v(j) /= 0, with i<j.
                     38:
                     39:   procedure Givens_Rotation ( mat : in out Matrix; lastcol,i,j : in integer;
                     40:                               cosi,sine : in double_float );
                     41:   procedure Givens_Rotation ( mat : in out Matrix; i,j : in integer;
                     42:                               cosi,sine : in double_float );
                     43:
                     44:   -- DESCRIPTION :
                     45:   --   Performs one Givens rotation on the matrix,
                     46:   --   with given cosine and sine of the angle.
                     47:   --   The parameter lastcol is the index of the last column of interest
                     48:   --   in the matrix.
                     49:
                     50:   -- REQUIRED :
                     51:   --   mat(i,i) /= 0 and mat(j,i) /= 0, with i<j.
                     52:   --   It will be assumed that mat is already upper triangular up
                     53:   --   to the ith row and colum, i.e. mat(k,l) = 0, l<i, k>l.
                     54:
                     55:   procedure Givens_Rotation ( v : in out Vector; i,j : in integer );
                     56:
                     57:   -- DESCRIPTION :
                     58:   --   Performs one Givens rotation on the vector v.
                     59:
                     60:   -- REQUIRED : v(i) /= 0 and v(j) /= 0, with i<j.
                     61:
                     62:   procedure Givens_Rotation ( mat : in out Matrix; i,j : in integer );
                     63:   procedure Givens_Rotation ( mat : in out Matrix; lastcol,i,j : in integer );
                     64:
                     65:   -- DESCRIPTION :
                     66:   --   Performs one Givens rotation on the matrix.
                     67:   --   The parameter lastcol is the index of the last column of interest
                     68:   --   in the matrix.
                     69:
                     70:   -- REQUIRED :
                     71:   --   mat(i,i) /= 0 and mat(i,j) /= 0, with i<j.
                     72:   --   It will be assumed that mat is already upper triangular up
                     73:   --   to the ith row and colum, i.e. mat(k,l) = 0, l<i, k>l.
                     74:
                     75:   procedure Upper_Triangulate
                     76:                ( row : in integer; mat : in out Matrix; tol : in double_float;
                     77:                  ipvt : in out Standard_Integer_Vectors.Vector;
                     78:                  pivot : out integer );
                     79:
                     80:   -- DESCRIPTION :
                     81:   --   Makes the matrix upper triangular by updating the current row of
                     82:   --   the matrix.  If pivot = 0 on return, then the matrix is singular.
                     83:
                     84:   -- REQUIRED :
                     85:   --   The matrix is upper triangular up to current row, which means that
                     86:   --   abs(max(i,i)) > tol, for i in mat'first(1)..row-1.
                     87:
                     88:   procedure Upper_Triangulate ( mat : in out Matrix; tol : in double_float );
                     89:   procedure Upper_Triangulate ( mat : in out Matrix; tol : in double_float;
                     90:                                 ipvt : out Standard_Integer_Vectors.Vector );
                     91:   -- DESCRIPTION :
                     92:   --   Makes the matrix upper triangular by means of Givens rotations.
                     93:   --   The parameter tol is used to determine whether an element is zero.
                     94:   --   Column interchangements are performed when necessary.
                     95:   --   The pivoting information will be returned in the vector ipvt.
                     96:   --   Stops when a zero row is encountered.
                     97:
                     98:   -- REQUIRED : mat'first(1) = mat'first(2).
                     99:
                    100:   procedure Upper_Triangulate ( mat : in out Matrix; rhs : in out Vector;
                    101:                                 tol : in double_float );
                    102:   procedure Upper_Triangulate ( mat : in out Matrix; rhs : in out Vector;
                    103:                                 tol : in double_float;
                    104:                                 ipvt : out Standard_Integer_Vectors.Vector );
                    105:   -- DESCRIPTION :
                    106:   --   Makes the matrix upper triangular and
                    107:   --   performs all Givens rotations as well on the right hand side vector.
                    108:   --   The parameter tol is used to determine whether an element is zero.
                    109:   --   Column interchangements are performed when necessary.
                    110:   --   The pivoting information will be returned in the vector ipvt.
                    111:   --   Stops when a zero row is encountered.
                    112:
                    113:   -- REQUIRED : mat'first(1) = mat(first(2).
                    114:
                    115:   procedure Solve ( mat : in Matrix; rhs : in Vector; tol : in double_float;
                    116:                     x : out Vector );
                    117:
                    118:   -- DESCRIPTION :
                    119:   --   Solves the system defined by mat*x = rhs.
                    120:   --   In case rank(mat) < mat'length(1), then only
                    121:   --   x(mat'first(1)..mat'first(1)+rank(mat)-1) will be meaningful.
                    122:
                    123:   -- REQUIRED :
                    124:   --   mat is upper triangular and mat(i,i) /= 0, for i in 1..Rank(mat).
                    125:
                    126:   -- NOTE :
                    127:   --   Eventually, when column interchangements where applied during
                    128:   --   the triangulation of the matrix, then x is not the decomposition
                    129:   --   of the right hand side vector in terms of the first column of
                    130:   --   the matrix.
                    131:
                    132:   procedure Solve ( mat : in Matrix; rhs : in Vector; tol : in double_float;
                    133:                     rank : in natural; x : out Vector );
                    134:
                    135:   -- DESCRIPTION :
                    136:   --   Solves the system defined by mat*x = rhs.
                    137:   --   Here only the first rows in columns up to the given rank are
                    138:   --   considered.  So only x(mat'first(1)..mat'first(1)+rank-1) will
                    139:   --   be meaningful.
                    140:
                    141:   -- REQUIRED :
                    142:   --   The matrix is upper triangular up to its rank
                    143:   --   and mat(i,i) /= 0, for i in 1..rank.
                    144:
                    145: end Givens_Rotations;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>