Revert "lists: Add list literal doc example."
[factor.git] / basis / math / matrices / matrices-tests.factor
blobf82fef7c857f2ffd10d7339f69e81e25d632a157
1 USING: math.matrices math.vectors tools.test math kernel ;
2 IN: math.matrices.tests
5     { { 0 } { 0 } { 0 } }
6 } [
7     3 1 zero-matrix
8 ] unit-test
11     { { 1 0 0 }
12        { 0 1 0 }
13        { 0 0 1 } }
14 } [
15     3 identity-matrix
16 ] unit-test
19     { { 1 0 0 }
20        { 0 2 0 }
21        { 0 0 3 } }
22 } [
23     { 1 2 3 } diagonal-matrix
24 ] unit-test
27     { { 1 1 1 }
28       { 4 2 1 }
29       { 9 3 1 }
30       { 25 5 1 } }
31 } [
32     { 1 2 3 5 } 3 vandermonde-matrix
33 ] unit-test
36     {
37         { 1 0 0 }
38         { 0 1 0 }
39         { 0 0 1 }
40     }
41 } [
42     3 3 0 eye
43 ] unit-test
46     {
47         { 0 1 0 }
48         { 0 0 1 }
49         { 0 0 0 }
50     }
51 } [
52     3 3 1 eye
53 ] unit-test
56     {
57         { 0 0 0 }
58         { 1 0 0 }
59         { 0 1 0 }
60     }
61 } [
62     3 3 -1 eye
63 ] unit-test
66     {
67         { 1 0 0 0 }
68         { 0 1 0 0 }
69         { 0 0 1 0 }
70     }
71 } [
72     3 4 0 eye
73 ] unit-test
76     {
77         { 0 1 0 }
78         { 0 0 1 }
79         { 0 0 0 }
80         { 0 0 0 }
81     }
82 } [
83     4 3 1 eye
84 ] unit-test
87     {
88         { 0 0 0 }
89         { 1 0 0 }
90         { 0 1 0 }
91         { 0 0 1 }
92     }
93 } [
94     4 3 -1 eye
95 ] unit-test
98     { { 1   1/2 1/3 1/4 }
99       { 1/2 1/3 1/4 1/5 }
100       { 1/3 1/4 1/5 1/6 }
101     }
102 } [ 3 4 hilbert-matrix ] unit-test
105     { { 1 2 3 4 }
106       { 2 1 2 3 }
107       { 3 2 1 2 }
108       { 4 3 2 1 } }
109 } [ 4 toeplitz-matrix ] unit-test
112     { { 1 2 3 4 }
113       { 2 3 4 0 }
114       { 3 4 0 0 }
115       { 4 0 0 0 } }
116 } [ 4 hankel-matrix ] unit-test
119     { { 1 0 4 }
120       { 0 7 0 }
121       { 6 0 3 } }
122 } [
123     { { 1 0 0 }
124       { 0 2 0 }
125       { 0 0 3 } }
127     { { 0 0 4 }
128       { 0 5 0 }
129       { 6 0 0 } }
131     m+
132 ] unit-test
135     { { 1 0 4 }
136        { 0 7 0 }
137        { 6 0 3 } }
138 } [
139     { { 1 0 0 }
140        { 0 2 0 }
141        { 0 0 3 } }
143     { { 0 0 -4 }
144        { 0 -5 0 }
145        { -6 0 0 } }
147     m-
148 ] unit-test
151     { 10 20 30 }
152 } [
153     10 { 1 2 3 } n*v
154 ] unit-test
157     { 3 4 }
158 } [
159     { { 1 0 }
160        { 0 1 } }
162     { 3 4 }
164     m.v
165 ] unit-test
168     { 4 3 }
169 } [
170     { { 0 1 }
171        { 1 0 } }
173     { 3 4 }
175     m.v
176 ] unit-test
179     { { 6 } }
180 } [
181     { { 3 } } { { 2 } } m.
182 ] unit-test
185     { { 11 } }
186 } [
187     { { 1 3 } } { { 5 } { 2 } } m.
188 ] unit-test
191     { { 28 } }
192 } [
193     { { 2 4 6 } }
195     { { 1 }
196        { 2 }
197        { 3 } }
199     m.
200 ] unit-test
202 { { 0 0 1 } } [ { 1 0 0 } { 0 1 0 } cross ] unit-test
203 { { 1 0 0 } } [ { 0 1 0 } { 0 0 1 } cross ] unit-test
204 { { 0 1 0 } } [ { 0 0 1 } { 1 0 0 } cross ] unit-test
205 { { 0.0 -0.707 0.707 } } [ { 1.0 0.0 0.0 } { 0.0 0.707 0.707 } cross ] unit-test
206 { { 0 -2 2 } } [ { -1 -1 -1 } { 1 -1 -1 } cross ] unit-test
207 { { 1 0 0 } } [ { 1 1 0 } { 1 0 0 } proj ] unit-test
209 { { { 4181 6765 } { 6765 10946 } } }
210 [ { { 0 1 } { 1 1 } } 20 m^n ] unit-test
211 [ { { 0 1 } { 1 1 } } -20 m^n ] [ negative-power-matrix? ] must-fail-with
214     { { 0 5 0 10 } { 6 7 12 14 } { 0 15 0 20 } { 18 21 24 28 } }
216 [ { { 1 2 } { 3 4 } } { { 0 5 } { 6 7 } } kron ] unit-test
219     {
220         { 1 1 1 1 }
221         { 1 -1 1 -1 }
222         { 1 1 -1 -1 }
223         { 1 -1 -1 1 }
224     }
225 } [ { { 1 1 } { 1 -1 } } dup kron ] unit-test
228     {
229         { 1 1 1 1 1 1 1 1 }
230         { 1 -1 1 -1 1 -1 1 -1 }
231         { 1 1 -1 -1 1 1 -1 -1 }
232         { 1 -1 -1 1 1 -1 -1 1 }
233         { 1 1 1 1 -1 -1 -1 -1 }
234         { 1 -1 1 -1 -1 1 -1 1 }
235         { 1 1 -1 -1 -1 -1 1 1 }
236         { 1 -1 -1 1 -1 1 1 -1 }
237     }
238 } [ { { 1 1 } { 1 -1 } } dup dup kron kron ] unit-test
241     {
242         { 1 1 1 1 1 1 1 1 }
243         { 1 -1 1 -1 1 -1 1 -1 }
244         { 1 1 -1 -1 1 1 -1 -1 }
245         { 1 -1 -1 1 1 -1 -1 1 }
246         { 1 1 1 1 -1 -1 -1 -1 }
247         { 1 -1 1 -1 -1 1 -1 1 }
248         { 1 1 -1 -1 -1 -1 1 1 }
249         { 1 -1 -1 1 -1 1 1 -1 }
250     }
251 } [ { { 1 1 } { 1 -1 } } dup dup kron swap kron ] unit-test
254 ! kron is not generally commutative, make sure we have the right order
256     {
257         { 1 2 3 4 5 1 2 3 4 5 }
258         { 6 7 8 9 10 6 7 8 9 10 }
259         { 1 2 3 4 5 -1 -2 -3 -4 -5 }
260         { 6 7 8 9 10 -6 -7 -8 -9 -10 }
261     }
264     { { 1 1 } { 1 -1 } }
265     { { 1 2 3 4 5 } { 6 7 8 9 10 } } kron
266 ] unit-test
269     {
270         { 1 1 2 2 3 3 4 4 5 5 }
271         { 1 -1 2 -2 3 -3 4 -4 5 -5 }
272         { 6 6 7 7 8 8 9 9 10 10 }
273         { 6 -6 7 -7 8 -8 9 -9 10 -10 }
274     }
277     { { 1 1 } { 1 -1 } }
278     { { 1 2 3 4 5 } { 6 7 8 9 10 } } swap kron
279 ] unit-test
282     { { 5 10 15 }
283       { 6 12 18 }
284       { 7 14 21 } }
285 } [ { 5 6 7 } { 1 2 3 } outer ] unit-test
288 CONSTANT: test-points {
289     { 80  27  89 } { 80  27  88 } { 75  25  90 }
290     { 62  24  87 } { 62  22  87 } { 62  23  87 }
291     { 62  24  93 } { 62  24  93 } { 58  23  87 }
292     { 58  18  80 } { 58  18  89 } { 58  17  88 }
293     { 58  18  82 } { 58  19  93 } { 50  18  89 }
294     { 50  18  86 } { 50  19  72 } { 50  19  79 }
295     { 50  20  80 } { 56  20  82 } { 70  20  91 }
299     {
300         { 84+2/35 22+23/35 24+4/7 }
301         { 22+23/35 9+104/105 6+87/140 }
302         { 24+4/7 6+87/140 28+5/7 }
303     }
304 } [
305     test-points sample-cov-matrix
306 ] unit-test
309     {
310         { 80+8/147 21+85/147 23+59/147 }
311         { 21+85/147 9+227/441 6+15/49 }
312         { 23+59/147 6+15/49 27+17/49 }
313     }
314 } [
315     test-points population-cov-matrix
316 ] unit-test
319     {
320         { 5 5 }
321         { 5 5 }
322     }
323 } [
324     2 2 5 <matrix>
325 ] unit-test
328     {
329         { 5 5 }
330         { 5 5 }
331     }
332 } [
333     2 2 [ 5 ] make-matrix
334 ] unit-test
337     {
338         { 0 1 2 }
339         { 1 2 3 }
340     }
341 } [
342     2 3 [ + ] make-matrix-with-indices
343 ] unit-test
346     {
347         { 0 1 }
348         { 0 1 }
349     }
350 } [
351     2 square-rows
352 ] unit-test
355     {
356         { 0 0 }
357         { 1 1 }
358     }
359 } [
360     2 square-cols
361 ] unit-test
364     {
365         { 5 6 }
366         { 5 6 }
367     }
368 } [
369     { 5 6 } square-rows
370 ] unit-test
373     {
374         { 5 5 }
375         { 6 6 }
376     }
377 } [
378     { 5 6 } square-cols
379 ] unit-test
381 { t } [ { } square-matrix? ] unit-test
382 { t } [ { { 1 } } square-matrix? ] unit-test
383 { t } [ { { 1 2 } { 3 4 } } square-matrix? ] unit-test
384 { f } [ { { 1 } { 2 3 } } square-matrix? ] unit-test
385 { f } [ { { 1 2 } } square-matrix? ] unit-test
387 { 9 }
388 [ { { 2 -2 1 } { 1 3 -1 } { 2 -4 2 } } m-1norm ] unit-test
390 { 8 }
391 [ { { 2 -2 1 } { 1 3 -1 } { 2 -4 2 } } m-infinity-norm ] unit-test
393 { 2.0 }
394 [ { { 1 1 } { 1 1 } } frobenius-norm ] unit-test