[BACK]Return to standard_matrix_inversion.adb CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / PHC / Ada / Schubert

Annotation of OpenXM_contrib/PHC/Ada/Schubert/standard_matrix_inversion.adb, Revision 1.1

1.1     ! maekawa     1: with Standard_Floating_Numbers;          use Standard_Floating_Numbers;
        !             2: with Standard_Complex_Numbers;           use Standard_Complex_Numbers;
        !             3: with Standard_Natural_Vectors;
        !             4: with Standard_Floating_Vectors;
        !             5: with Standard_Complex_Vectors;
        !             6: with Standard_Floating_Linear_Solvers;   use Standard_Floating_Linear_Solvers;
        !             7: with Standard_Complex_Linear_Solvers;    use Standard_Complex_Linear_Solvers;
        !             8:
        !             9: package body Standard_Matrix_Inversion is
        !            10:
        !            11: -- ALGORITHM :
        !            12: --   Solves repeatedly A*x = b, with b the i-th standard basis vector.
        !            13:
        !            14:   function Inverse ( m : Standard_Floating_Matrices.Matrix )
        !            15:                    return Standard_Floating_Matrices.Matrix is
        !            16:
        !            17:     n : constant natural := m'last(1);
        !            18:     wrk : Standard_Floating_Matrices.Matrix(m'range(1),m'range(2)) := m;
        !            19:     res : Standard_Floating_Matrices.Matrix(m'range(1),m'range(2));
        !            20:     piv : Standard_Natural_Vectors.Vector(m'range(1));
        !            21:     rhs : Standard_Floating_Vectors.Vector(m'range(1));
        !            22:     inf : natural;
        !            23:
        !            24:   begin
        !            25:     for i in piv'range loop
        !            26:       piv(i) := i;
        !            27:     end loop;
        !            28:     lufac(wrk,n,piv,inf);
        !            29:     if inf = 0
        !            30:      then for j in m'range(2) loop
        !            31:             rhs := (rhs'range => 0.0);
        !            32:             rhs(j) := 1.0;
        !            33:             lusolve(wrk,n,piv,rhs);
        !            34:             for i in m'range(1) loop
        !            35:               res(i,j) := rhs(i);
        !            36:             end loop;
        !            37:           end loop;
        !            38:     end if;
        !            39:     return res;
        !            40:   end Inverse;
        !            41:
        !            42:   function Inverse ( m : Standard_Complex_Matrices.Matrix )
        !            43:                    return Standard_Complex_Matrices.Matrix is
        !            44:
        !            45:     n : constant natural := m'last(1);
        !            46:     wrk : Standard_Complex_Matrices.Matrix(m'range(1),m'range(2)) := m;
        !            47:     res : Standard_Complex_Matrices.Matrix(m'range(1),m'range(2));
        !            48:     piv : Standard_Natural_Vectors.Vector(m'range(1));
        !            49:     rhs : Standard_Complex_Vectors.Vector(m'range(1));
        !            50:     inf : natural;
        !            51:
        !            52:   begin
        !            53:     for i in piv'range loop
        !            54:       piv(i) := i;
        !            55:     end loop;
        !            56:     lufac(wrk,n,piv,inf);
        !            57:     if inf = 0
        !            58:      then for j in m'range(2) loop
        !            59:             rhs := (rhs'range => Create(0.0));
        !            60:             rhs(j) := Create(1.0);
        !            61:             lusolve(wrk,n,piv,rhs);
        !            62:             for i in m'range(1) loop
        !            63:               res(i,j) := rhs(i);
        !            64:             end loop;
        !            65:           end loop;
        !            66:     end if;
        !            67:     return res;
        !            68:   end Inverse;
        !            69:
        !            70: end Standard_Matrix_Inversion;

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