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

Annotation of OpenXM_contrib/PHC/Ada/Schubert/ts_detsys.adb, Revision 1.1.1.1

1.1       maekawa     1: with text_io,integer_io;                 use text_io,integer_io;
                      2: with Timing_Package;                     use Timing_Package;
                      3: with Standard_Complex_Numbers;           use Standard_Complex_Numbers;
                      4: with Standard_Complex_Numbers_io;        use Standard_Complex_Numbers_io;
                      5: with Standard_Complex_Vectors;
                      6: with Standard_Complex_Vectors_io;        use Standard_Complex_Vectors_io;
                      7: with Standard_Complex_Matrices;
                      8: with Standard_Complex_Matrices_io;       use Standard_Complex_Matrices_io;
                      9: with Standard_Random_Matrices;           use Standard_Random_Matrices;
                     10: with Standard_Complex_VecMats;           use Standard_Complex_VecMats;
                     11: with Standard_Complex_Poly_Matrices;
                     12: with Standard_Complex_Poly_Matrices_io;  use Standard_Complex_Poly_Matrices_io;
                     13: with Matrix_Indeterminates;
                     14: with Standard_Complex_Poly_Systems;      use Standard_Complex_Poly_Systems;
                     15: with Standard_Complex_Poly_SysFun;       use Standard_Complex_Poly_SysFun;
                     16: with Standard_Complex_Jaco_Matrices;     use Standard_Complex_Jaco_Matrices;
                     17: with Brackets;                           use Brackets;
                     18: with Symbolic_Minor_Equations;           use Symbolic_Minor_Equations;
                     19: with Determinantal_Systems;              use Determinantal_Systems;
                     20:
                     21: procedure ts_detsys is
                     22:
                     23: -- DESCRIPTION :
                     24: --   This procedure tests the operations in the package Determinantal_Systems.
                     25:
                     26:   function Random_Sequence ( n,n1,n2 : natural ) return VecMat is
                     27:
                     28:   -- DESCRIPTION :
                     29:   --   Returns a sequence of n randomly generated n1-by-n2 matrices.
                     30:
                     31:     res : VecMat(1..n);
                     32:
                     33:   begin
                     34:     for i in 1..n loop
                     35:       res(i) := new Standard_Complex_Matrices.Matrix'(Random_Matrix(n1,n2));
                     36:     end loop;
                     37:     return res;
                     38:   end Random_Sequence;
                     39:
                     40:   function Vector_Rep ( mat : Standard_Complex_Matrices.Matrix )
                     41:                       return Standard_Complex_Vectors.Vector is
                     42:
                     43:   -- DESCRIPTION :
                     44:   --   Returns the elements in the matrix as one long vector.
                     45:
                     46:     res : Standard_Complex_Vectors.Vector(1..mat'length(1)*mat'length(2));
                     47:     cnt : natural := 0;
                     48:
                     49:   begin
                     50:     for i in mat'range(1) loop
                     51:       for j in mat'range(2) loop
                     52:         cnt := cnt+1;
                     53:         res(cnt) := mat(i,j);
                     54:       end loop;
                     55:     end loop;
                     56:     return res;
                     57:   end Vector_Rep;
                     58:
                     59:   procedure Test_Evaluator ( m,p : in natural ) is
                     60:
                     61:   -- DESCRIPTION :
                     62:   --   Test the evaluating routine in determinantal systems.
                     63:
                     64:     n : constant natural := m+p;
                     65:     mp : constant natural := m*p;
                     66:     xmat : constant Standard_Complex_Matrices.Matrix := Random_Matrix(n,p);
                     67:     xvec : constant Standard_Complex_Vectors.Vector := Vector_Rep(xmat);
                     68:     l : constant Standard_Complex_Matrices.Matrix := Random_Matrix(n,m);
                     69:     planes : VecMat(1..mp) := Random_Sequence(mp,n,m);
                     70:     deteva : Standard_Complex_Vectors.Vector(1..mp) := Eval(planes,xmat);
                     71:     detjac : Standard_Complex_Matrices.Matrix(1..mp,1..n*p)
                     72:            := Diff(planes,xmat);
                     73:     top : Bracket(1..p) := (1..p => 1);
                     74:     bottom : Bracket(1..p) := (1..p => n);
                     75:     xpm : Standard_Complex_Poly_Matrices.Matrix(1..n,1..p)
                     76:         := Localization_Pattern(n,top,bottom);
                     77:     sys : Poly_Sys(1..m*p) := Polynomial_Equations(planes,xpm);
                     78:     syseva : Standard_Complex_Vectors.Vector(1..mp) := Eval(sys,xvec);
                     79:     sysjac : Jaco_Mat(1..mp,1..n*p) := Create(sys);
                     80:     jaceva : Standard_Complex_Matrices.Matrix(1..mp,1..n*p)
                     81:            := Eval(sysjac,xvec);
                     82:     nb : natural;
                     83:     timer : Timing_Widget;
                     84:
                     85:   begin
                     86:     Matrix_Indeterminates.Initialize_Symbols(n,p);
                     87:     put_line("the matrix of indeterminates : "); put(xpm);
                     88:     put("Intersecting random "); put(p,1); put("-plane with ");
                     89:     put(m*p,1); put(" random "); put(m,1); put_line("-planes.");
                     90:     put_line("Determinantal Evaluation : "); put_line(deteva); new_line;
                     91:     put_line("Polynomial Evaluation : ");    put_line(syseva); new_line;
                     92:     put_line("Determinantal Differentation : "); put(detjac,2); new_line;
                     93:     put_line("Polynomial Differentation : ");    put(jaceva,2); new_line;
                     94:     put("Give number of evaluations : "); get(nb);
                     95:     tstart(timer);
                     96:     for i in 1..nb loop
                     97:       deteva := Eval(planes,xmat);
                     98:       detjac := Diff(planes,xmat);
                     99:     end loop;
                    100:     tstop(timer);
                    101:     print_times(Standard_Output,timer,"determinantal evaluations");
                    102:     tstart(timer);
                    103:     for i in 1..nb loop
                    104:       syseva := Eval(sys,xvec);
                    105:       jaceva := Eval(sysjac,xvec);
                    106:     end loop;
                    107:     tstop(timer);
                    108:     print_times(Standard_Output,timer,"polynomial evaluations");
                    109:   end Test_Evaluator;
                    110:
                    111:   procedure Main is
                    112:
                    113:     m,p : natural;
                    114:
                    115:   begin
                    116:     put("Give m : "); get(m);
                    117:     put("Give p : "); get(p);
                    118:     Test_Evaluator(m,p);
                    119:   end Main;
                    120:
                    121: begin
                    122:   new_line;
                    123:   put_line("Polynomial systems generated from determinantal expansions.");
                    124:   new_line;
                    125:   Main;
                    126: end ts_detsys;

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