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

Annotation of OpenXM_contrib/PHC/Ada/Main/phcpack.adb, Revision 1.1.1.1

1.1       maekawa     1: with Standard_Floating_Numbers;          use Standard_Floating_Numbers;
                      2: with Standard_Complex_Vectors;           use Standard_Complex_Vectors;
                      3: with Standard_Complex_Norms_Equals;      use Standard_Complex_Norms_Equals;
                      4: with Standard_Complex_Matrices;          use Standard_Complex_Matrices;
                      5: with Standard_Complex_Poly_Systems_io;   use Standard_Complex_Poly_Systems_io;
                      6: with Standard_Complex_Poly_Randomizers;  use Standard_Complex_Poly_Randomizers;
                      7: with Scaling;                            use Scaling;
                      8: with Reduction_of_Polynomial_Systems;    use Reduction_of_Polynomial_Systems;
                      9: with Homotopy;
                     10: with Total_Degree_Start_Systems;         use Total_Degree_Start_Systems;
                     11: with BKK_Bound_Computations;             use BKK_Bound_Computations;
                     12: with Continuation_Parameters;
                     13: with Increment_and_Fix_Continuation;     use Increment_and_Fix_Continuation;
                     14: with Standard_Root_Refiners;             use Standard_Root_Refiners;
                     15:
                     16: package body PHCPACK is
                     17:
                     18: -- 1. PRE-PROCESSING : SCALING AND REDUCTION
                     19:
                     20:   procedure Equation_Scaling
                     21:                 ( file : in file_type; p : in Poly_Sys; s : out Poly_Sys ) is
                     22:
                     23:     res : Poly_Sys(p'range);
                     24:
                     25:   begin
                     26:     Copy(p,res);
                     27:     Scale(res);
                     28:     put(file,res);
                     29:     s := res;
                     30:   end Equation_Scaling;
                     31:
                     32:   procedure Linear_Reduction
                     33:                 ( file : in file_type; p : in Poly_Sys; r : out Poly_Sys ) is
                     34:
                     35:     res : Poly_Sys(p'range);
                     36:     success,inconsistent,infinite : boolean := false;
                     37:
                     38:   begin
                     39:     Copy(p,res);
                     40:     reduce(res,success,inconsistent,infinite);
                     41:     if success
                     42:      then if inconsistent
                     43:            then put_line(file,"system is inconsistent");
                     44:           end if;
                     45:           if infinite
                     46:            then put_line(file,"system has infinite number of solutions");
                     47:           end if;
                     48:     end if;
                     49:     put(file,res);
                     50:     r := res;
                     51:   end Linear_Reduction;
                     52:
                     53: -- 2. ROOT COUNTING AND CONSTRUCTION OF START SYSTEM
                     54:
                     55:   procedure Total_Degree
                     56:                 ( file : in file_type; p : in Poly_Sys; d : out natural ) is
                     57:   begin
                     58:     d := Total_Degree(p);
                     59:   end Total_Degree;
                     60:
                     61:   procedure Total_Degree
                     62:                 ( file : in file_type; p : in Poly_Sys; d : out natural;
                     63:                   q : out Poly_Sys; qsols : out Solution_List ) is
                     64:
                     65:     qq : Poly_Sys(p'range);
                     66:     qqsols : Solution_List;
                     67:
                     68:   begin
                     69:     d := Total_Degree(p);
                     70:     Start_System(p,qq,qqsols);
                     71:     q := qq; qsols := qqsols;
                     72:   end Total_Degree;
                     73:
                     74:   procedure Implicit_Lifting
                     75:                  ( file : in file_type; p : in Poly_Sys; mv : out natural ) is
                     76:   begin
                     77:     mv := BKK_by_Implicit_Lifting(p);
                     78:   end Implicit_Lifting;
                     79:
                     80:   procedure Implicit_Lifting
                     81:                  ( file : in file_type; p : in Poly_Sys; mv : out natural;
                     82:                    q : out Poly_Sys; qsols : out Solution_List ) is
                     83:
                     84:     qq : Poly_Sys(p'range) := Complex_Randomize1(p);
                     85:     qqsols : Solution_List := Solve_by_Implicit_Lifting(file,qq);
                     86:
                     87:   begin
                     88:     mv := Length_Of(qqsols);
                     89:     Set_Continuation_Parameter(qqsols,Create(0.0));
                     90:     q := qq; qsols := qqsols;
                     91:   end Implicit_Lifting;
                     92:
                     93:   procedure Static_Lifting
                     94:                  ( file : in file_type; p : in Poly_Sys; mv : out natural ) is
                     95:   begin
                     96:     mv := BKK_by_Static_Lifting(file,p);
                     97:   end Static_Lifting;
                     98:
                     99:   procedure Static_Lifting
                    100:                  ( file : in file_type; p : in Poly_Sys; mv : out natural;
                    101:                    q : out Poly_Sys; qsols : out Solution_List ) is
                    102:
                    103:     qq : Poly_Sys(p'range) := Complex_Randomize1(p);
                    104:     qqsols : Solution_List := Solve_by_Static_Lifting(file,qq);
                    105:
                    106:   begin
                    107:     mv := Length_Of(qqsols);
                    108:     Set_Continuation_Parameter(qqsols,Create(0.0));
                    109:     q := qq; qsols := qqsols;
                    110:   end Static_Lifting;
                    111:
                    112: -- 3. POLYNOMIAL CONTINUATION
                    113:
                    114:   procedure Artificial_Parameter_Continuation
                    115:                  ( file : in file_type; p,q : in Poly_Sys;
                    116:                    sols : in out Solution_List;
                    117:                    k : in natural := 2;
                    118:                    a : in Complex_Number := Create(1.0);
                    119:                    target : in Complex_Number := Create(1.0) ) is
                    120:
                    121:     procedure Cont is
                    122:       new Reporting_Continue(Max_Norm,
                    123:                              Homotopy.Eval,Homotopy.Eval,Homotopy.Diff);
                    124:
                    125:   begin
                    126:     Homotopy.Create(p,q,k,a);
                    127:     Continuation_Parameters.Tune(0);
                    128:     Cont(file,sols,false,target);
                    129:     Homotopy.Clear;
                    130:   end Artificial_Parameter_Continuation;
                    131:
                    132:   procedure Natural_Parameter_Continuation
                    133:                  ( file : in file_type; h : in Poly_Sys; k : in natural;
                    134:                    t0,t1 : in Complex_Number; sols : in out Solution_List ) is
                    135:   begin
                    136:     null;
                    137:   end Natural_Parameter_Continuation;
                    138:
                    139: -- 4. POST-PROCESSING : VALIDATION
                    140:
                    141:   procedure Refine_Roots
                    142:                  ( file : in file_type; p : in Poly_Sys;
                    143:                    sols : in out Solution_List ) is
                    144:
                    145:     epsxa,epsfa : constant double_float := 10.0**(-8);   -- defaults
                    146:     tolsing : constant double_float := 10.0**(-8);
                    147:     maxit : constant natural := 3;
                    148:     numit : natural := 0;
                    149:
                    150:   begin
                    151:     Reporting_Root_Refiner(file,p,sols,epsxa,epsfa,tolsing,numit,maxit,false);
                    152:   end Refine_Roots;
                    153:
                    154: end PHCPACK;

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