Annotation of OpenXM_contrib/PHC/Ada/Continuation/correctors.ads, Revision 1.1.1.1
1.1 maekawa 1: with text_io; use text_io;
2: with Standard_Floating_Numbers; use Standard_Floating_Numbers;
3: with Standard_Complex_Numbers; use Standard_Complex_Numbers;
4: with Standard_Complex_Vectors; use Standard_Complex_Vectors;
5: with Standard_Complex_Matrices; use Standard_Complex_Matrices;
6: with Standard_Complex_Solutions; use Standard_Complex_Solutions;
7: with Continuation_Data; use Continuation_Data;
8:
9: package Correctors is
10:
11: -- DESCRIPTION :
12: -- This package contains implementations for the corrector
13: -- in an increment-and-fix continuation.
14: --
15: -- The following options can be made :
16: -- (Affine,Projective)
17: -- An affine corrector works in affine space, while a projective
18: -- corrector is a projective-perpendicular corrector: it works in
19: -- projective space and corrects in a perpendicular way.
20: -- (Single,Multiple)
21: -- A single corrector only deals with one path at a time.
22: -- A multiple corrector corrects more than one path when it is called.
23: -- (Loose,Severe)
24: -- A loose corrector will stop when either one of the following
25: -- conditions is satisfied:
26: -- 1. One of the desired accuracies has been met.
27: -- 2. The maximum number of iterations is reached.
28: -- 3. The Jacobian matrix is singular.
29: -- In addition to these stopping criteria, a severe corrector checks
30: -- the convergence during the iterations and stops when it notices
31: -- divergence is noticed. A loose correctors allows divergence.
32: -- (Normal,Conditioned)
33: -- A normal corrector does not compute an estimate for the inverse of
34: -- the condition number of the Jacobian matrix. This additional work
35: -- is done by a conditioned corrector.
36: -- (Silent,Reporting)
37: -- A silent corrector does not produce any output on file.
38: -- A reporting corrector allows to put intermediate results on file.
39: --
40: -- Based on these options, the following 32 different correctors
41: -- are provided :
42: --
43: -- Affine_Single_Loose_Normal_Silent_Corrector
44: -- Affine_Single_Loose_Normal_Reporting_Corrector
45: -- Affine_Single_Loose_Conditioned_Silent_Corrector
46: -- Affine_Single_Loose_Conditioned_Reporting_Corrector
47: -- Affine_Single_Severe_Normal_Silent_Corrector
48: -- Affine_Single_Severe_Normal_Reporting_Corrector
49: -- Affine_Single_Severe_Conditioned_Silent_Corrector
50: -- Affine_Single_Severe_Conditioned_Reporting_Corrector
51: -- Affine_Multiple_Loose_Normal_Silent_Corrector
52: -- Affine_Multiple_Loose_Normal_Reporting_Corrector
53: -- Affine_Multiple_Loose_Conditioned_Silent_Corrector
54: -- Affine_Multiple_Loose_Conditioned_Reporting_Corrector
55: -- Affine_Multiple_Severe_Normal_Silent_Corrector
56: -- Affine_Multiple_Severe_Normal_Reporting_Corrector
57: -- Affine_Multiple_Severe_Conditioned_Silent_Corrector
58: -- Affine_Multiple_Severe_Conditioned_Reporting_Corrector
59: -- Projective_Single_Loose_Normal_Silent_Corrector
60: -- Projective_Single_Loose_Normal_Reporting_Corrector
61: -- Projective_Single_Loose_Conditioned_Silent_Corrector
62: -- Projective_Single_Loose_Conditioned_Reporting_Corrector
63: -- Projective_Single_Severe_Normal_Silent_Corrector
64: -- Projective_Single_Severe_Normal_Reporting_Corrector
65: -- Projective_Single_Severe_Conditioned_Silent_Corrector
66: -- Projective_Single_Severe_Conditioned_Reporting_Corrector
67: -- Projective_Multiple_Loose_Normal_Silent_Corrector
68: -- Projective_Multiple_Loose_Normal_Reporting_Corrector
69: -- Projective_Multiple_Loose_Conditioned_Silent_Corrector
70: -- Projective_Multiple_Loose_Conditioned_Reporting_Corrector
71: -- Projective_Multiple_Severe_Normal_Silent_Corrector
72: -- Projective_Multiple_Severe_Normal_Reporting_Corrector
73: -- Projective_Multiple_Severe_Conditioned_Silent_Corrector
74: -- Projective_Multiple_Severe_Conditioned_Reporting_Corrector
75: --
76: -- All these procedures have the following generic parameters:
77: -- a norm function, polynomial vector and Jacobian matrix function.
78: -- Note that the projective correctors require a homogeneous polynomial
79: -- vector function.
80:
81: generic
82: with function Norm ( x : Vector ) return double_float;
83: with function H ( x : Vector; t : Complex_Number ) return Vector;
84: with function dH ( x : Vector; t : Complex_Number ) return Matrix;
85: procedure Affine_Single_Loose_Normal_Silent_Corrector
86: ( s : in out Solu_Info; c : in Corr_Pars );
87:
88: generic
89: with function Norm ( x : Vector ) return double_float;
90: with function H ( x : Vector; t : Complex_Number ) return Vector;
91: with function dH ( x : Vector; t : Complex_Number ) return Matrix;
92: procedure Affine_Single_Loose_Normal_Reporting_Corrector
93: ( file : in file_type; s : in out Solu_Info; c : in Corr_Pars );
94:
95: generic
96: with function Norm ( x : Vector ) return double_float;
97: with function H ( x : Vector; t : Complex_Number ) return Vector;
98: with function dH ( x : Vector; t : Complex_Number ) return Matrix;
99: procedure Affine_Single_Loose_Conditioned_Silent_Corrector
100: ( s : in out Solu_Info; c : in Corr_Pars );
101:
102: generic
103: with function Norm ( x : Vector ) return double_float;
104: with function H ( x : Vector; t : Complex_Number ) return Vector;
105: with function dH ( x : Vector; t : Complex_Number ) return Matrix;
106: procedure Affine_Single_Loose_Conditioned_Reporting_Corrector
107: ( file : in file_type; s : in out Solu_Info; c : in Corr_Pars );
108:
109: generic
110: with function Norm ( x : Vector ) return double_float;
111: with function H ( x : Vector; t : Complex_Number ) return Vector;
112: with function dH ( x : Vector; t : Complex_Number ) return Matrix;
113: procedure Affine_Single_Severe_Normal_Silent_Corrector
114: ( s : in out Solu_Info; c : in Corr_Pars );
115:
116: generic
117: with function Norm ( x : Vector ) return double_float;
118: with function H ( x : Vector; t : Complex_Number ) return Vector;
119: with function dH ( x : Vector; t : Complex_Number ) return Matrix;
120: procedure Affine_Single_Severe_Normal_Reporting_Corrector
121: ( file : in file_type; s : in out Solu_Info; c : in Corr_Pars );
122:
123: generic
124: with function Norm ( x : Vector ) return double_float;
125: with function H ( x : Vector; t : Complex_Number ) return Vector;
126: with function dH ( x : Vector; t : Complex_Number ) return Matrix;
127: procedure Affine_Single_Severe_Conditioned_Silent_Corrector
128: ( s : in out Solu_Info; c : in Corr_Pars );
129:
130: generic
131: with function Norm ( x : Vector ) return double_float;
132: with function H ( x : Vector; t : Complex_Number ) return Vector;
133: with function dH ( x : Vector; t : Complex_Number ) return Matrix;
134: procedure Affine_Single_Severe_Conditioned_Reporting_Corrector
135: ( file : in file_type; s : in out Solu_Info; c : in Corr_Pars );
136:
137: generic
138: with function Norm ( x : Vector ) return double_float;
139: with function H ( x : Vector; t : Complex_Number ) return Vector;
140: with function dH ( x : Vector; t : Complex_Number ) return Matrix;
141: procedure Affine_Multiple_Loose_Normal_Silent_Corrector
142: ( s : in out Solu_Info_Array;
143: pivot : in out natural; dist_sols : in double_float;
144: c : in Corr_Pars; fail : out boolean );
145:
146: generic
147: with function Norm ( x : Vector ) return double_float;
148: with function H ( x : Vector; t : Complex_Number ) return Vector;
149: with function dH ( x : Vector; t : Complex_Number ) return Matrix;
150: procedure Affine_Multiple_Loose_Normal_Reporting_Corrector
151: ( file : in file_type; s : in out Solu_Info_Array;
152: pivot : in out natural; dist_sols : in double_float;
153: c : in Corr_Pars; fail : out boolean );
154:
155: generic
156: with function Norm ( x : Vector ) return double_float;
157: with function H ( x : Vector; t : Complex_Number ) return Vector;
158: with function dH ( x : Vector; t : Complex_Number ) return Matrix;
159: procedure Affine_Multiple_Loose_Conditioned_Silent_Corrector
160: ( s : in out Solu_Info_Array;
161: pivot : in out natural; dist_sols : in double_float;
162: c : in Corr_Pars; fail : out boolean );
163:
164: generic
165: with function Norm ( x : Vector ) return double_float;
166: with function H ( x : Vector; t : Complex_Number ) return Vector;
167: with function dH ( x : Vector; t : Complex_Number ) return Matrix;
168: procedure Affine_Multiple_Loose_Conditioned_Reporting_Corrector
169: ( file : in file_type; s : in out Solu_Info_Array;
170: pivot : in out natural; dist_sols : in double_float;
171: c : in Corr_Pars; fail : out boolean );
172:
173: generic
174: with function Norm ( x : Vector ) return double_float;
175: with function H ( x : Vector; t : Complex_Number ) return Vector;
176: with function dH ( x : Vector; t : Complex_Number ) return Matrix;
177: procedure Affine_Multiple_Severe_Normal_Silent_Corrector
178: ( s : in out Solu_Info_Array;
179: pivot : in out natural; dist_sols : in double_float;
180: c : in Corr_Pars; fail : out boolean );
181:
182: generic
183: with function Norm ( x : Vector ) return double_float;
184: with function H ( x : Vector; t : Complex_Number ) return Vector;
185: with function dH ( x : Vector; t : Complex_Number ) return Matrix;
186: procedure Affine_Multiple_Severe_Normal_Reporting_Corrector
187: ( file : in file_type; s : in out Solu_Info_Array;
188: pivot : in out natural; dist_sols : in double_float;
189: c : in Corr_Pars; fail : out boolean );
190:
191: generic
192: with function Norm ( x : Vector ) return double_float;
193: with function H ( x : Vector; t : Complex_Number ) return Vector;
194: with function dH ( x : Vector; t : Complex_Number ) return Matrix;
195: procedure Affine_Multiple_Severe_Conditioned_Silent_Corrector
196: ( s : in out Solu_Info_Array;
197: pivot : in out natural; dist_sols : in double_float;
198: c : in Corr_Pars; fail : out boolean );
199:
200: generic
201: with function Norm ( x : Vector ) return double_float;
202: with function H ( x : Vector; t : Complex_Number ) return Vector;
203: with function dH ( x : Vector; t : Complex_Number ) return Matrix;
204: procedure Affine_Multiple_Severe_Conditioned_Reporting_Corrector
205: ( file : in file_type; s : in out Solu_Info_Array;
206: pivot : in out natural; dist_sols : in double_float;
207: c : in Corr_Pars; fail : out boolean );
208:
209: generic
210: with function Norm ( x : Vector ) return double_float;
211: with function H ( x : Vector; t : Complex_Number ) return Vector;
212: with function dH ( x : Vector; t : Complex_Number ) return Matrix;
213: procedure Projective_Single_Loose_Normal_Silent_Corrector
214: ( s : in out Solu_Info; c : in Corr_Pars );
215:
216: generic
217: with function Norm ( x : Vector ) return double_float;
218: with function H ( x : Vector; t : Complex_Number ) return Vector;
219: with function dH ( x : Vector; t : Complex_Number ) return Matrix;
220: procedure Projective_Single_Loose_Normal_Reporting_Corrector
221: ( file : in file_type; s : in out Solu_Info; c : in Corr_Pars );
222:
223: generic
224: with function Norm ( x : Vector ) return double_float;
225: with function H ( x : Vector; t : Complex_Number ) return Vector;
226: with function dH ( x : Vector; t : Complex_Number ) return Matrix;
227: procedure Projective_Single_Loose_Conditioned_Silent_Corrector
228: ( s : in out Solu_Info; c : in Corr_Pars );
229:
230: generic
231: with function Norm ( x : Vector ) return double_float;
232: with function H ( x : Vector; t : Complex_Number ) return Vector;
233: with function dH ( x : Vector; t : Complex_Number ) return Matrix;
234: procedure Projective_Single_Loose_Conditioned_Reporting_Corrector
235: ( file : in file_type; s : in out Solu_Info; c : in Corr_Pars );
236:
237: generic
238: with function Norm ( x : Vector ) return double_float;
239: with function H ( x : Vector; t : Complex_Number ) return Vector;
240: with function dH ( x : Vector; t : Complex_Number ) return Matrix;
241: procedure Projective_Single_Severe_Normal_Silent_Corrector
242: ( s : in out Solu_Info; c : in Corr_Pars );
243:
244: generic
245: with function Norm ( x : Vector ) return double_float;
246: with function H ( x : Vector; t : Complex_Number ) return Vector;
247: with function dH ( x : Vector; t : Complex_Number ) return Matrix;
248: procedure Projective_Single_Severe_Normal_Reporting_Corrector
249: ( file : in file_type; s : in out Solu_Info; c : in Corr_Pars );
250:
251: generic
252: with function Norm ( x : Vector ) return double_float;
253: with function H ( x : Vector; t : Complex_Number ) return Vector;
254: with function dH ( x : Vector; t : Complex_Number ) return Matrix;
255: procedure Projective_Single_Severe_Conditioned_Silent_Corrector
256: ( s : in out Solu_Info; c : in Corr_Pars );
257:
258: generic
259: with function Norm ( x : Vector ) return double_float;
260: with function H ( x : Vector; t : Complex_Number ) return Vector;
261: with function dH ( x : Vector; t : Complex_Number ) return Matrix;
262: procedure Projective_Single_Severe_Conditioned_Reporting_Corrector
263: ( file : in file_type; s : in out Solu_Info; c : in Corr_Pars );
264:
265: generic
266: with function Norm ( x : Vector ) return double_float;
267: with function H ( x : Vector; t : Complex_Number ) return Vector;
268: with function dH ( x : Vector; t : Complex_Number ) return Matrix;
269: procedure Projective_Multiple_Loose_Normal_Silent_Corrector
270: ( s : in out Solu_Info_Array;
271: pivot : in out natural; dist_sols : in double_float;
272: c : in Corr_Pars; fail : out boolean );
273:
274: generic
275: with function Norm ( x : Vector ) return double_float;
276: with function H ( x : Vector; t : Complex_Number ) return Vector;
277: with function dH ( x : Vector; t : Complex_Number ) return Matrix;
278: procedure Projective_Multiple_Loose_Normal_Reporting_Corrector
279: ( file : in file_type; s : in out Solu_Info_Array;
280: pivot : in out natural; dist_sols : in double_float;
281: c : in Corr_Pars; fail : out boolean );
282:
283: generic
284: with function Norm ( x : Vector ) return double_float;
285: with function H ( x : Vector; t : Complex_Number ) return Vector;
286: with function dH ( x : Vector; t : Complex_Number ) return Matrix;
287: procedure Projective_Multiple_Loose_Conditioned_Silent_Corrector
288: ( s : in out Solu_Info_Array;
289: pivot : in out natural; dist_sols : in double_float;
290: c : in Corr_Pars; fail : out boolean );
291:
292: generic
293: with function Norm ( x : Vector ) return double_float;
294: with function H ( x : Vector; t : Complex_Number ) return Vector;
295: with function dH ( x : Vector; t : Complex_Number ) return Matrix;
296: procedure Projective_Multiple_Loose_Conditioned_Reporting_Corrector
297: ( file : in file_type; s : in out Solu_Info_Array;
298: pivot : in out natural; dist_sols : in double_float;
299: c : in Corr_Pars; fail : out boolean );
300:
301: generic
302: with function Norm ( x : Vector ) return double_float;
303: with function H ( x : Vector; t : Complex_Number ) return Vector;
304: with function dH ( x : Vector; t : Complex_Number ) return Matrix;
305: procedure Projective_Multiple_Severe_Normal_Silent_Corrector
306: ( s : in out Solu_Info_Array;
307: pivot : in out natural; dist_sols : in double_float;
308: c : in Corr_Pars; fail : out boolean );
309:
310: generic
311: with function Norm ( x : Vector ) return double_float;
312: with function H ( x : Vector; t : Complex_Number ) return Vector;
313: with function dH ( x : Vector; t : Complex_Number ) return Matrix;
314: procedure Projective_Multiple_Severe_Normal_Reporting_Corrector
315: ( file : in file_type; s : in out Solu_Info_Array;
316: pivot : in out natural; dist_sols : in double_float;
317: c : in Corr_Pars; fail : out boolean );
318:
319: generic
320: with function Norm ( x : Vector ) return double_float;
321: with function H ( x : Vector; t : Complex_Number ) return Vector;
322: with function dH ( x : Vector; t : Complex_Number ) return Matrix;
323: procedure Projective_Multiple_Severe_Conditioned_Silent_Corrector
324: ( s : in out Solu_Info_Array;
325: pivot : in out natural; dist_sols : in double_float;
326: c : in Corr_Pars; fail : out boolean );
327:
328: generic
329: with function Norm ( x : Vector ) return double_float;
330: with function H ( x : Vector; t : Complex_Number ) return Vector;
331: with function dH ( x : Vector; t : Complex_Number ) return Matrix;
332: procedure Projective_Multiple_Severe_Conditioned_Reporting_Corrector
333: ( file : in file_type; s : in out Solu_Info_Array;
334: pivot : in out natural; dist_sols : in double_float;
335: c : in Corr_Pars; fail : out boolean );
336:
337: -- DESCRIPTION :
338: -- The predicted solutions of the system H(x,t)=0 are corrected.
339: -- With a multiple corrector, the correction starts at s(pivot).
340:
341: -- ON ENTRY :
342: -- file to write intermediate results on;
343: -- s are the predicted values for the solutions;
344: -- pivot is the index in the array where the correction
345: -- process must start;
346: -- dist_sols two solutions x1 and x2 are different
347: -- if for some k in 1..n : | x1(k) - x2(k) | > dist_sols;
348: -- c the corrector parameters.
349:
350: -- ON RETURN :
351: -- s the computed solutions;
352: -- pivot if fail then pivot is the index in the array where
353: -- a difficulty occured; otherwise it is the same pivot as
354: -- on entry;
355: -- fail is false if all solutions are computed with the desired
356: -- precision eps, within the maximum number of allowed
357: -- iterations, and if all solutions are different.
358:
359: end Correctors;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>