Annotation of OpenXM_contrib/PHC/Ada/Schubert/evaluated_minors.adb, Revision 1.1
1.1 ! maekawa 1: with Standard_Natural_Vectors; use Standard_Natural_Vectors;
! 2: with Standard_Floating_Linear_Solvers; use Standard_Floating_Linear_Solvers;
! 3: with Standard_Complex_Linear_Solvers; use Standard_Complex_Linear_Solvers;
! 4:
! 5: package body Evaluated_Minors is
! 6:
! 7: function Determinant ( m : Standard_Floating_Matrices.Matrix )
! 8: return double_float is
! 9:
! 10: res : double_float;
! 11: wrk : Standard_Floating_Matrices.Matrix(m'range(1),m'range(2));
! 12: piv : Standard_Natural_Vectors.Vector(m'range(1));
! 13: inf : natural;
! 14:
! 15: begin
! 16: for i in m'range(1) loop
! 17: piv(i) := i;
! 18: for j in m'range(2) loop
! 19: wrk(i,j) := m(i,j);
! 20: end loop;
! 21: end loop;
! 22: lufac(wrk,m'last(1),piv,inf);
! 23: if inf /= 0
! 24: then res := 0.0;
! 25: else res := 1.0;
! 26: for i in m'range(1) loop
! 27: res := res*wrk(i,i);
! 28: end loop;
! 29: for i in piv'range loop
! 30: if piv(i) > i
! 31: then res := -res;
! 32: end if;
! 33: end loop;
! 34: end if;
! 35: return res;
! 36: end Determinant;
! 37:
! 38: function Determinant ( m : Standard_Floating_Matrices.Matrix; b : Bracket )
! 39: return double_float is
! 40:
! 41: res : double_float;
! 42: sqm : Standard_Floating_Matrices.Matrix(b'range,b'range);
! 43: piv : Standard_Natural_Vectors.Vector(b'range);
! 44: inf : natural;
! 45:
! 46: begin
! 47: for i in b'range loop
! 48: piv(i) := i;
! 49: for j in b'range loop
! 50: sqm(i,j) := m(b(i),j);
! 51: end loop;
! 52: end loop;
! 53: lufac(sqm,b'last,piv,inf);
! 54: if inf /= 0
! 55: then res := 0.0;
! 56: else res := 1.0;
! 57: for i in b'range loop
! 58: res := res*sqm(i,i);
! 59: end loop;
! 60: for i in piv'range loop
! 61: if piv(i) > i
! 62: then res := -res;
! 63: end if;
! 64: end loop;
! 65: end if;
! 66: return res;
! 67: end Determinant;
! 68:
! 69: function Determinant ( m : Standard_Complex_Matrices.Matrix )
! 70: return Complex_Number is
! 71:
! 72: res : Complex_Number;
! 73: wrk : Standard_Complex_Matrices.Matrix(m'range(1),m'range(2));
! 74: piv : Standard_Natural_Vectors.Vector(m'range(1));
! 75: inf : natural;
! 76:
! 77: begin
! 78: for i in m'range(1) loop
! 79: piv(i) := i;
! 80: for j in m'range(2) loop
! 81: wrk(i,j) := m(i,j);
! 82: end loop;
! 83: end loop;
! 84: lufac(wrk,wrk'last(1),piv,inf);
! 85: if inf /= 0
! 86: then res := Create(0.0);
! 87: else res := Create(1.0);
! 88: for i in wrk'range(1) loop
! 89: res := res*wrk(i,i);
! 90: end loop;
! 91: for i in piv'range loop
! 92: if piv(i) > i
! 93: then res := -res;
! 94: end if;
! 95: end loop;
! 96: end if;
! 97: return res;
! 98: end Determinant;
! 99:
! 100: function Determinant ( m : Standard_Complex_Matrices.Matrix; b : Bracket )
! 101: return Complex_Number is
! 102:
! 103: res : Complex_Number;
! 104: sqm : Standard_Complex_Matrices.Matrix(b'range,b'range);
! 105: piv : Standard_Natural_Vectors.Vector(b'range);
! 106: inf : natural;
! 107:
! 108: begin
! 109: for i in b'range loop
! 110: piv(i) := i;
! 111: for j in b'range loop
! 112: sqm(i,j) := m(b(i),j);
! 113: end loop;
! 114: end loop;
! 115: lufac(sqm,b'last,piv,inf);
! 116: if inf /= 0
! 117: then res := Create(0.0);
! 118: else res := Create(1.0);
! 119: for i in sqm'range(1) loop
! 120: res := res*sqm(i,i);
! 121: end loop;
! 122: for i in piv'range loop
! 123: if piv(i) > i
! 124: then res := -res;
! 125: end if;
! 126: end loop;
! 127: end if;
! 128: return res;
! 129: end Determinant;
! 130:
! 131: end Evaluated_Minors;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>