Annotation of OpenXM_contrib/PHC/Ada/Math_Lib/Matrices/ts_intmat.adb, Revision 1.1.1.1
1.1 maekawa 1: with text_io,integer_io; use text_io,integer_io;
2: with Standard_Integer_Vectors;
3: with Standard_Integer_Vectors_io;
4: with Standard_Integer_Matrices;
5: with Standard_Integer_Matrices_io;
6: with Standard_Integer_VecMats;
7: with Standard_Integer_VecMats_io;
8: with Standard_Integer_Linear_Solvers;
9: with Standard_Random_Matrices; use Standard_Random_Matrices;
10: with Multprec_Random_Matrices; use Multprec_Random_Matrices;
11: with Multprec_Integer_Vectors;
12: with Multprec_Integer_Vectors_io;
13: with Multprec_Integer_Matrices;
14: with Multprec_Integer_Matrices_io;
15: with Multprec_Integer_Linear_Solvers;
16:
17: procedure ts_intmat is
18:
19: -- DESCRIPTION :
20: -- Tests the matrix packages of standard and multi-precision integers.
21:
22: procedure Test_Standard_io is
23:
24: use Standard_Integer_Matrices,Standard_Integer_Matrices_io;
25:
26: n,m : natural;
27:
28: begin
29: put("Give the number of rows : "); get(n);
30: put("Give the number of columns : "); get(m);
31: declare
32: mat : Matrix(1..n,1..m);
33: begin
34: put("Give "); put(n,1); put("x"); put(m,1);
35: put_line(" integer matrix : "); get(mat);
36: put_line("Your matrix : "); put(mat);
37: end;
38: end Test_Standard_io;
39:
40: procedure Test_Standard_VecMat_io is
41:
42: use Standard_Integer_Matrices,Standard_Integer_Matrices_io;
43: use Standard_Integer_VecMats,Standard_Integer_VecMats_io;
44:
45: n,n1,n2 : natural;
46: lv : Link_to_VecMat;
47:
48: begin
49: put("Give the number of matrices : "); get(n);
50: put("Give #rows : "); get(n1);
51: put("Give #columns : "); get(n2);
52: put("Give "); put(n,1); put(" "); put(n1,1); put("-by-"); put(n2,1);
53: put_line(" integer matrices : ");
54: get(n,n1,n2,lv);
55: put_line("The vector of matrices :"); put(lv);
56: end Test_Standard_VecMat_io;
57:
58: procedure Random_Test_Standard_Solver
59: ( n,m : in natural; low,upp : in integer ) is
60:
61: use Standard_Integer_Vectors,Standard_Integer_Vectors_io;
62: use Standard_Integer_Matrices;
63: use Standard_Integer_Linear_Solvers;
64:
65: mat : Matrix(1..n,1..m) := Random_Matrix(n,m,low,upp);
66: wrk : Matrix(1..n,1..m) := mat;
67: sol : Vector(1..m);
68: res : Vector(1..n);
69:
70: begin
71: Upper_Triangulate(wrk);
72: Solve0(wrk,sol);
73: res := mat*sol;
74: put("The residual : "); put(res);
75: put(" of solution : "); put(sol); new_line;
76: end Random_Test_Standard_Solver;
77:
78: procedure Random_Test_Multprec_Solver ( n,m,sz : in natural ) is
79:
80: use Multprec_Integer_Vectors,Multprec_Integer_Vectors_io;
81: use Multprec_Integer_Matrices,Multprec_Integer_Matrices_io;
82: use Multprec_Integer_Linear_Solvers;
83:
84: mat : Matrix(1..n,1..m) := Random_Matrix(n,m,sz);
85: wrk : Matrix(1..n,1..m);
86: sol : Vector(1..m);
87: res : Vector(1..n);
88:
89: begin
90: Copy(mat,wrk);
91: Upper_Triangulate(wrk);
92: Solve0(wrk,sol);
93: res := mat*sol;
94: put("The residual : "); put(res);
95: put(" of solution : "); put(sol); new_line;
96: end Random_Test_Multprec_Solver;
97:
98: procedure Random_Test_Standard_Solvers is
99:
100: n,m,nb : natural;
101: low,upp : integer;
102:
103: begin
104: put("Give number of tests : "); get(nb);
105: put("Give number of rows : "); get(n);
106: put("Give number of columns : "); get(m);
107: put("Give lower bound for numbers : "); get(low);
108: put("Give upper bound for numbers : "); get(upp);
109: for i in 1..nb loop
110: Random_Test_Standard_Solver(n,m,low,upp);
111: end loop;
112: end Random_Test_Standard_Solvers;
113:
114: procedure Random_Test_Multprec_Solvers is
115:
116: n,m,nb,sz : natural;
117:
118: begin
119: put("Give number of tests : "); get(nb);
120: put("Give number of rows : "); get(n);
121: put("Give number of columns : "); get(m);
122: put("Give the size of the numbers : "); get(sz);
123: for i in 1..nb loop
124: Random_Test_Multprec_Solver(n,m,sz);
125: end loop;
126: end Random_Test_Multprec_Solvers;
127:
128: procedure Interactive_Test_Standard_Solvers is
129:
130: use Standard_Integer_Vectors,Standard_Integer_Vectors_io;
131: use Standard_Integer_Matrices,Standard_Integer_Matrices_io;
132: use Standard_Integer_Linear_Solvers;
133:
134: n,m : natural;
135:
136: begin
137: put("Give the number of rows : "); get(n);
138: put("Give the number of columns : "); get(m);
139: declare
140: sol : Vector(1..m) := (1..m => 0);
141: res : Vector(1..n);
142: mat,wrk : Matrix(1..n,1..m);
143: l : Matrix(1..n,1..n);
144: begin
145: put("Give "); put(n,1); put("x"); put(m,1);
146: put_line(" integer matrix : "); get(mat);
147: put_line("Your matrix : "); put(mat);
148: wrk := mat;
149: Upper_Triangulate(l,wrk);
150: put_line("The matrix in upper triangular form : "); put(wrk);
151: put_line("The transformation matrix T : "); put(l);
152: put_line("product of T and original matrix : "); put(l*mat);
153: Solve0(wrk,sol);
154: put_line("The solution of the homogeneous system : ");
155: put(sol); new_line;
156: res := mat*sol;
157: put("The residual : "); put(res); new_line;
158: end;
159: end Interactive_Test_Standard_Solvers;
160:
161: procedure Test_Multprec_io is
162:
163: use Multprec_Integer_Matrices,Multprec_Integer_Matrices_io;
164:
165: n,m : natural;
166:
167: begin
168: put("Give the number of rows : "); get(n);
169: put("Give the number of columns : "); get(m);
170: declare
171: mat : Matrix(1..n,1..m);
172: begin
173: put("Give "); put(n,1); put("x"); put(m,1);
174: put_line(" integer matrix : "); get(mat);
175: put_line("Your matrix : "); put(mat); new_line;
176: end;
177: end Test_Multprec_io;
178:
179: procedure Interactive_Test_Multprec_Solvers is
180:
181: use Multprec_Integer_Vectors,Multprec_Integer_Vectors_io;
182: use Multprec_Integer_Matrices,Multprec_Integer_Matrices_io;
183: use Multprec_Integer_Linear_Solvers;
184:
185: n,m : natural;
186:
187: begin
188: put("Give the number of rows : "); get(n);
189: put("Give the number of columns : "); get(m);
190: declare
191: sol : Vector(1..m);
192: res : Vector(1..n);
193: mat,wrk : Matrix(1..n,1..m);
194: l : Matrix(1..n,1..n);
195: begin
196: put("Give "); put(n,1); put("x"); put(m,1);
197: put_line(" integer matrix : "); get(mat);
198: put_line("Your matrix : "); put(mat);
199: Copy(mat,wrk);
200: Upper_Triangulate(l,wrk);
201: put_line("The matrix in upper triangular form : "); put(wrk);
202: put_line("The transformation matrix T : "); put(l);
203: put_line("product of T and original matrix : "); put(l*mat);
204: Solve0(wrk,sol);
205: put_line("The solution of the homogeneous system : ");
206: put(sol); new_line;
207: res := mat*sol;
208: put("The residual : "); put(res); new_line;
209: end;
210: end Interactive_Test_Multprec_Solvers;
211:
212: procedure Test_Multprec_Matrix_Vector_Product is
213:
214: use Multprec_Integer_Vectors,Multprec_Integer_Vectors_io;
215: use Multprec_Integer_Matrices,Multprec_Integer_Matrices_io;
216:
217: n,m : natural;
218:
219: begin
220: put("Give the number of rows : "); get(n);
221: put("Give the number of columns : "); get(m);
222: declare
223: mat : Matrix(1..n,1..m);
224: vec : Vector(1..m);
225: prod : Vector(1..n);
226: begin
227: put("Give "); put(n,1); put("x"); put(m,1);
228: put_line(" integer matrix : "); get(mat);
229: put_line("Your matrix : "); put(mat);
230: put("Give an " ); put(m,1); put("-vector : "); get(vec);
231: put("Your vector : "); put(vec); new_line;
232: prod := mat*vec;
233: put_line("The matrix-vector product : "); put(prod); new_line;
234: end;
235: end Test_Multprec_Matrix_Vector_Product;
236:
237: procedure Main is
238:
239: ans : character;
240:
241: begin
242: new_line;
243: put_line("Interactive testing of matrices of integer numbers");
244: new_line;
245: loop
246: put_line("Choose one of the following : ");
247: put_line(" 0. exit this program.");
248: put_line(" 1. io of matrices of standard numbers.");
249: put_line(" 2. io of vectors of matrices of standard numbers.");
250: put_line(" 3. solve given linear systems of standard numbers.");
251: put_line(" 4. solve random linear systems of standard numbers.");
252: put_line(" 5. io of matrices of multi-precision numbers.");
253: put_line(" 6. solve given linear systems of multi-precision numbers.");
254: put_line(" 7. solve random linear systems of multi-precision numbers.");
255: put_line(" 8. test multi-precision matrix-vector product.");
256: put("Make your choice (0,1,2,3,4,5,6,7 or 8) : "); get(ans);
257: exit when (ans = '0');
258: case ans is
259: when '1' => Test_Standard_io;
260: when '2' => Test_Standard_VecMat_io;
261: when '3' => Interactive_Test_Standard_Solvers;
262: when '4' => Random_Test_Standard_Solvers;
263: when '5' => Test_Multprec_io;
264: when '6' => Interactive_Test_Multprec_Solvers;
265: when '7' => Random_Test_Multprec_Solvers;
266: when '8' => Test_Multprec_Matrix_Vector_Product;
267: when others => null;
268: end case;
269: end loop;
270: end Main;
271:
272: begin
273: Main;
274: end ts_intmat;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>