with Standard_Floating_Numbers; use Standard_Floating_Numbers; with Standard_Complex_Vectors; use Standard_Complex_Vectors; with Standard_Complex_Norms_Equals; use Standard_Complex_Norms_Equals; with Standard_Complex_Matrices; use Standard_Complex_Matrices; with Standard_Complex_Poly_Systems_io; use Standard_Complex_Poly_Systems_io; with Standard_Complex_Poly_Randomizers; use Standard_Complex_Poly_Randomizers; with Scaling; use Scaling; with Reduction_of_Polynomial_Systems; use Reduction_of_Polynomial_Systems; with Homotopy; with Total_Degree_Start_Systems; use Total_Degree_Start_Systems; with BKK_Bound_Computations; use BKK_Bound_Computations; with Continuation_Parameters; with Increment_and_Fix_Continuation; use Increment_and_Fix_Continuation; with Standard_Root_Refiners; use Standard_Root_Refiners; package body PHCPACK is -- 1. PRE-PROCESSING : SCALING AND REDUCTION procedure Equation_Scaling ( file : in file_type; p : in Poly_Sys; s : out Poly_Sys ) is res : Poly_Sys(p'range); begin Copy(p,res); Scale(res); put(file,res); s := res; end Equation_Scaling; procedure Linear_Reduction ( file : in file_type; p : in Poly_Sys; r : out Poly_Sys ) is res : Poly_Sys(p'range); success,inconsistent,infinite : boolean := false; begin Copy(p,res); reduce(res,success,inconsistent,infinite); if success then if inconsistent then put_line(file,"system is inconsistent"); end if; if infinite then put_line(file,"system has infinite number of solutions"); end if; end if; put(file,res); r := res; end Linear_Reduction; -- 2. ROOT COUNTING AND CONSTRUCTION OF START SYSTEM procedure Total_Degree ( file : in file_type; p : in Poly_Sys; d : out natural ) is begin d := Total_Degree(p); end Total_Degree; procedure Total_Degree ( file : in file_type; p : in Poly_Sys; d : out natural; q : out Poly_Sys; qsols : out Solution_List ) is qq : Poly_Sys(p'range); qqsols : Solution_List; begin d := Total_Degree(p); Start_System(p,qq,qqsols); q := qq; qsols := qqsols; end Total_Degree; procedure Implicit_Lifting ( file : in file_type; p : in Poly_Sys; mv : out natural ) is begin mv := BKK_by_Implicit_Lifting(p); end Implicit_Lifting; procedure Implicit_Lifting ( file : in file_type; p : in Poly_Sys; mv : out natural; q : out Poly_Sys; qsols : out Solution_List ) is qq : Poly_Sys(p'range) := Complex_Randomize1(p); qqsols : Solution_List := Solve_by_Implicit_Lifting(file,qq); begin mv := Length_Of(qqsols); Set_Continuation_Parameter(qqsols,Create(0.0)); q := qq; qsols := qqsols; end Implicit_Lifting; procedure Static_Lifting ( file : in file_type; p : in Poly_Sys; mv : out natural ) is begin mv := BKK_by_Static_Lifting(file,p); end Static_Lifting; procedure Static_Lifting ( file : in file_type; p : in Poly_Sys; mv : out natural; q : out Poly_Sys; qsols : out Solution_List ) is qq : Poly_Sys(p'range) := Complex_Randomize1(p); qqsols : Solution_List := Solve_by_Static_Lifting(file,qq); begin mv := Length_Of(qqsols); Set_Continuation_Parameter(qqsols,Create(0.0)); q := qq; qsols := qqsols; end Static_Lifting; -- 3. POLYNOMIAL CONTINUATION procedure Artificial_Parameter_Continuation ( file : in file_type; p,q : in Poly_Sys; sols : in out Solution_List; k : in natural := 2; a : in Complex_Number := Create(1.0); target : in Complex_Number := Create(1.0) ) is procedure Cont is new Reporting_Continue(Max_Norm, Homotopy.Eval,Homotopy.Eval,Homotopy.Diff); begin Homotopy.Create(p,q,k,a); Continuation_Parameters.Tune(0); Cont(file,sols,false,target); Homotopy.Clear; end Artificial_Parameter_Continuation; procedure Natural_Parameter_Continuation ( file : in file_type; h : in Poly_Sys; k : in natural; t0,t1 : in Complex_Number; sols : in out Solution_List ) is begin null; end Natural_Parameter_Continuation; -- 4. POST-PROCESSING : VALIDATION procedure Refine_Roots ( file : in file_type; p : in Poly_Sys; sols : in out Solution_List ) is epsxa,epsfa : constant double_float := 10.0**(-8); -- defaults tolsing : constant double_float := 10.0**(-8); maxit : constant natural := 3; numit : natural := 0; begin Reporting_Root_Refiner(file,p,sols,epsxa,epsfa,tolsing,numit,maxit,false); end Refine_Roots; end PHCPACK;