-- generic_complex_linear_equations.ads -- -- -- package YOUR_NAME is new GENERIC_COMPLEX_LINEAR_EQUATIONS -- ( REAL, ) ; -- -- all the rest are defaults with Ada.Numerics.Generic_Complex_Types; with Array_Exceptions; with Integer_Arrays; use Integer_Arrays; with Generic_Real_Arrays; with Generic_Complex_Arrays; generic type REAL is digits <> ; with package Real_Arrays is new Generic_Real_Arrays(REAL); with package Complex_Types is new Ada.Numerics.Generic_Complex_Types(REAL); with package Complex_Arrays is new Generic_Complex_Arrays(REAL, Complex_Types, Real_Arrays); package GENERIC_COMPLEX_LINEAR_EQUATIONS is use Real_Arrays; use Complex_Types; use Complex_Arrays; function LINEAR_EQUATIONS ( A : COMPLEX_MATRIX ; Y : COMPLEX_VECTOR ) return COMPLEX_VECTOR ; function CROUT_SOLUTION ( A : COMPLEX_MATRIX ; Y : COMPLEX_VECTOR ) return COMPLEX_VECTOR ; function DETERMINANT ( A : COMPLEX_MATRIX ) return COMPLEX ; function INVERSE ( A : COMPLEX_MATRIX ) return COMPLEX_MATRIX ; ARRAY_INDEX_ERROR : exception renames ARRAY_EXCEPTIONS.ARRAY_INDEX_ERROR; -- -- function LINEAR_EQUATIONS ( A : COMPLEX_MATRIX ; -- Y : COMPLEX_VECTOR ) return COMPLEX_VECTOR ; -- -- function CROUT_SOLUTION ( A : COMPLEX_MATRIX ; -- Y : COMPLEX_VECTOR ) return COMPLEX_VECTOR ; -- -- PURPOSE : SOLVE THE LINEAR SYSTEM OF EQUATIONS WITH COMPLEX -- COEFFICIENTS [A] * |X| = |Y| -- -- INPUT : THE COMPLEX MATRIX A -- THE COMPLEX VECTOR Y -- -- OUTPUT : THE COMPLEX VECTOR X -- -- METHOD1 : GUASS-JORDAN ELIMINATION USING MAXIMUM ELEMENT -- FOR PIVOT. -- METHOD2 : CROUT REDUCTION USING MAXIMIM ELEMENT FOR -- DIAGONAL -- -- USAGE : X := LINEAR_EQUATIONS ( A , Y ) ; -- X := CROUT_SOLUTION ( A , Y ) ; -- -- EXCEPTION : ARRAY_INDEX_ERROR RASIED IF RESULT CAN NOT BE COMPUTED -- -- function DETERMINANT ( A : COMPLEX_MATRIX ) return COMPLEX ; -- -- PURPOSE : COMPUTE THE DETERMINANT OF A COMPLEX MATRIX -- Z := |A| -- -- INPUT : THE COMPLEX MATRIX A ( UNCHANGED ) -- -- OUTPUT : THE COMPLEX NUMBER Z -- -- METHOD : GUASS-JORDAN ELIMINATION USING MAXIMUM ELEMENT -- FOR PIVOT. -- -- USAGE : Z := DETERMINANT ( A ) ; -- -- EXCEPTION : ARRAY_INDEX_ERROR RASIED IF RESULT CAN NOT BE COMPUTED -- -- function INVERSE ( A : COMPLEX_MATRIX ) return COMPLEX_MATRIX ; -- -- PURPOSE : INVERT AN N BY N COMPLEX MATRIX -- -- INPUT : THE COMPLEX MATRIX A ( NOT CHANGED ) -- -- OUTPUT : THE INVERSE OF MATRIX A -- -- METHOD : GUASS-JORDAN ELIMINATION USING MAXIMUM ELEMENT -- FOR PIVOT. -- -- EXCEPTION : ARRAY_INDEX_ERROR RAISED IF INVERSE CAN NOT BE COMPUTED -- -- SAMPLE USE : NEW_MATRIX := INVERSE ( OLD_MATRIX ) ; -- MATRIX := INVERSE ( MATRIX ) * ANOTHER_MATRIX ; -- end GENERIC_COMPLEX_LINEAR_EQUATIONS ;