with text_io,integer_io; use text_io,integer_io; with Timing_Package; use Timing_Package; with Standard_Complex_Numbers; use Standard_Complex_Numbers; with Standard_Complex_Numbers_io; use Standard_Complex_Numbers_io; with Standard_Complex_Vectors; with Standard_Complex_Vectors_io; use Standard_Complex_Vectors_io; with Standard_Complex_Matrices; with Standard_Complex_Matrices_io; use Standard_Complex_Matrices_io; with Standard_Random_Matrices; use Standard_Random_Matrices; with Standard_Complex_VecMats; use Standard_Complex_VecMats; with Standard_Complex_Poly_Matrices; with Standard_Complex_Poly_Matrices_io; use Standard_Complex_Poly_Matrices_io; with Matrix_Indeterminates; with Standard_Complex_Poly_Systems; use Standard_Complex_Poly_Systems; with Standard_Complex_Poly_SysFun; use Standard_Complex_Poly_SysFun; with Standard_Complex_Jaco_Matrices; use Standard_Complex_Jaco_Matrices; with Brackets; use Brackets; with Symbolic_Minor_Equations; use Symbolic_Minor_Equations; with Determinantal_Systems; use Determinantal_Systems; procedure ts_detsys is -- DESCRIPTION : -- This procedure tests the operations in the package Determinantal_Systems. function Random_Sequence ( n,n1,n2 : natural ) return VecMat is -- DESCRIPTION : -- Returns a sequence of n randomly generated n1-by-n2 matrices. res : VecMat(1..n); begin for i in 1..n loop res(i) := new Standard_Complex_Matrices.Matrix'(Random_Matrix(n1,n2)); end loop; return res; end Random_Sequence; function Vector_Rep ( mat : Standard_Complex_Matrices.Matrix ) return Standard_Complex_Vectors.Vector is -- DESCRIPTION : -- Returns the elements in the matrix as one long vector. res : Standard_Complex_Vectors.Vector(1..mat'length(1)*mat'length(2)); cnt : natural := 0; begin for i in mat'range(1) loop for j in mat'range(2) loop cnt := cnt+1; res(cnt) := mat(i,j); end loop; end loop; return res; end Vector_Rep; procedure Test_Evaluator ( m,p : in natural ) is -- DESCRIPTION : -- Test the evaluating routine in determinantal systems. n : constant natural := m+p; mp : constant natural := m*p; xmat : constant Standard_Complex_Matrices.Matrix := Random_Matrix(n,p); xvec : constant Standard_Complex_Vectors.Vector := Vector_Rep(xmat); l : constant Standard_Complex_Matrices.Matrix := Random_Matrix(n,m); planes : VecMat(1..mp) := Random_Sequence(mp,n,m); deteva : Standard_Complex_Vectors.Vector(1..mp) := Eval(planes,xmat); detjac : Standard_Complex_Matrices.Matrix(1..mp,1..n*p) := Diff(planes,xmat); top : Bracket(1..p) := (1..p => 1); bottom : Bracket(1..p) := (1..p => n); xpm : Standard_Complex_Poly_Matrices.Matrix(1..n,1..p) := Localization_Pattern(n,top,bottom); sys : Poly_Sys(1..m*p) := Polynomial_Equations(planes,xpm); syseva : Standard_Complex_Vectors.Vector(1..mp) := Eval(sys,xvec); sysjac : Jaco_Mat(1..mp,1..n*p) := Create(sys); jaceva : Standard_Complex_Matrices.Matrix(1..mp,1..n*p) := Eval(sysjac,xvec); nb : natural; timer : Timing_Widget; begin Matrix_Indeterminates.Initialize_Symbols(n,p); put_line("the matrix of indeterminates : "); put(xpm); put("Intersecting random "); put(p,1); put("-plane with "); put(m*p,1); put(" random "); put(m,1); put_line("-planes."); put_line("Determinantal Evaluation : "); put_line(deteva); new_line; put_line("Polynomial Evaluation : "); put_line(syseva); new_line; put_line("Determinantal Differentation : "); put(detjac,2); new_line; put_line("Polynomial Differentation : "); put(jaceva,2); new_line; put("Give number of evaluations : "); get(nb); tstart(timer); for i in 1..nb loop deteva := Eval(planes,xmat); detjac := Diff(planes,xmat); end loop; tstop(timer); print_times(Standard_Output,timer,"determinantal evaluations"); tstart(timer); for i in 1..nb loop syseva := Eval(sys,xvec); jaceva := Eval(sysjac,xvec); end loop; tstop(timer); print_times(Standard_Output,timer,"polynomial evaluations"); end Test_Evaluator; procedure Main is m,p : natural; begin put("Give m : "); get(m); put("Give p : "); get(p); Test_Evaluator(m,p); end Main; begin new_line; put_line("Polynomial systems generated from determinantal expansions."); new_line; Main; end ts_detsys;