Annotation of OpenXM_contrib/PHC/Ada/Math_Lib/Polynomials/ts_expvec.adb, Revision 1.1.1.1
1.1 maekawa 1: with text_io,integer_io; use text_io,integer_io;
2: with Symbol_Table;
3: with Standard_Complex_Numbers; use Standard_Complex_Numbers;
4: with Standard_Complex_Numbers_io; use Standard_Complex_Numbers_io;
5: with Standard_Natural_Vectors;
6: with Standard_Complex_Vectors; use Standard_Complex_Vectors;
7: with Standard_Complex_Vectors_io; use Standard_Complex_Vectors_io;
8: with Standard_Integer_VecVecs;
9: with Standard_Integer_VecVecs_io; use Standard_Integer_VecVecs_io;
10: with Standard_Complex_Polynomials; use Standard_Complex_Polynomials;
11: with Standard_Complex_Polynomials_io; use Standard_Complex_Polynomials_io;
12: with Standard_Complex_Poly_Functions; use Standard_Complex_Poly_Functions;
13: with Exponent_Vectors; use Exponent_Vectors;
14:
15: procedure ts_expvec is
16:
17: -- DESCRIPTION :
18: -- This routine provides basic testing routines for complex polynomials.
19:
20: procedure Read ( m : out natural;
21: q : out Standard_Complex_Polynomials.Poly ) is
22:
23: -- DESCRIPTION :
24: -- Tests the input/output of a polynomial in several variables
25: -- and with complex coefficients.
26:
27: n : natural;
28: p : Standard_Complex_Polynomials.Poly;
29:
30: begin
31: put("Give the number of variables : "); get(n);
32: Symbol_Table.Init(n);
33: put_line("Give a polynomial (terminate with ;) : "); get(p);
34: put_line("Your polynomial : "); put(p); new_line;
35: Symbol_Table.Clear;
36: q := p;
37: m := n;
38: end Read;
39:
40: function Coeff ( p : Standard_Complex_Polynomials.Poly;
41: e : Standard_Integer_VecVecs.VecVec )
42: return Standard_Complex_Vectors.Vector is
43:
44: res : Standard_Complex_Vectors.Vector(e'range);
45: deg : Degrees := new Standard_Natural_Vectors.Vector(e(e'first)'range);
46:
47: begin
48: for i in e'range loop
49: for j in e(i)'range loop
50: deg(j) := e(i)(j);
51: end loop;
52: res(i) := Coeff(p,deg);
53: end loop;
54: Clear(deg);
55: return res;
56: end Coeff;
57:
58: procedure Test_Eval ( n : in natural;
59: p : in Standard_Complex_Polynomials.Poly ) is
60:
61: ev : constant Standard_Integer_VecVecs.VecVec := Create(p);
62: cf : Standard_Complex_Vectors.Vector(ev'range) := Coeff(p,ev);
63: x : Standard_Complex_Vectors.Vector(1..n);
64: y1,y2 : Complex_Number;
65: ans : character;
66:
67: begin
68: put_line("The exponent vectors : "); put(ev);
69: put_line("The coefficients : ");
70: for i in cf'range loop
71: put(cf(i)); new_line;
72: end loop;
73: loop
74: put("Give "); put(n,1); put_line(" complex numbers : ");
75: for i in x'range loop
76: get(x(i));
77: end loop;
78: y1 := Eval(p,x);
79: y2 := Eval(ev,cf,x);
80: put("Eval poly p(x) : "); put(y1); new_line;
81: put("Eval cf*ev^x : "); put(y2); new_line;
82: put("Do you want more tests ? (y/n) "); get(ans);
83: exit when ans /= 'y';
84: end loop;
85: end Test_Eval;
86:
87: procedure Main is
88:
89: n : natural;
90: p : Poly;
91:
92: begin
93: new_line;
94: put_line("Interactive testing of the operations on exponent vectors.");
95: new_line;
96: Read(n,p);
97: Test_Eval(n,p);
98: end Main;
99:
100: begin
101: Main;
102: end ts_expvec;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>