Annotation of OpenXM_contrib/PHC/Ada/Root_Counts/Product/total_degree_start_systems.adb, Revision 1.1.1.1
1.1 maekawa 1: with text_io; use text_io;
2: with Standard_Random_Numbers; use Standard_Random_Numbers;
3: with Standard_Complex_Numbers; use Standard_Complex_Numbers;
4: with Standard_Complex_Numbers_Polar; use Standard_Complex_Numbers_Polar;
5: with Standard_Natural_Vectors;
6: with Standard_Complex_Polynomials; use Standard_Complex_Polynomials;
7:
8: package body Total_Degree_Start_Systems is
9:
10: procedure Total_Degree_Info is
11:
12: -- DESCRIPTION :
13: -- Displays information about the total degree on screen.
14:
15: i : array(1..5) of string(1..65);
16:
17: begin
18: i(1):=" The total degree is the product of the degrees of the";
19: i(2):="polynomials in the system. The i-th equation of the start system";
20: i(3):="is a univariate polynomial in the i-th unknown of the same degree";
21: i(4):="as the i-th polynomial in the system that has to be solved. The";
22: i(5):="total degree equals the number of solutions of the start system. ";
23: for k in i'range loop
24: put_line(i(k));
25: end loop;
26: end Total_Degree_Info;
27:
28: procedure Start_Solutions
29: ( level : in natural;
30: q : in Poly_Sys; c : in Vector; s : in out Solution;
31: qsols,qsols_last : in out Solution_List ) is
32:
33: -- DESCRIPTION :
34: -- All solutions to the polynomial system q are computed.
35: -- The parameter level indicates the current component in the recursive
36: -- application of the rule of de Moivre.
37:
38: d : natural;
39:
40: begin
41: if level <= s.n
42: then d := Degree(q(level));
43: for j in 1..d loop
44: s.v(level) := Root(c(level),d,j);
45: Start_Solutions(level+1,q,c,s,qsols,qsols_last);
46: end loop;
47: else s.t := Create(0.0);
48: s.m := 1;
49: s.err := 0.0; s.rco := 1.0; s.res := 0.0;
50: Append(qsols,qsols_last,s);
51: end if;
52: end Start_Solutions;
53:
54: procedure Start_System
55: ( p : in Poly_Sys; q : in out Poly_Sys; c : in Vector;
56: qsols : in out Solution_List ) is
57:
58: t : Term;
59: n : natural := p'length;
60: s : Solution(n);
61: last : Solution_List := qsols;
62:
63: begin
64: for i in p'range loop
65: t.dg := new Standard_Natural_Vectors.Vector'(1..n => 0);
66: t.dg(i) := Degree(p(i));
67: t.cf := Create(1.0);
68: q(i) := Create(t);
69: Clear(t);
70: t.dg := new Standard_Natural_Vectors.Vector'(1..n => 0);
71: t.cf := -c(i);
72: Add(q(i),t);
73: Clear(t);
74: end loop;
75: Start_Solutions(1,q,c,s,qsols,last);
76: end Start_System;
77:
78: procedure Start_System
79: ( p : in Poly_Sys; q : in out Poly_Sys;
80: qsols : in out Solution_List ) is
81:
82: n : natural := p'length;
83: c : Vector(1..n);
84:
85: begin
86: for i in c'range loop
87: c(i) := Random1;
88: end loop;
89: Start_System(p,q,c,qsols);
90: end Start_System;
91:
92: end Total_Degree_Start_Systems;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>