with text_io; use text_io; with Standard_Floating_Numbers; use Standard_Floating_Numbers; with Standard_Complex_Numbers; use Standard_Complex_Numbers; with Standard_Complex_Vectors; use Standard_Complex_Vectors; with Standard_Complex_Matrices; use Standard_Complex_Matrices; with Standard_Complex_Solutions; use Standard_Complex_Solutions; with Continuation_Data; use Continuation_Data; package Correctors is -- DESCRIPTION : -- This package contains implementations for the corrector -- in an increment-and-fix continuation. -- -- The following options can be made : -- (Affine,Projective) -- An affine corrector works in affine space, while a projective -- corrector is a projective-perpendicular corrector: it works in -- projective space and corrects in a perpendicular way. -- (Single,Multiple) -- A single corrector only deals with one path at a time. -- A multiple corrector corrects more than one path when it is called. -- (Loose,Severe) -- A loose corrector will stop when either one of the following -- conditions is satisfied: -- 1. One of the desired accuracies has been met. -- 2. The maximum number of iterations is reached. -- 3. The Jacobian matrix is singular. -- In addition to these stopping criteria, a severe corrector checks -- the convergence during the iterations and stops when it notices -- divergence is noticed. A loose correctors allows divergence. -- (Normal,Conditioned) -- A normal corrector does not compute an estimate for the inverse of -- the condition number of the Jacobian matrix. This additional work -- is done by a conditioned corrector. -- (Silent,Reporting) -- A silent corrector does not produce any output on file. -- A reporting corrector allows to put intermediate results on file. -- -- Based on these options, the following 32 different correctors -- are provided : -- -- Affine_Single_Loose_Normal_Silent_Corrector -- Affine_Single_Loose_Normal_Reporting_Corrector -- Affine_Single_Loose_Conditioned_Silent_Corrector -- Affine_Single_Loose_Conditioned_Reporting_Corrector -- Affine_Single_Severe_Normal_Silent_Corrector -- Affine_Single_Severe_Normal_Reporting_Corrector -- Affine_Single_Severe_Conditioned_Silent_Corrector -- Affine_Single_Severe_Conditioned_Reporting_Corrector -- Affine_Multiple_Loose_Normal_Silent_Corrector -- Affine_Multiple_Loose_Normal_Reporting_Corrector -- Affine_Multiple_Loose_Conditioned_Silent_Corrector -- Affine_Multiple_Loose_Conditioned_Reporting_Corrector -- Affine_Multiple_Severe_Normal_Silent_Corrector -- Affine_Multiple_Severe_Normal_Reporting_Corrector -- Affine_Multiple_Severe_Conditioned_Silent_Corrector -- Affine_Multiple_Severe_Conditioned_Reporting_Corrector -- Projective_Single_Loose_Normal_Silent_Corrector -- Projective_Single_Loose_Normal_Reporting_Corrector -- Projective_Single_Loose_Conditioned_Silent_Corrector -- Projective_Single_Loose_Conditioned_Reporting_Corrector -- Projective_Single_Severe_Normal_Silent_Corrector -- Projective_Single_Severe_Normal_Reporting_Corrector -- Projective_Single_Severe_Conditioned_Silent_Corrector -- Projective_Single_Severe_Conditioned_Reporting_Corrector -- Projective_Multiple_Loose_Normal_Silent_Corrector -- Projective_Multiple_Loose_Normal_Reporting_Corrector -- Projective_Multiple_Loose_Conditioned_Silent_Corrector -- Projective_Multiple_Loose_Conditioned_Reporting_Corrector -- Projective_Multiple_Severe_Normal_Silent_Corrector -- Projective_Multiple_Severe_Normal_Reporting_Corrector -- Projective_Multiple_Severe_Conditioned_Silent_Corrector -- Projective_Multiple_Severe_Conditioned_Reporting_Corrector -- -- All these procedures have the following generic parameters: -- a norm function, polynomial vector and Jacobian matrix function. -- Note that the projective correctors require a homogeneous polynomial -- vector function. generic with function Norm ( x : Vector ) return double_float; with function H ( x : Vector; t : Complex_Number ) return Vector; with function dH ( x : Vector; t : Complex_Number ) return Matrix; procedure Affine_Single_Loose_Normal_Silent_Corrector ( s : in out Solu_Info; c : in Corr_Pars ); generic with function Norm ( x : Vector ) return double_float; with function H ( x : Vector; t : Complex_Number ) return Vector; with function dH ( x : Vector; t : Complex_Number ) return Matrix; procedure Affine_Single_Loose_Normal_Reporting_Corrector ( file : in file_type; s : in out Solu_Info; c : in Corr_Pars ); generic with function Norm ( x : Vector ) return double_float; with function H ( x : Vector; t : Complex_Number ) return Vector; with function dH ( x : Vector; t : Complex_Number ) return Matrix; procedure Affine_Single_Loose_Conditioned_Silent_Corrector ( s : in out Solu_Info; c : in Corr_Pars ); generic with function Norm ( x : Vector ) return double_float; with function H ( x : Vector; t : Complex_Number ) return Vector; with function dH ( x : Vector; t : Complex_Number ) return Matrix; procedure Affine_Single_Loose_Conditioned_Reporting_Corrector ( file : in file_type; s : in out Solu_Info; c : in Corr_Pars ); generic with function Norm ( x : Vector ) return double_float; with function H ( x : Vector; t : Complex_Number ) return Vector; with function dH ( x : Vector; t : Complex_Number ) return Matrix; procedure Affine_Single_Severe_Normal_Silent_Corrector ( s : in out Solu_Info; c : in Corr_Pars ); generic with function Norm ( x : Vector ) return double_float; with function H ( x : Vector; t : Complex_Number ) return Vector; with function dH ( x : Vector; t : Complex_Number ) return Matrix; procedure Affine_Single_Severe_Normal_Reporting_Corrector ( file : in file_type; s : in out Solu_Info; c : in Corr_Pars ); generic with function Norm ( x : Vector ) return double_float; with function H ( x : Vector; t : Complex_Number ) return Vector; with function dH ( x : Vector; t : Complex_Number ) return Matrix; procedure Affine_Single_Severe_Conditioned_Silent_Corrector ( s : in out Solu_Info; c : in Corr_Pars ); generic with function Norm ( x : Vector ) return double_float; with function H ( x : Vector; t : Complex_Number ) return Vector; with function dH ( x : Vector; t : Complex_Number ) return Matrix; procedure Affine_Single_Severe_Conditioned_Reporting_Corrector ( file : in file_type; s : in out Solu_Info; c : in Corr_Pars ); generic with function Norm ( x : Vector ) return double_float; with function H ( x : Vector; t : Complex_Number ) return Vector; with function dH ( x : Vector; t : Complex_Number ) return Matrix; procedure Affine_Multiple_Loose_Normal_Silent_Corrector ( s : in out Solu_Info_Array; pivot : in out natural; dist_sols : in double_float; c : in Corr_Pars; fail : out boolean ); generic with function Norm ( x : Vector ) return double_float; with function H ( x : Vector; t : Complex_Number ) return Vector; with function dH ( x : Vector; t : Complex_Number ) return Matrix; procedure Affine_Multiple_Loose_Normal_Reporting_Corrector ( file : in file_type; s : in out Solu_Info_Array; pivot : in out natural; dist_sols : in double_float; c : in Corr_Pars; fail : out boolean ); generic with function Norm ( x : Vector ) return double_float; with function H ( x : Vector; t : Complex_Number ) return Vector; with function dH ( x : Vector; t : Complex_Number ) return Matrix; procedure Affine_Multiple_Loose_Conditioned_Silent_Corrector ( s : in out Solu_Info_Array; pivot : in out natural; dist_sols : in double_float; c : in Corr_Pars; fail : out boolean ); generic with function Norm ( x : Vector ) return double_float; with function H ( x : Vector; t : Complex_Number ) return Vector; with function dH ( x : Vector; t : Complex_Number ) return Matrix; procedure Affine_Multiple_Loose_Conditioned_Reporting_Corrector ( file : in file_type; s : in out Solu_Info_Array; pivot : in out natural; dist_sols : in double_float; c : in Corr_Pars; fail : out boolean ); generic with function Norm ( x : Vector ) return double_float; with function H ( x : Vector; t : Complex_Number ) return Vector; with function dH ( x : Vector; t : Complex_Number ) return Matrix; procedure Affine_Multiple_Severe_Normal_Silent_Corrector ( s : in out Solu_Info_Array; pivot : in out natural; dist_sols : in double_float; c : in Corr_Pars; fail : out boolean ); generic with function Norm ( x : Vector ) return double_float; with function H ( x : Vector; t : Complex_Number ) return Vector; with function dH ( x : Vector; t : Complex_Number ) return Matrix; procedure Affine_Multiple_Severe_Normal_Reporting_Corrector ( file : in file_type; s : in out Solu_Info_Array; pivot : in out natural; dist_sols : in double_float; c : in Corr_Pars; fail : out boolean ); generic with function Norm ( x : Vector ) return double_float; with function H ( x : Vector; t : Complex_Number ) return Vector; with function dH ( x : Vector; t : Complex_Number ) return Matrix; procedure Affine_Multiple_Severe_Conditioned_Silent_Corrector ( s : in out Solu_Info_Array; pivot : in out natural; dist_sols : in double_float; c : in Corr_Pars; fail : out boolean ); generic with function Norm ( x : Vector ) return double_float; with function H ( x : Vector; t : Complex_Number ) return Vector; with function dH ( x : Vector; t : Complex_Number ) return Matrix; procedure Affine_Multiple_Severe_Conditioned_Reporting_Corrector ( file : in file_type; s : in out Solu_Info_Array; pivot : in out natural; dist_sols : in double_float; c : in Corr_Pars; fail : out boolean ); generic with function Norm ( x : Vector ) return double_float; with function H ( x : Vector; t : Complex_Number ) return Vector; with function dH ( x : Vector; t : Complex_Number ) return Matrix; procedure Projective_Single_Loose_Normal_Silent_Corrector ( s : in out Solu_Info; c : in Corr_Pars ); generic with function Norm ( x : Vector ) return double_float; with function H ( x : Vector; t : Complex_Number ) return Vector; with function dH ( x : Vector; t : Complex_Number ) return Matrix; procedure Projective_Single_Loose_Normal_Reporting_Corrector ( file : in file_type; s : in out Solu_Info; c : in Corr_Pars ); generic with function Norm ( x : Vector ) return double_float; with function H ( x : Vector; t : Complex_Number ) return Vector; with function dH ( x : Vector; t : Complex_Number ) return Matrix; procedure Projective_Single_Loose_Conditioned_Silent_Corrector ( s : in out Solu_Info; c : in Corr_Pars ); generic with function Norm ( x : Vector ) return double_float; with function H ( x : Vector; t : Complex_Number ) return Vector; with function dH ( x : Vector; t : Complex_Number ) return Matrix; procedure Projective_Single_Loose_Conditioned_Reporting_Corrector ( file : in file_type; s : in out Solu_Info; c : in Corr_Pars ); generic with function Norm ( x : Vector ) return double_float; with function H ( x : Vector; t : Complex_Number ) return Vector; with function dH ( x : Vector; t : Complex_Number ) return Matrix; procedure Projective_Single_Severe_Normal_Silent_Corrector ( s : in out Solu_Info; c : in Corr_Pars ); generic with function Norm ( x : Vector ) return double_float; with function H ( x : Vector; t : Complex_Number ) return Vector; with function dH ( x : Vector; t : Complex_Number ) return Matrix; procedure Projective_Single_Severe_Normal_Reporting_Corrector ( file : in file_type; s : in out Solu_Info; c : in Corr_Pars ); generic with function Norm ( x : Vector ) return double_float; with function H ( x : Vector; t : Complex_Number ) return Vector; with function dH ( x : Vector; t : Complex_Number ) return Matrix; procedure Projective_Single_Severe_Conditioned_Silent_Corrector ( s : in out Solu_Info; c : in Corr_Pars ); generic with function Norm ( x : Vector ) return double_float; with function H ( x : Vector; t : Complex_Number ) return Vector; with function dH ( x : Vector; t : Complex_Number ) return Matrix; procedure Projective_Single_Severe_Conditioned_Reporting_Corrector ( file : in file_type; s : in out Solu_Info; c : in Corr_Pars ); generic with function Norm ( x : Vector ) return double_float; with function H ( x : Vector; t : Complex_Number ) return Vector; with function dH ( x : Vector; t : Complex_Number ) return Matrix; procedure Projective_Multiple_Loose_Normal_Silent_Corrector ( s : in out Solu_Info_Array; pivot : in out natural; dist_sols : in double_float; c : in Corr_Pars; fail : out boolean ); generic with function Norm ( x : Vector ) return double_float; with function H ( x : Vector; t : Complex_Number ) return Vector; with function dH ( x : Vector; t : Complex_Number ) return Matrix; procedure Projective_Multiple_Loose_Normal_Reporting_Corrector ( file : in file_type; s : in out Solu_Info_Array; pivot : in out natural; dist_sols : in double_float; c : in Corr_Pars; fail : out boolean ); generic with function Norm ( x : Vector ) return double_float; with function H ( x : Vector; t : Complex_Number ) return Vector; with function dH ( x : Vector; t : Complex_Number ) return Matrix; procedure Projective_Multiple_Loose_Conditioned_Silent_Corrector ( s : in out Solu_Info_Array; pivot : in out natural; dist_sols : in double_float; c : in Corr_Pars; fail : out boolean ); generic with function Norm ( x : Vector ) return double_float; with function H ( x : Vector; t : Complex_Number ) return Vector; with function dH ( x : Vector; t : Complex_Number ) return Matrix; procedure Projective_Multiple_Loose_Conditioned_Reporting_Corrector ( file : in file_type; s : in out Solu_Info_Array; pivot : in out natural; dist_sols : in double_float; c : in Corr_Pars; fail : out boolean ); generic with function Norm ( x : Vector ) return double_float; with function H ( x : Vector; t : Complex_Number ) return Vector; with function dH ( x : Vector; t : Complex_Number ) return Matrix; procedure Projective_Multiple_Severe_Normal_Silent_Corrector ( s : in out Solu_Info_Array; pivot : in out natural; dist_sols : in double_float; c : in Corr_Pars; fail : out boolean ); generic with function Norm ( x : Vector ) return double_float; with function H ( x : Vector; t : Complex_Number ) return Vector; with function dH ( x : Vector; t : Complex_Number ) return Matrix; procedure Projective_Multiple_Severe_Normal_Reporting_Corrector ( file : in file_type; s : in out Solu_Info_Array; pivot : in out natural; dist_sols : in double_float; c : in Corr_Pars; fail : out boolean ); generic with function Norm ( x : Vector ) return double_float; with function H ( x : Vector; t : Complex_Number ) return Vector; with function dH ( x : Vector; t : Complex_Number ) return Matrix; procedure Projective_Multiple_Severe_Conditioned_Silent_Corrector ( s : in out Solu_Info_Array; pivot : in out natural; dist_sols : in double_float; c : in Corr_Pars; fail : out boolean ); generic with function Norm ( x : Vector ) return double_float; with function H ( x : Vector; t : Complex_Number ) return Vector; with function dH ( x : Vector; t : Complex_Number ) return Matrix; procedure Projective_Multiple_Severe_Conditioned_Reporting_Corrector ( file : in file_type; s : in out Solu_Info_Array; pivot : in out natural; dist_sols : in double_float; c : in Corr_Pars; fail : out boolean ); -- DESCRIPTION : -- The predicted solutions of the system H(x,t)=0 are corrected. -- With a multiple corrector, the correction starts at s(pivot). -- ON ENTRY : -- file to write intermediate results on; -- s are the predicted values for the solutions; -- pivot is the index in the array where the correction -- process must start; -- dist_sols two solutions x1 and x2 are different -- if for some k in 1..n : | x1(k) - x2(k) | > dist_sols; -- c the corrector parameters. -- ON RETURN : -- s the computed solutions; -- pivot if fail then pivot is the index in the array where -- a difficulty occured; otherwise it is the same pivot as -- on entry; -- fail is false if all solutions are computed with the desired -- precision eps, within the maximum number of allowed -- iterations, and if all solutions are different. end Correctors;