Annotation of OpenXM_contrib/PHC/Ada/Math_Lib/Polynomials/matrix_indeterminates.adb, Revision 1.1.1.1
1.1 maekawa 1: with Characters_and_Numbers; use Characters_and_Numbers;
2: with Standard_Complex_Numbers; use Standard_Complex_Numbers;
3: with Standard_Natural_Vectors;
4:
5: package body Matrix_Indeterminates is
6:
7: procedure Initialize_Symbols ( n,d : in natural ) is
8: begin
9: Symbol_Table.Init(n*d);
10: for i in 1..n loop
11: for j in 1..d loop
12: declare
13: s : Symbol := X_ij(i,j);
14: begin
15: Symbol_Table.Add(s);
16: end;
17: end loop;
18: end loop;
19: end Initialize_Symbols;
20:
21: function X_ij ( i,j : natural ) return Symbol is
22:
23: res : Symbol;
24:
25: begin
26: res(1) := 'x';
27: res(2) := Convert_Hexadecimal(i);
28: res(3) := Convert_Hexadecimal(j);
29: for i in 4..res'last loop
30: res(i) := ' ';
31: end loop;
32: return res;
33: end X_ij;
34:
35: function Monomial ( n,d,i,j : natural ) return Poly is
36:
37: res : Poly;
38: t : Term;
39:
40: begin
41: t.cf := Create(1.0);
42: t.dg := new Standard_Natural_Vectors.Vector'(1..n*d => 0);
43: t.dg((i-1)*d+j) := 1;
44: res := Create(t);
45: Clear(t.dg);
46: return res;
47: end Monomial;
48:
49: procedure Reduce_Symbols ( locmap : in Matrix ) is
50:
51: d : constant natural := locmap'length(2);
52:
53: begin
54: for i in reverse locmap'range(1) loop
55: for j in reverse locmap'range(2) loop
56: if locmap(i,j) /= 2
57: then Symbol_Table.Remove(X_ij(i,j));
58: end if;
59: end loop;
60: end loop;
61: end Reduce_Symbols;
62:
63: procedure Clear_Symbols is
64: begin
65: Symbol_Table.Clear;
66: end Clear_Symbols;
67:
68: end Matrix_Indeterminates;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>