1% Test file for Sparse Matrices and the Linear Algebra Package for
2% Sparse Matrices.
3
4% Author: Stephen Scowcroft.                    Date: June 1995.
5
6% Firstly, the matrices need to be created.
7
8% This is the standard way to create a sparse matrix.
9
10% Create a sparse matrix.
11
12sparse mat1(5,5);
13
14
15
16%Fill the sparse matrix with data
17
18mat1(1,1):=2;
19
20
21mat1(1,1) := 2
22
23mat1(2,2):=4;
24
25
26mat1(2,2) := 4
27
28mat1(3,3):=6;
29
30
31mat1(3,3) := 6
32
33mat1(4,4):=8;
34
35
36mat1(4,4) := 8
37
38mat1(5,5):=10;
39
40
41mat1(5,5) := 10
42
43
44sparse mat4(5,5);
45
46
47
48mat4(1,1):=x;
49
50
51mat4(1,1) := x
52
53mat4(2,2):=x;
54
55
56mat4(2,2) := x
57
58mat4(3,3):=x;
59
60
61mat4(3,3) := x
62
63mat4(4,4):=x;
64
65
66mat4(4,4) := x
67
68mat4(5,5):=x;
69
70
71mat4(5,5) := x
72
73
74% A small function to automatically fill a sparse matrix with data.
75
76procedure makematsp(nam,row);
77 begin;
78  sparse nam(row,row);
79    for i := 1:row do <<nam(i,i):=i>>
80 end;
81
82
83makematsp
84
85
86clear mat2;
87
88
89makematsp(mat2,100);
90
91
92
93% Matrices created in the standard Matrix way.
94
95zz1:=mat((1,2),(3,4));
96
97
98       [1  2]
99zz1 := [    ]
100       [3  4]
101
102
103zz2:=mat((x,x),(x,x));
104
105
106       [x  x]
107zz2 := [    ]
108       [x  x]
109
110
111zz3:=mat((i+1,i+2,i+3),(4,5,2),(1,i,0));
112
113
114       [i + 1  i + 2  i + 3]
115       [                   ]
116zz3 := [  4      5      2  ]
117       [                   ]
118       [  1      i      0  ]
119
120
121
122% I have taken advantage of the Linear Algebra Package (Matt Rebbeck)
123% in order to create some Sparse Matrices.
124
125mat3:=diagonal(zz1,zz1,zz1);
126
127
128        [1  2  0  0  0  0]
129        [                ]
130        [3  4  0  0  0  0]
131        [                ]
132        [0  0  1  2  0  0]
133mat3 := [                ]
134        [0  0  3  4  0  0]
135        [                ]
136        [0  0  0  0  1  2]
137        [                ]
138        [0  0  0  0  3  4]
139
140
141mat5:=band_matrix({1,3,1},100)$
142
143
144mat6:=diagonal(zz3,zz3);
145
146
147        [i + 1  i + 2  i + 3    0      0      0  ]
148        [                                        ]
149        [  4      5      2      0      0      0  ]
150        [                                        ]
151        [  1      i      0      0      0      0  ]
152mat6 := [                                        ]
153        [  0      0      0    i + 1  i + 2  i + 3]
154        [                                        ]
155        [  0      0      0      4      5      2  ]
156        [                                        ]
157        [  0      0      0      1      i      0  ]
158
159
160mat7:=band_matrix({a,b,c},4);
161
162
163        [b  c  0  0]
164        [          ]
165        [a  b  c  0]
166mat7 := [          ]
167        [0  a  b  c]
168        [          ]
169        [0  0  a  b]
170
171
172
173% These are then "translated" into the Sparse operator using the
174% function transmat.
175% This is a destructive function in the sense that the matrices are no
176% longer of type 'matrix but are now 'sparse.
177
178transmat mat3;
179
180
181transmat mat5;
182
183
184transmat mat6;
185
186
187transmat mat7;
188
189
190
191poly  := x^7+x^5+4*x^4+5*x^3+12;
192
193
194         7    5      4      3
195poly := x  + x  + 4*x  + 5*x  + 12
196
197poly1 := x^2+x*y^3+x*y*z^3+y*x+2+y*3;
198
199
200          2      3        3
201poly1 := x  + x*y  + x*y*z  + x*y + 3*y + 2
202
203
204% Firstly some basic matrix operations.
205% These are the same as the present matrix package
206
207mat1^-1;
208
209
210
211             1
212spm(1,1) := ---$
213             2
214
215             1
216spm(2,2) := ---$
217             4
218
219             1
220spm(3,3) := ---$
221             6
222
223             1
224spm(4,4) := ---$
225             8
226
227             1
228spm(5,5) := ----$
229             10
230
231mat4^-1;
232
233
234
235             1
236spm(1,1) := ---$
237             x
238
239             1
240spm(2,2) := ---$
241             x
242
243             1
244spm(3,3) := ---$
245             x
246
247             1
248spm(4,4) := ---$
249             x
250
251             1
252spm(5,5) := ---$
253             x
254
255mat2 + mat5$
256
257
258mat2 - mat5$
259
260
261mat1-mat1;
262
263
264"Empty Matrix"
265
266mat4 + mat1;
267
268
269
270spm(1,1) := x + 2$
271
272spm(2,2) := x + 4$
273
274spm(3,3) := x + 6$
275
276spm(4,4) := x + 8$
277
278spm(5,5) := x + 10$
279
280mat4 * mat1;
281
282
283
284spm(1,1) := 2*x$
285
286spm(2,2) := 4*x$
287
288spm(3,3) := 6*x$
289
290spm(4,4) := 8*x$
291
292spm(5,5) := 10*x$
293
294
2952*mat1 + (3*mat4 + mat1);
296
297
298
299spm(1,1) := 3*(x + 2)$
300
301spm(2,2) := 3*(x + 4)$
302
303spm(3,3) := 3*(x + 6)$
304
305spm(4,4) := 3*(x + 8)$
306
307spm(5,5) := 3*(x + 10)$
308
309% It is also possible to combine both 'matrix and 'sparse type matrices
310% in these operations.
311
312pp:=band_matrix({1,3,1},100)$
313
314
315mat5*pp;
316
317
318
319spm(1,1) := 10$
320
321spm(1,2) := 6$
322
323spm(1,3) := 1$
324
325spm(2,1) := 6$
326
327spm(2,2) := 11$
328
329spm(2,3) := 6$
330
331spm(2,4) := 1$
332
333spm(3,1) := 1$
334
335spm(3,2) := 6$
336
337spm(3,3) := 11$
338
339spm(3,4) := 6$
340
341spm(3,5) := 1$
342
343spm(4,2) := 1$
344
345spm(4,3) := 6$
346
347spm(4,4) := 11$
348
349spm(4,5) := 6$
350
351spm(4,6) := 1$
352
353spm(5,3) := 1$
354
355spm(5,4) := 6$
356
357spm(5,5) := 11$
358
359spm(5,6) := 6$
360
361spm(5,7) := 1$
362
363spm(6,4) := 1$
364
365spm(6,5) := 6$
366
367spm(6,6) := 11$
368
369spm(6,7) := 6$
370
371spm(6,8) := 1$
372
373spm(7,5) := 1$
374
375spm(7,6) := 6$
376
377spm(7,7) := 11$
378
379spm(7,8) := 6$
380
381spm(7,9) := 1$
382
383spm(8,6) := 1$
384
385spm(8,7) := 6$
386
387spm(8,8) := 11$
388
389spm(8,9) := 6$
390
391spm(8,10) := 1$
392
393spm(9,7) := 1$
394
395spm(9,8) := 6$
396
397spm(9,9) := 11$
398
399spm(9,10) := 6$
400
401spm(9,11) := 1$
402
403spm(10,8) := 1$
404
405spm(10,9) := 6$
406
407spm(10,10) := 11$
408
409spm(10,11) := 6$
410
411spm(10,12) := 1$
412
413spm(11,9) := 1$
414
415spm(11,10) := 6$
416
417spm(11,11) := 11$
418
419spm(11,12) := 6$
420
421spm(11,13) := 1$
422
423spm(12,10) := 1$
424
425spm(12,11) := 6$
426
427spm(12,12) := 11$
428
429spm(12,13) := 6$
430
431spm(12,14) := 1$
432
433spm(13,11) := 1$
434
435spm(13,12) := 6$
436
437spm(13,13) := 11$
438
439spm(13,14) := 6$
440
441spm(13,15) := 1$
442
443spm(14,12) := 1$
444
445spm(14,13) := 6$
446
447spm(14,14) := 11$
448
449spm(14,15) := 6$
450
451spm(14,16) := 1$
452
453spm(15,13) := 1$
454
455spm(15,14) := 6$
456
457spm(15,15) := 11$
458
459spm(15,16) := 6$
460
461spm(15,17) := 1$
462
463spm(16,14) := 1$
464
465spm(16,15) := 6$
466
467spm(16,16) := 11$
468
469spm(16,17) := 6$
470
471spm(16,18) := 1$
472
473spm(17,15) := 1$
474
475spm(17,16) := 6$
476
477spm(17,17) := 11$
478
479spm(17,18) := 6$
480
481spm(17,19) := 1$
482
483spm(18,16) := 1$
484
485spm(18,17) := 6$
486
487spm(18,18) := 11$
488
489spm(18,19) := 6$
490
491spm(18,20) := 1$
492
493spm(19,17) := 1$
494
495spm(19,18) := 6$
496
497spm(19,19) := 11$
498
499spm(19,20) := 6$
500
501spm(19,21) := 1$
502
503spm(20,18) := 1$
504
505spm(20,19) := 6$
506
507spm(20,20) := 11$
508
509spm(20,21) := 6$
510
511spm(20,22) := 1$
512
513spm(21,19) := 1$
514
515spm(21,20) := 6$
516
517spm(21,21) := 11$
518
519spm(21,22) := 6$
520
521spm(21,23) := 1$
522
523spm(22,20) := 1$
524
525spm(22,21) := 6$
526
527spm(22,22) := 11$
528
529spm(22,23) := 6$
530
531spm(22,24) := 1$
532
533spm(23,21) := 1$
534
535spm(23,22) := 6$
536
537spm(23,23) := 11$
538
539spm(23,24) := 6$
540
541spm(23,25) := 1$
542
543spm(24,22) := 1$
544
545spm(24,23) := 6$
546
547spm(24,24) := 11$
548
549spm(24,25) := 6$
550
551spm(24,26) := 1$
552
553spm(25,23) := 1$
554
555spm(25,24) := 6$
556
557spm(25,25) := 11$
558
559spm(25,26) := 6$
560
561spm(25,27) := 1$
562
563spm(26,24) := 1$
564
565spm(26,25) := 6$
566
567spm(26,26) := 11$
568
569spm(26,27) := 6$
570
571spm(26,28) := 1$
572
573spm(27,25) := 1$
574
575spm(27,26) := 6$
576
577spm(27,27) := 11$
578
579spm(27,28) := 6$
580
581spm(27,29) := 1$
582
583spm(28,26) := 1$
584
585spm(28,27) := 6$
586
587spm(28,28) := 11$
588
589spm(28,29) := 6$
590
591spm(28,30) := 1$
592
593spm(29,27) := 1$
594
595spm(29,28) := 6$
596
597spm(29,29) := 11$
598
599spm(29,30) := 6$
600
601spm(29,31) := 1$
602
603spm(30,28) := 1$
604
605spm(30,29) := 6$
606
607spm(30,30) := 11$
608
609spm(30,31) := 6$
610
611spm(30,32) := 1$
612
613spm(31,29) := 1$
614
615spm(31,30) := 6$
616
617spm(31,31) := 11$
618
619spm(31,32) := 6$
620
621spm(31,33) := 1$
622
623spm(32,30) := 1$
624
625spm(32,31) := 6$
626
627spm(32,32) := 11$
628
629spm(32,33) := 6$
630
631spm(32,34) := 1$
632
633spm(33,31) := 1$
634
635spm(33,32) := 6$
636
637spm(33,33) := 11$
638
639spm(33,34) := 6$
640
641spm(33,35) := 1$
642
643spm(34,32) := 1$
644
645spm(34,33) := 6$
646
647spm(34,34) := 11$
648
649spm(34,35) := 6$
650
651spm(34,36) := 1$
652
653spm(35,33) := 1$
654
655spm(35,34) := 6$
656
657spm(35,35) := 11$
658
659spm(35,36) := 6$
660
661spm(35,37) := 1$
662
663spm(36,34) := 1$
664
665spm(36,35) := 6$
666
667spm(36,36) := 11$
668
669spm(36,37) := 6$
670
671spm(36,38) := 1$
672
673spm(37,35) := 1$
674
675spm(37,36) := 6$
676
677spm(37,37) := 11$
678
679spm(37,38) := 6$
680
681spm(37,39) := 1$
682
683spm(38,36) := 1$
684
685spm(38,37) := 6$
686
687spm(38,38) := 11$
688
689spm(38,39) := 6$
690
691spm(38,40) := 1$
692
693spm(39,37) := 1$
694
695spm(39,38) := 6$
696
697spm(39,39) := 11$
698
699spm(39,40) := 6$
700
701spm(39,41) := 1$
702
703spm(40,38) := 1$
704
705spm(40,39) := 6$
706
707spm(40,40) := 11$
708
709spm(40,41) := 6$
710
711spm(40,42) := 1$
712
713spm(41,39) := 1$
714
715spm(41,40) := 6$
716
717spm(41,41) := 11$
718
719spm(41,42) := 6$
720
721spm(41,43) := 1$
722
723spm(42,40) := 1$
724
725spm(42,41) := 6$
726
727spm(42,42) := 11$
728
729spm(42,43) := 6$
730
731spm(42,44) := 1$
732
733spm(43,41) := 1$
734
735spm(43,42) := 6$
736
737spm(43,43) := 11$
738
739spm(43,44) := 6$
740
741spm(43,45) := 1$
742
743spm(44,42) := 1$
744
745spm(44,43) := 6$
746
747spm(44,44) := 11$
748
749spm(44,45) := 6$
750
751spm(44,46) := 1$
752
753spm(45,43) := 1$
754
755spm(45,44) := 6$
756
757spm(45,45) := 11$
758
759spm(45,46) := 6$
760
761spm(45,47) := 1$
762
763spm(46,44) := 1$
764
765spm(46,45) := 6$
766
767spm(46,46) := 11$
768
769spm(46,47) := 6$
770
771spm(46,48) := 1$
772
773spm(47,45) := 1$
774
775spm(47,46) := 6$
776
777spm(47,47) := 11$
778
779spm(47,48) := 6$
780
781spm(47,49) := 1$
782
783spm(48,46) := 1$
784
785spm(48,47) := 6$
786
787spm(48,48) := 11$
788
789spm(48,49) := 6$
790
791spm(48,50) := 1$
792
793spm(49,47) := 1$
794
795spm(49,48) := 6$
796
797spm(49,49) := 11$
798
799spm(49,50) := 6$
800
801spm(49,51) := 1$
802
803spm(50,48) := 1$
804
805spm(50,49) := 6$
806
807spm(50,50) := 11$
808
809spm(50,51) := 6$
810
811spm(50,52) := 1$
812
813spm(51,49) := 1$
814
815spm(51,50) := 6$
816
817spm(51,51) := 11$
818
819spm(51,52) := 6$
820
821spm(51,53) := 1$
822
823spm(52,50) := 1$
824
825spm(52,51) := 6$
826
827spm(52,52) := 11$
828
829spm(52,53) := 6$
830
831spm(52,54) := 1$
832
833spm(53,51) := 1$
834
835spm(53,52) := 6$
836
837spm(53,53) := 11$
838
839spm(53,54) := 6$
840
841spm(53,55) := 1$
842
843spm(54,52) := 1$
844
845spm(54,53) := 6$
846
847spm(54,54) := 11$
848
849spm(54,55) := 6$
850
851spm(54,56) := 1$
852
853spm(55,53) := 1$
854
855spm(55,54) := 6$
856
857spm(55,55) := 11$
858
859spm(55,56) := 6$
860
861spm(55,57) := 1$
862
863spm(56,54) := 1$
864
865spm(56,55) := 6$
866
867spm(56,56) := 11$
868
869spm(56,57) := 6$
870
871spm(56,58) := 1$
872
873spm(57,55) := 1$
874
875spm(57,56) := 6$
876
877spm(57,57) := 11$
878
879spm(57,58) := 6$
880
881spm(57,59) := 1$
882
883spm(58,56) := 1$
884
885spm(58,57) := 6$
886
887spm(58,58) := 11$
888
889spm(58,59) := 6$
890
891spm(58,60) := 1$
892
893spm(59,57) := 1$
894
895spm(59,58) := 6$
896
897spm(59,59) := 11$
898
899spm(59,60) := 6$
900
901spm(59,61) := 1$
902
903spm(60,58) := 1$
904
905spm(60,59) := 6$
906
907spm(60,60) := 11$
908
909spm(60,61) := 6$
910
911spm(60,62) := 1$
912
913spm(61,59) := 1$
914
915spm(61,60) := 6$
916
917spm(61,61) := 11$
918
919spm(61,62) := 6$
920
921spm(61,63) := 1$
922
923spm(62,60) := 1$
924
925spm(62,61) := 6$
926
927spm(62,62) := 11$
928
929spm(62,63) := 6$
930
931spm(62,64) := 1$
932
933spm(63,61) := 1$
934
935spm(63,62) := 6$
936
937spm(63,63) := 11$
938
939spm(63,64) := 6$
940
941spm(63,65) := 1$
942
943spm(64,62) := 1$
944
945spm(64,63) := 6$
946
947spm(64,64) := 11$
948
949spm(64,65) := 6$
950
951spm(64,66) := 1$
952
953spm(65,63) := 1$
954
955spm(65,64) := 6$
956
957spm(65,65) := 11$
958
959spm(65,66) := 6$
960
961spm(65,67) := 1$
962
963spm(66,64) := 1$
964
965spm(66,65) := 6$
966
967spm(66,66) := 11$
968
969spm(66,67) := 6$
970
971spm(66,68) := 1$
972
973spm(67,65) := 1$
974
975spm(67,66) := 6$
976
977spm(67,67) := 11$
978
979spm(67,68) := 6$
980
981spm(67,69) := 1$
982
983spm(68,66) := 1$
984
985spm(68,67) := 6$
986
987spm(68,68) := 11$
988
989spm(68,69) := 6$
990
991spm(68,70) := 1$
992
993spm(69,67) := 1$
994
995spm(69,68) := 6$
996
997spm(69,69) := 11$
998
999spm(69,70) := 6$
1000
1001spm(69,71) := 1$
1002
1003spm(70,68) := 1$
1004
1005spm(70,69) := 6$
1006
1007spm(70,70) := 11$
1008
1009spm(70,71) := 6$
1010
1011spm(70,72) := 1$
1012
1013spm(71,69) := 1$
1014
1015spm(71,70) := 6$
1016
1017spm(71,71) := 11$
1018
1019spm(71,72) := 6$
1020
1021spm(71,73) := 1$
1022
1023spm(72,70) := 1$
1024
1025spm(72,71) := 6$
1026
1027spm(72,72) := 11$
1028
1029spm(72,73) := 6$
1030
1031spm(72,74) := 1$
1032
1033spm(73,71) := 1$
1034
1035spm(73,72) := 6$
1036
1037spm(73,73) := 11$
1038
1039spm(73,74) := 6$
1040
1041spm(73,75) := 1$
1042
1043spm(74,72) := 1$
1044
1045spm(74,73) := 6$
1046
1047spm(74,74) := 11$
1048
1049spm(74,75) := 6$
1050
1051spm(74,76) := 1$
1052
1053spm(75,73) := 1$
1054
1055spm(75,74) := 6$
1056
1057spm(75,75) := 11$
1058
1059spm(75,76) := 6$
1060
1061spm(75,77) := 1$
1062
1063spm(76,74) := 1$
1064
1065spm(76,75) := 6$
1066
1067spm(76,76) := 11$
1068
1069spm(76,77) := 6$
1070
1071spm(76,78) := 1$
1072
1073spm(77,75) := 1$
1074
1075spm(77,76) := 6$
1076
1077spm(77,77) := 11$
1078
1079spm(77,78) := 6$
1080
1081spm(77,79) := 1$
1082
1083spm(78,76) := 1$
1084
1085spm(78,77) := 6$
1086
1087spm(78,78) := 11$
1088
1089spm(78,79) := 6$
1090
1091spm(78,80) := 1$
1092
1093spm(79,77) := 1$
1094
1095spm(79,78) := 6$
1096
1097spm(79,79) := 11$
1098
1099spm(79,80) := 6$
1100
1101spm(79,81) := 1$
1102
1103spm(80,78) := 1$
1104
1105spm(80,79) := 6$
1106
1107spm(80,80) := 11$
1108
1109spm(80,81) := 6$
1110
1111spm(80,82) := 1$
1112
1113spm(81,79) := 1$
1114
1115spm(81,80) := 6$
1116
1117spm(81,81) := 11$
1118
1119spm(81,82) := 6$
1120
1121spm(81,83) := 1$
1122
1123spm(82,80) := 1$
1124
1125spm(82,81) := 6$
1126
1127spm(82,82) := 11$
1128
1129spm(82,83) := 6$
1130
1131spm(82,84) := 1$
1132
1133spm(83,81) := 1$
1134
1135spm(83,82) := 6$
1136
1137spm(83,83) := 11$
1138
1139spm(83,84) := 6$
1140
1141spm(83,85) := 1$
1142
1143spm(84,82) := 1$
1144
1145spm(84,83) := 6$
1146
1147spm(84,84) := 11$
1148
1149spm(84,85) := 6$
1150
1151spm(84,86) := 1$
1152
1153spm(85,83) := 1$
1154
1155spm(85,84) := 6$
1156
1157spm(85,85) := 11$
1158
1159spm(85,86) := 6$
1160
1161spm(85,87) := 1$
1162
1163spm(86,84) := 1$
1164
1165spm(86,85) := 6$
1166
1167spm(86,86) := 11$
1168
1169spm(86,87) := 6$
1170
1171spm(86,88) := 1$
1172
1173spm(87,85) := 1$
1174
1175spm(87,86) := 6$
1176
1177spm(87,87) := 11$
1178
1179spm(87,88) := 6$
1180
1181spm(87,89) := 1$
1182
1183spm(88,86) := 1$
1184
1185spm(88,87) := 6$
1186
1187spm(88,88) := 11$
1188
1189spm(88,89) := 6$
1190
1191spm(88,90) := 1$
1192
1193spm(89,87) := 1$
1194
1195spm(89,88) := 6$
1196
1197spm(89,89) := 11$
1198
1199spm(89,90) := 6$
1200
1201spm(89,91) := 1$
1202
1203spm(90,88) := 1$
1204
1205spm(90,89) := 6$
1206
1207spm(90,90) := 11$
1208
1209spm(90,91) := 6$
1210
1211spm(90,92) := 1$
1212
1213spm(91,89) := 1$
1214
1215spm(91,90) := 6$
1216
1217spm(91,91) := 11$
1218
1219spm(91,92) := 6$
1220
1221spm(91,93) := 1$
1222
1223spm(92,90) := 1$
1224
1225spm(92,91) := 6$
1226
1227spm(92,92) := 11$
1228
1229spm(92,93) := 6$
1230
1231spm(92,94) := 1$
1232
1233spm(93,91) := 1$
1234
1235spm(93,92) := 6$
1236
1237spm(93,93) := 11$
1238
1239spm(93,94) := 6$
1240
1241spm(93,95) := 1$
1242
1243spm(94,92) := 1$
1244
1245spm(94,93) := 6$
1246
1247spm(94,94) := 11$
1248
1249spm(94,95) := 6$
1250
1251spm(94,96) := 1$
1252
1253spm(95,93) := 1$
1254
1255spm(95,94) := 6$
1256
1257spm(95,95) := 11$
1258
1259spm(95,96) := 6$
1260
1261spm(95,97) := 1$
1262
1263spm(96,94) := 1$
1264
1265spm(96,95) := 6$
1266
1267spm(96,96) := 11$
1268
1269spm(96,97) := 6$
1270
1271spm(96,98) := 1$
1272
1273spm(97,95) := 1$
1274
1275spm(97,96) := 6$
1276
1277spm(97,97) := 11$
1278
1279spm(97,98) := 6$
1280
1281spm(97,99) := 1$
1282
1283spm(98,96) := 1$
1284
1285spm(98,97) := 6$
1286
1287spm(98,98) := 11$
1288
1289spm(98,99) := 6$
1290
1291spm(98,100) := 1$
1292
1293spm(99,97) := 1$
1294
1295spm(99,98) := 6$
1296
1297spm(99,99) := 11$
1298
1299spm(99,100) := 6$
1300
1301spm(100,98) := 1$
1302
1303spm(100,99) := 6$
1304
1305spm(100,100) := 10$
1306
1307
1308mat5^2$
1309
1310
1311
1312det(mat1);
1313
1314
13153840
1316
1317det(mat4);
1318
1319
1320 5
1321x
1322
1323trace(mat1);
1324
1325
132630
1327
1328trace(mat4);
1329
1330
13315*x
1332
1333
1334rank(mat1);
1335
1336
13375
1338
1339rank mat5;
1340
1341
1342100
1343
1344
1345tp(mat3);
1346
1347
1348
1349spm(1,1) := 1$
1350
1351spm(1,2) := 3$
1352
1353spm(2,1) := 2$
1354
1355spm(2,2) := 4$
1356
1357spm(3,3) := 1$
1358
1359spm(3,4) := 3$
1360
1361spm(4,3) := 2$
1362
1363spm(4,4) := 4$
1364
1365spm(5,5) := 1$
1366
1367spm(5,6) := 3$
1368
1369spm(6,5) := 2$
1370
1371spm(6,6) := 4$
1372
1373
1374spmateigen(mat3,eta);
1375
1376
1377     2
1378{{eta  - 5*eta - 2,3,
1379
1380               2*arbcomplex(1)*(eta + 1)
1381  spm(1,1) := ---------------------------$
1382                       5*eta + 1
1383
1384  spm(2,1) := arbcomplex(1)$
1385
1386               2*arbcomplex(2)*(eta + 1)
1387  spm(3,1) := ---------------------------$
1388                       5*eta + 1
1389
1390  spm(4,1) := arbcomplex(2)$
1391
1392               2*arbcomplex(3)*(eta + 1)
1393  spm(5,1) := ---------------------------$
1394                       5*eta + 1
1395
1396  spm(6,1) := arbcomplex(3)$
1397  }}
1398
1399
1400% Next, tests for the Linear Algebra Package for Sparse Matrices.
1401
1402%Basic matrix manipulations.
1403
1404spadd_columns(mat1,1,2,5*y);
1405
1406
1407
1408spm(1,1) := 2$
1409
1410spm(1,2) := 10*y$
1411
1412spm(2,2) := 4$
1413
1414spm(3,3) := 6$
1415
1416spm(4,4) := 8$
1417
1418spm(5,5) := 10$
1419
1420spadd_rows(mat1,1,2,x);
1421
1422
1423
1424spm(1,1) := 2$
1425
1426spm(2,1) := 2*x$
1427
1428spm(2,2) := 4$
1429
1430spm(3,3) := 6$
1431
1432spm(4,4) := 8$
1433
1434spm(5,5) := 10$
1435
1436
1437spadd_to_columns(mat1,3,1000);
1438
1439
1440
1441spm(1,1) := 2$
1442
1443spm(1,3) := 1000$
1444
1445spm(2,2) := 4$
1446
1447spm(2,3) := 1000$
1448
1449spm(3,3) := 1006$
1450
1451spm(4,3) := 1000$
1452
1453spm(4,4) := 8$
1454
1455spm(5,3) := 1000$
1456
1457spm(5,5) := 10$
1458
1459spadd_to_columns(mat5,{1,2,3},y)$
1460
1461
1462spadd_to_rows(mat1,2,1000);
1463
1464
1465
1466spm(1,1) := 2$
1467
1468spm(2,1) := 1000$
1469
1470spm(2,2) := 1004$
1471
1472spm(2,3) := 1000$
1473
1474spm(2,4) := 1000$
1475
1476spm(2,5) := 1000$
1477
1478spm(3,3) := 6$
1479
1480spm(4,4) := 8$
1481
1482spm(5,5) := 10$
1483
1484spadd_to_rows(mat5,{1,2,3},x)$
1485
1486
1487
1488spaugment_columns(mat3,2);
1489
1490
1491
1492spm(1,1) := 2$
1493
1494spm(2,1) := 4$
1495
1496spaugment_columns(mat1,{1,2,5});
1497
1498
1499
1500spm(1,1) := 2$
1501
1502spm(2,2) := 4$
1503
1504spm(5,3) := 10$
1505
1506spstack_rows(mat1,3);
1507
1508
1509
1510spm(1,3) := 6$
1511
1512spstack_rows(mat1,{1,3,5});
1513
1514
1515
1516spm(1,1) := 2$
1517
1518spm(2,3) := 6$
1519
1520spm(3,5) := 10$
1521
1522
1523spchar_poly(mat1,x);
1524
1525
1526 5       4        3         2
1527x  - 30*x  + 340*x  - 1800*x  + 4384*x - 3840
1528
1529
1530spcol_dim(mat2);
1531
1532
1533100
1534
1535sprow_dim(mat1);
1536
1537
15385
1539
1540
1541spcopy_into(mat7,mat1,2,2);
1542
1543
1544
1545spm(1,1) := 2$
1546
1547spm(2,2) := b$
1548
1549spm(2,3) := c$
1550
1551spm(3,2) := a$
1552
1553spm(3,3) := b$
1554
1555spm(3,4) := c$
1556
1557spm(4,3) := a$
1558
1559spm(4,4) := b$
1560
1561spm(4,5) := c$
1562
1563spm(5,4) := a$
1564
1565spm(5,5) := b$
1566
1567spcopy_into(mat7,mat1,5,5);
1568
1569***** Error in spcopy_into: the matrix
1570
1571spm(1,1) := b$
1572
1573spm(1,2) := c$
1574
1575spm(2,1) := a$
1576
1577spm(2,2) := b$
1578
1579spm(2,3) := c$
1580
1581spm(3,2) := a$
1582
1583spm(3,3) := b$
1584
1585spm(3,4) := c$
1586
1587spm(4,3) := a$
1588
1589spm(4,4) := b$
1590      does not fit into
1591
1592spm(1,1) := 2$
1593
1594spm(2,2) := 4$
1595
1596spm(3,3) := 6$
1597
1598spm(4,4) := 8$
1599
1600spm(5,5) := 10$
1601      at position 5,5.
1602
1603spcopy_into(zz1,mat1,1,1);
1604
1605
1606
1607spm(1,1) := 1$
1608
1609spm(1,2) := 2$
1610
1611spm(2,1) := 3$
1612
1613spm(2,2) := 4$
1614
1615spm(3,3) := 6$
1616
1617spm(4,4) := 8$
1618
1619spm(5,5) := 10$
1620
1621
1622spdiagonal(3);
1623
1624
1625
1626spm(1,1) := 3$
1627
1628% spdiagonal can take both a list of arguments or just the arguments.
1629spdiagonal({mat2,mat5})$
1630
1631
1632spdiagonal(mat2,mat5)$
1633
1634
1635% spdiagonal can also take a mixture of 'sparse and 'matrix types.
1636spdiagonal(zz1,mat4,zz1);
1637
1638
1639
1640spm(1,1) := 1$
1641
1642spm(1,2) := 2$
1643
1644spm(2,1) := 3$
1645
1646spm(2,2) := 4$
1647
1648spm(3,3) := x$
1649
1650spm(4,4) := x$
1651
1652spm(5,5) := x$
1653
1654spm(6,6) := x$
1655
1656spm(7,7) := x$
1657
1658spm(8,8) := 1$
1659
1660spm(8,9) := 2$
1661
1662spm(9,8) := 3$
1663
1664spm(9,9) := 4$
1665
1666
1667spextend(mat1,3,2,x);
1668
1669
1670
1671spm(1,1) := 2$
1672
1673spm(2,2) := 4$
1674
1675spm(3,3) := 6$
1676
1677spm(4,4) := 8$
1678
1679spm(5,5) := 10$
1680
1681spm(6,6) := x$
1682
1683spm(6,7) := x$
1684
1685spm(7,6) := x$
1686
1687spm(7,7) := x$
1688
1689spm(8,6) := x$
1690
1691spm(8,7) := x$
1692
1693
1694spfind_companion(mat5,x);
1695
1696
1697 98   2
1698x  *(x  - 3*x - 1)
1699
1700
1701spget_columns(mat1,1);
1702
1703
1704{
1705
1706 spm(1,1) := 2$
1707 }
1708
1709spget_columns(mat1,{1,2});
1710
1711
1712{
1713
1714 spm(1,1) := 2$
1715 ,
1716
1717 spm(2,1) := 4$
1718 }
1719
1720spget_rows(mat1,3);
1721
1722
1723{
1724
1725 spm(1,3) := 6$
1726 }
1727
1728spget_rows(mat1,{1,3});
1729
1730
1731{
1732
1733 spm(1,1) := 2$
1734 ,
1735
1736 spm(1,3) := 6$
1737 }
1738
1739
1740sphermitian_tp(mat6);
1741
1742
1743
1744spm(1,1) :=  - i + 1$
1745
1746spm(1,2) := 4$
1747
1748spm(1,3) := 1$
1749
1750spm(2,1) :=  - i + 2$
1751
1752spm(2,2) := 5$
1753
1754spm(2,3) :=  - i$
1755
1756spm(3,1) :=  - i + 3$
1757
1758spm(3,2) := 2$
1759
1760spm(4,4) :=  - i + 1$
1761
1762spm(4,5) := 4$
1763
1764spm(4,6) := 1$
1765
1766spm(5,4) :=  - i + 2$
1767
1768spm(5,5) := 5$
1769
1770spm(5,6) :=  - i$
1771
1772spm(6,4) :=  - i + 3$
1773
1774spm(6,5) := 2$
1775
1776
1777% matrix_augment and matrix_stack can take both a list of arguments
1778% or just the arguments.
1779
1780spmatrix_augment({mat1,mat1});
1781
1782
1783
1784spm(1,1) := 2$
1785
1786spm(1,6) := 2$
1787
1788spm(2,2) := 4$
1789
1790spm(2,7) := 4$
1791
1792spm(3,3) := 6$
1793
1794spm(3,8) := 6$
1795
1796spm(4,4) := 8$
1797
1798spm(4,9) := 8$
1799
1800spm(5,5) := 10$
1801
1802spm(5,10) := 10$
1803
1804spmatrix_augment(mat5,mat2,mat5)$
1805
1806
1807spmatrix_stack(mat2,mat2)$
1808
1809
1810
1811spminor(mat1,2,3);
1812
1813
1814
1815spm(1,1) := 2$
1816
1817spm(3,3) := 8$
1818
1819spm(4,4) := 10$
1820
1821
1822spmult_columns(mat1,3,y);
1823
1824
1825
1826spm(1,1) := 2$
1827
1828spm(2,2) := 4$
1829
1830spm(3,3) := 6*y$
1831
1832spm(4,4) := 8$
1833
1834spm(5,5) := 10$
1835
1836spmult_columns(mat2,{2,3,4},100)$
1837
1838
1839spmult_rows(mat2,2,x);
1840
1841
1842
1843spm(1,1) := 1$
1844
1845spm(2,2) := 2*x$
1846
1847spm(3,3) := 3$
1848
1849spm(4,4) := 4$
1850
1851spm(5,5) := 5$
1852
1853spm(6,6) := 6$
1854
1855spm(7,7) := 7$
1856
1857spm(8,8) := 8$
1858
1859spm(9,9) := 9$
1860
1861spm(10,10) := 10$
1862
1863spm(11,11) := 11$
1864
1865spm(12,12) := 12$
1866
1867spm(13,13) := 13$
1868
1869spm(14,14) := 14$
1870
1871spm(15,15) := 15$
1872
1873spm(16,16) := 16$
1874
1875spm(17,17) := 17$
1876
1877spm(18,18) := 18$
1878
1879spm(19,19) := 19$
1880
1881spm(20,20) := 20$
1882
1883spm(21,21) := 21$
1884
1885spm(22,22) := 22$
1886
1887spm(23,23) := 23$
1888
1889spm(24,24) := 24$
1890
1891spm(25,25) := 25$
1892
1893spm(26,26) := 26$
1894
1895spm(27,27) := 27$
1896
1897spm(28,28) := 28$
1898
1899spm(29,29) := 29$
1900
1901spm(30,30) := 30$
1902
1903spm(31,31) := 31$
1904
1905spm(32,32) := 32$
1906
1907spm(33,33) := 33$
1908
1909spm(34,34) := 34$
1910
1911spm(35,35) := 35$
1912
1913spm(36,36) := 36$
1914
1915spm(37,37) := 37$
1916
1917spm(38,38) := 38$
1918
1919spm(39,39) := 39$
1920
1921spm(40,40) := 40$
1922
1923spm(41,41) := 41$
1924
1925spm(42,42) := 42$
1926
1927spm(43,43) := 43$
1928
1929spm(44,44) := 44$
1930
1931spm(45,45) := 45$
1932
1933spm(46,46) := 46$
1934
1935spm(47,47) := 47$
1936
1937spm(48,48) := 48$
1938
1939spm(49,49) := 49$
1940
1941spm(50,50) := 50$
1942
1943spm(51,51) := 51$
1944
1945spm(52,52) := 52$
1946
1947spm(53,53) := 53$
1948
1949spm(54,54) := 54$
1950
1951spm(55,55) := 55$
1952
1953spm(56,56) := 56$
1954
1955spm(57,57) := 57$
1956
1957spm(58,58) := 58$
1958
1959spm(59,59) := 59$
1960
1961spm(60,60) := 60$
1962
1963spm(61,61) := 61$
1964
1965spm(62,62) := 62$
1966
1967spm(63,63) := 63$
1968
1969spm(64,64) := 64$
1970
1971spm(65,65) := 65$
1972
1973spm(66,66) := 66$
1974
1975spm(67,67) := 67$
1976
1977spm(68,68) := 68$
1978
1979spm(69,69) := 69$
1980
1981spm(70,70) := 70$
1982
1983spm(71,71) := 71$
1984
1985spm(72,72) := 72$
1986
1987spm(73,73) := 73$
1988
1989spm(74,74) := 74$
1990
1991spm(75,75) := 75$
1992
1993spm(76,76) := 76$
1994
1995spm(77,77) := 77$
1996
1997spm(78,78) := 78$
1998
1999spm(79,79) := 79$
2000
2001spm(80,80) := 80$
2002
2003spm(81,81) := 81$
2004
2005spm(82,82) := 82$
2006
2007spm(83,83) := 83$
2008
2009spm(84,84) := 84$
2010
2011spm(85,85) := 85$
2012
2013spm(86,86) := 86$
2014
2015spm(87,87) := 87$
2016
2017spm(88,88) := 88$
2018
2019spm(89,89) := 89$
2020
2021spm(90,90) := 90$
2022
2023spm(91,91) := 91$
2024
2025spm(92,92) := 92$
2026
2027spm(93,93) := 93$
2028
2029spm(94,94) := 94$
2030
2031spm(95,95) := 95$
2032
2033spm(96,96) := 96$
2034
2035spm(97,97) := 97$
2036
2037spm(98,98) := 98$
2038
2039spm(99,99) := 99$
2040
2041spm(100,100) := 100$
2042
2043spmult_rows(mat1,{1,3,5},10);
2044
2045
2046
2047spm(1,1) := 20$
2048
2049spm(2,2) := 4$
2050
2051spm(3,3) := 60$
2052
2053spm(4,4) := 8$
2054
2055spm(5,5) := 100$
2056
2057
2058sppivot(mat3,3,3);
2059
2060
2061
2062spm(1,1) := 1$
2063
2064spm(1,2) := 2$
2065
2066spm(2,1) := 3$
2067
2068spm(2,2) := 4$
2069
2070spm(3,3) := 1$
2071
2072spm(3,4) := 2$
2073
2074spm(4,4) := -2$
2075
2076spm(5,5) := 1$
2077
2078spm(5,6) := 2$
2079
2080spm(6,5) := 3$
2081
2082spm(6,6) := 4$
2083
2084sprows_pivot(mat3,1,1,{2,4});
2085
2086
2087
2088spm(1,1) := 1$
2089
2090spm(1,2) := 2$
2091
2092spm(2,2) := -2$
2093
2094spm(3,3) := 1$
2095
2096spm(3,4) := 2$
2097
2098spm(4,3) := 3$
2099
2100spm(4,4) := 4$
2101
2102spm(5,5) := 1$
2103
2104spm(5,6) := 2$
2105
2106spm(6,5) := 3$
2107
2108spm(6,6) := 4$
2109
2110
2111spremove_columns(mat1,3);
2112
2113
2114
2115spm(1,1) := 2$
2116
2117spm(2,2) := 4$
2118
2119spm(4,3) := 8$
2120
2121spm(5,4) := 10$
2122
2123spremove_columns(mat3,{2,3,4});
2124
2125
2126
2127spm(1,1) := 1$
2128
2129spm(2,1) := 3$
2130
2131spm(5,2) := 1$
2132
2133spm(5,3) := 2$
2134
2135spm(6,2) := 3$
2136
2137spm(6,3) := 4$
2138
2139spremove_rows(mat1,2);
2140
2141
2142
2143spm(1,1) := 2$
2144
2145spm(2,3) := 6$
2146
2147spm(3,4) := 8$
2148
2149spm(4,5) := 10$
2150
2151spremove_rows(mat2,{1,3})$
2152
2153
2154spremove_rows(mat1,{1,2,3,4,5});
2155
2156***** Warning in spremove_rows:
2157      all the rows have been removed. Returning nil.
2158
2159
2160spswap_cols(mat1,2,4);
2161
2162
2163
2164spm(1,1) := 2$
2165
2166spm(2,4) := 4$
2167
2168spm(3,3) := 6$
2169
2170spm(4,2) := 8$
2171
2172spm(5,5) := 10$
2173
2174spswap_rows(mat5,1,2)$
2175
2176
2177spswap_entries(mat1,{1,1},{5,5});
2178
2179
2180
2181spm(1,1) := 10$
2182
2183spm(2,2) := 4$
2184
2185spm(3,3) := 6$
2186
2187spm(4,4) := 8$
2188
2189spm(5,5) := 2$
2190
2191
2192
2193
2194% Constructors - functions that create matrices.
2195
2196spband_matrix(x,500)$
2197
2198
2199spband_matrix({x,y,z},6000)$
2200
2201
2202
2203spblock_matrix(1,2,{mat1,mat1});
2204
2205
2206
2207spm(1,1) := 2$
2208
2209spm(1,6) := 2$
2210
2211spm(2,2) := 4$
2212
2213spm(2,7) := 4$
2214
2215spm(3,3) := 6$
2216
2217spm(3,8) := 6$
2218
2219spm(4,4) := 8$
2220
2221spm(4,9) := 8$
2222
2223spm(5,5) := 10$
2224
2225spm(5,10) := 10$
2226
2227spblock_matrix(2,3,{mat3,mat6,mat3,mat6,mat3,mat6});
2228
2229
2230
2231spm(1,1) := 1$
2232
2233spm(1,2) := 2$
2234
2235spm(1,7) := i + 1$
2236
2237spm(1,8) := i + 2$
2238
2239spm(1,9) := i + 3$
2240
2241spm(1,13) := 1$
2242
2243spm(1,14) := 2$
2244
2245spm(2,1) := 3$
2246
2247spm(2,2) := 4$
2248
2249spm(2,7) := 4$
2250
2251spm(2,8) := 5$
2252
2253spm(2,9) := 2$
2254
2255spm(2,13) := 3$
2256
2257spm(2,14) := 4$
2258
2259spm(3,3) := 1$
2260
2261spm(3,4) := 2$
2262
2263spm(3,7) := 1$
2264
2265spm(3,8) := i$
2266
2267spm(3,15) := 1$
2268
2269spm(3,16) := 2$
2270
2271spm(4,3) := 3$
2272
2273spm(4,4) := 4$
2274
2275spm(4,10) := i + 1$
2276
2277spm(4,11) := i + 2$
2278
2279spm(4,12) := i + 3$
2280
2281spm(4,15) := 3$
2282
2283spm(4,16) := 4$
2284
2285spm(5,5) := 1$
2286
2287spm(5,6) := 2$
2288
2289spm(5,10) := 4$
2290
2291spm(5,11) := 5$
2292
2293spm(5,12) := 2$
2294
2295spm(5,17) := 1$
2296
2297spm(5,18) := 2$
2298
2299spm(6,5) := 3$
2300
2301spm(6,6) := 4$
2302
2303spm(6,10) := 1$
2304
2305spm(6,11) := i$
2306
2307spm(6,17) := 3$
2308
2309spm(6,18) := 4$
2310
2311spm(7,1) := i + 1$
2312
2313spm(7,2) := i + 2$
2314
2315spm(7,3) := i + 3$
2316
2317spm(7,7) := 1$
2318
2319spm(7,8) := 2$
2320
2321spm(7,13) := i + 1$
2322
2323spm(7,14) := i + 2$
2324
2325spm(7,15) := i + 3$
2326
2327spm(8,1) := 4$
2328
2329spm(8,2) := 5$
2330
2331spm(8,3) := 2$
2332
2333spm(8,7) := 3$
2334
2335spm(8,8) := 4$
2336
2337spm(8,13) := 4$
2338
2339spm(8,14) := 5$
2340
2341spm(8,15) := 2$
2342
2343spm(9,1) := 1$
2344
2345spm(9,2) := i$
2346
2347spm(9,9) := 1$
2348
2349spm(9,10) := 2$
2350
2351spm(9,13) := 1$
2352
2353spm(9,14) := i$
2354
2355spm(10,4) := i + 1$
2356
2357spm(10,5) := i + 2$
2358
2359spm(10,6) := i + 3$
2360
2361spm(10,9) := 3$
2362
2363spm(10,10) := 4$
2364
2365spm(10,16) := i + 1$
2366
2367spm(10,17) := i + 2$
2368
2369spm(10,18) := i + 3$
2370
2371spm(11,4) := 4$
2372
2373spm(11,5) := 5$
2374
2375spm(11,6) := 2$
2376
2377spm(11,11) := 1$
2378
2379spm(11,12) := 2$
2380
2381spm(11,16) := 4$
2382
2383spm(11,17) := 5$
2384
2385spm(11,18) := 2$
2386
2387spm(12,4) := 1$
2388
2389spm(12,5) := i$
2390
2391spm(12,11) := 3$
2392
2393spm(12,12) := 4$
2394
2395spm(12,16) := 1$
2396
2397spm(12,17) := i$
2398
2399
2400spchar_matrix(mat3,x);
2401
2402
2403
2404spm(1,1) := x - 1$
2405
2406spm(1,2) := -2$
2407
2408spm(2,1) := -3$
2409
2410spm(2,2) := x - 4$
2411
2412spm(3,3) := x - 1$
2413
2414spm(3,4) := -2$
2415
2416spm(4,3) := -3$
2417
2418spm(4,4) := x - 4$
2419
2420spm(5,5) := x - 1$
2421
2422spm(5,6) := -2$
2423
2424spm(6,5) := -3$
2425
2426spm(6,6) := x - 4$
2427
2428
2429cfmat := spcoeff_matrix({y+4*+-5*w=10,y-z=20,y+4+3*z,w+x+50});
2430
2431
2432{
2433
2434 spm(1,1) := 1$
2435
2436 spm(1,2) := -20$
2437
2438 spm(2,1) := 1$
2439
2440 spm(2,3) := -1$
2441
2442 spm(3,1) := 1$
2443
2444 spm(3,3) := 3$
2445
2446 spm(4,2) := 1$
2447
2448 spm(4,4) := 1$
2449 ,
2450
2451 spm(1,1) := y$
2452
2453 spm(2,1) := w$
2454
2455 spm(3,1) := z$
2456
2457 spm(4,1) := x$
2458 ,
2459
2460 spm(1,1) := 10$
2461
2462 spm(2,1) := 20$
2463
2464 spm(3,1) := -4$
2465
2466 spm(4,1) := -50$
2467cfmat :=  }
2468
2469first cfmat * second cfmat;
2470
2471
2472
2473spm(1,1) :=  - 20*w + y$
2474
2475spm(2,1) := y - z$
2476
2477spm(3,1) := y + 3*z$
2478
2479spm(4,1) := w + x$
2480
2481third cfmat;
2482
2483
2484
2485spm(1,1) := 10$
2486
2487spm(2,1) := 20$
2488
2489spm(3,1) := -4$
2490
2491spm(4,1) := -50$
2492
2493
2494spcompanion(poly,x);
2495
2496
2497
2498spm(1,7) := -12$
2499
2500spm(2,1) := 1$
2501
2502spm(3,2) := 1$
2503
2504spm(4,3) := 1$
2505
2506spm(4,7) := -5$
2507
2508spm(5,4) := 1$
2509
2510spm(5,7) := -4$
2511
2512spm(6,5) := 1$
2513
2514spm(6,7) := -1$
2515
2516spm(7,6) := 1$
2517
2518
2519sphessian(poly1,{w,x,y,z});
2520
2521
2522
2523spm(2,2) := 2$
2524
2525               2    3
2526spm(2,3) := 3*y  + z  + 1$
2527
2528                 2
2529spm(2,4) := 3*y*z $
2530
2531               2    3
2532spm(3,2) := 3*y  + z  + 1$
2533
2534spm(3,3) := 6*x*y$
2535
2536                 2
2537spm(3,4) := 3*x*z $
2538
2539                 2
2540spm(4,2) := 3*y*z $
2541
2542                 2
2543spm(4,3) := 3*x*z $
2544
2545spm(4,4) := 6*x*y*z$
2546
2547
2548spjacobian({x^4,x*y^2,x*y*z^3},{w,x,y,z});
2549
2550
2551
2552               3
2553spm(1,2) := 4*x $
2554
2555             2
2556spm(2,2) := y $
2557
2558spm(2,3) := 2*x*y$
2559
2560               3
2561spm(3,2) := y*z $
2562
2563               3
2564spm(3,3) := x*z $
2565
2566                   2
2567spm(3,4) := 3*x*y*z $
2568
2569
2570spjordan_block(x,500)$
2571
2572
2573
2574spmake_identity(1000)$
2575
2576
2577
2578on rounded;
2579
2580 % makes output easier to read.
2581ch := spcholesky(mat1);
2582
2583
2584{
2585
2586 spm(1,1) := 1.41421356237$
2587
2588 spm(2,2) := 2.0$
2589
2590 spm(3,3) := 2.44948974278$
2591
2592 spm(4,4) := 2.82842712475$
2593
2594 spm(5,5) := 3.16227766017$
2595 ,
2596
2597 spm(1,1) := 1.41421356237$
2598
2599 spm(2,2) := 2.0$
2600
2601 spm(3,3) := 2.44948974278$
2602
2603 spm(4,4) := 2.82842712475$
2604
2605 spm(5,5) := 3.16227766017$
2606ch :=  }
2607
2608tp first ch - second ch;
2609
2610
2611"Empty Matrix"
2612
2613tmp := first ch * second ch;
2614
2615
2616
2617spm(1,1) := 2.0$
2618
2619spm(2,2) := 4.0$
2620
2621spm(3,3) := 6.0$
2622
2623spm(4,4) := 8.0$
2624
2625spm(5,5) := 10.0$
2626tmp :=
2627
2628tmp - mat1;
2629
2630
2631"Empty Matrix"
2632
2633off rounded;
2634
2635
2636
2637% The gram schmidt functions takes a list of vectors.
2638% These vectors are matrices of type 'sparse with column dimension 1.
2639
2640%Create the "vectors".
2641sparse a(4,1);
2642
2643
2644sparse b(4,1);
2645
2646
2647sparse c(4,1);
2648
2649
2650sparse d(4,1);
2651
2652
2653
2654%Fill the "vectors" with data.
2655a(1,1):=1;
2656
2657
2658a(1,1) := 1
2659
2660b(1,1):=1;
2661
2662
2663b(1,1) := 1
2664
2665b(2,1):=1;
2666
2667
2668b(2,1) := 1
2669
2670c(1,1):=1;
2671
2672
2673c(1,1) := 1
2674
2675c(2,1):=1;
2676
2677
2678c(2,1) := 1
2679
2680c(3,1):=1;
2681
2682
2683c(3,1) := 1
2684
2685d(1,1):=1;
2686
2687
2688d(1,1) := 1
2689
2690d(2,1):=1;
2691
2692
2693d(2,1) := 1
2694
2695d(3,1):=1;
2696
2697
2698d(3,1) := 1
2699
2700d(4,1):=1;
2701
2702
2703d(4,1) := 1
2704
2705
2706spgram_schmidt({{a},{b},{c},{d}});
2707
2708
2709{
2710
2711 spm(1,1) := 1$
2712 ,
2713
2714 spm(2,1) := 1$
2715 ,
2716
2717 spm(3,1) := 1$
2718 ,
2719
2720 spm(4,1) := 1$
2721 }
2722
2723
2724on rounded;
2725
2726 % again, makes large quotients a bit more readable.
2727% The algorithm used for splu_decom sometimes swaps the rows of the
2728% input matrix so that (given matrix A, splu_decom(A) = {L,U,vec}),
2729% we find L*U does not equal A but a row equivalent of it. The call
2730% spconvert(A,vec) will return this row equivalent
2731% (ie: L*U = convert(A,vec)).
2732lu := splu_decom(mat5)$
2733
2734
2735tmp := first lu * second lu$
2736
2737
2738tmp1 := spconvert(mat5,third lu);
2739
2740
2741
2742spm(1,1) := 3$
2743
2744spm(1,2) := 1$
2745
2746spm(2,1) := 1$
2747
2748spm(2,2) := 3$
2749
2750spm(2,3) := 1$
2751
2752spm(3,2) := 1$
2753
2754spm(3,3) := 3$
2755
2756spm(3,4) := 1$
2757
2758spm(4,3) := 1$
2759
2760spm(4,4) := 3$
2761
2762spm(4,5) := 1$
2763
2764spm(5,4) := 1$
2765
2766spm(5,5) := 3$
2767
2768spm(5,6) := 1$
2769
2770spm(6,5) := 1$
2771
2772spm(6,6) := 3$
2773
2774spm(6,7) := 1$
2775
2776spm(7,6) := 1$
2777
2778spm(7,7) := 3$
2779
2780spm(7,8) := 1$
2781
2782spm(8,7) := 1$
2783
2784spm(8,8) := 3$
2785
2786spm(8,9) := 1$
2787
2788spm(9,8) := 1$
2789
2790spm(9,9) := 3$
2791
2792spm(9,10) := 1$
2793
2794spm(10,9) := 1$
2795
2796spm(10,10) := 3$
2797
2798spm(10,11) := 1$
2799
2800spm(11,10) := 1$
2801
2802spm(11,11) := 3$
2803
2804spm(11,12) := 1$
2805
2806spm(12,11) := 1$
2807
2808spm(12,12) := 3$
2809
2810spm(12,13) := 1$
2811
2812spm(13,12) := 1$
2813
2814spm(13,13) := 3$
2815
2816spm(13,14) := 1$
2817
2818spm(14,13) := 1$
2819
2820spm(14,14) := 3$
2821
2822spm(14,15) := 1$
2823
2824spm(15,14) := 1$
2825
2826spm(15,15) := 3$
2827
2828spm(15,16) := 1$
2829
2830spm(16,15) := 1$
2831
2832spm(16,16) := 3$
2833
2834spm(16,17) := 1$
2835
2836spm(17,16) := 1$
2837
2838spm(17,17) := 3$
2839
2840spm(17,18) := 1$
2841
2842spm(18,17) := 1$
2843
2844spm(18,18) := 3$
2845
2846spm(18,19) := 1$
2847
2848spm(19,18) := 1$
2849
2850spm(19,19) := 3$
2851
2852spm(19,20) := 1$
2853
2854spm(20,19) := 1$
2855
2856spm(20,20) := 3$
2857
2858spm(20,21) := 1$
2859
2860spm(21,20) := 1$
2861
2862spm(21,21) := 3$
2863
2864spm(21,22) := 1$
2865
2866spm(22,21) := 1$
2867
2868spm(22,22) := 3$
2869
2870spm(22,23) := 1$
2871
2872spm(23,22) := 1$
2873
2874spm(23,23) := 3$
2875
2876spm(23,24) := 1$
2877
2878spm(24,23) := 1$
2879
2880spm(24,24) := 3$
2881
2882spm(24,25) := 1$
2883
2884spm(25,24) := 1$
2885
2886spm(25,25) := 3$
2887
2888spm(25,26) := 1$
2889
2890spm(26,25) := 1$
2891
2892spm(26,26) := 3$
2893
2894spm(26,27) := 1$
2895
2896spm(27,26) := 1$
2897
2898spm(27,27) := 3$
2899
2900spm(27,28) := 1$
2901
2902spm(28,27) := 1$
2903
2904spm(28,28) := 3$
2905
2906spm(28,29) := 1$
2907
2908spm(29,28) := 1$
2909
2910spm(29,29) := 3$
2911
2912spm(29,30) := 1$
2913
2914spm(30,29) := 1$
2915
2916spm(30,30) := 3$
2917
2918spm(30,31) := 1$
2919
2920spm(31,30) := 1$
2921
2922spm(31,31) := 3$
2923
2924spm(31,32) := 1$
2925
2926spm(32,31) := 1$
2927
2928spm(32,32) := 3$
2929
2930spm(32,33) := 1$
2931
2932spm(33,32) := 1$
2933
2934spm(33,33) := 3$
2935
2936spm(33,34) := 1$
2937
2938spm(34,33) := 1$
2939
2940spm(34,34) := 3$
2941
2942spm(34,35) := 1$
2943
2944spm(35,34) := 1$
2945
2946spm(35,35) := 3$
2947
2948spm(35,36) := 1$
2949
2950spm(36,35) := 1$
2951
2952spm(36,36) := 3$
2953
2954spm(36,37) := 1$
2955
2956spm(37,36) := 1$
2957
2958spm(37,37) := 3$
2959
2960spm(37,38) := 1$
2961
2962spm(38,37) := 1$
2963
2964spm(38,38) := 3$
2965
2966spm(38,39) := 1$
2967
2968spm(39,38) := 1$
2969
2970spm(39,39) := 3$
2971
2972spm(39,40) := 1$
2973
2974spm(40,39) := 1$
2975
2976spm(40,40) := 3$
2977
2978spm(40,41) := 1$
2979
2980spm(41,40) := 1$
2981
2982spm(41,41) := 3$
2983
2984spm(41,42) := 1$
2985
2986spm(42,41) := 1$
2987
2988spm(42,42) := 3$
2989
2990spm(42,43) := 1$
2991
2992spm(43,42) := 1$
2993
2994spm(43,43) := 3$
2995
2996spm(43,44) := 1$
2997
2998spm(44,43) := 1$
2999
3000spm(44,44) := 3$
3001
3002spm(44,45) := 1$
3003
3004spm(45,44) := 1$
3005
3006spm(45,45) := 3$
3007
3008spm(45,46) := 1$
3009
3010spm(46,45) := 1$
3011
3012spm(46,46) := 3$
3013
3014spm(46,47) := 1$
3015
3016spm(47,46) := 1$
3017
3018spm(47,47) := 3$
3019
3020spm(47,48) := 1$
3021
3022spm(48,47) := 1$
3023
3024spm(48,48) := 3$
3025
3026spm(48,49) := 1$
3027
3028spm(49,48) := 1$
3029
3030spm(49,49) := 3$
3031
3032spm(49,50) := 1$
3033
3034spm(50,49) := 1$
3035
3036spm(50,50) := 3$
3037
3038spm(50,51) := 1$
3039
3040spm(51,50) := 1$
3041
3042spm(51,51) := 3$
3043
3044spm(51,52) := 1$
3045
3046spm(52,51) := 1$
3047
3048spm(52,52) := 3$
3049
3050spm(52,53) := 1$
3051
3052spm(53,52) := 1$
3053
3054spm(53,53) := 3$
3055
3056spm(53,54) := 1$
3057
3058spm(54,53) := 1$
3059
3060spm(54,54) := 3$
3061
3062spm(54,55) := 1$
3063
3064spm(55,54) := 1$
3065
3066spm(55,55) := 3$
3067
3068spm(55,56) := 1$
3069
3070spm(56,55) := 1$
3071
3072spm(56,56) := 3$
3073
3074spm(56,57) := 1$
3075
3076spm(57,56) := 1$
3077
3078spm(57,57) := 3$
3079
3080spm(57,58) := 1$
3081
3082spm(58,57) := 1$
3083
3084spm(58,58) := 3$
3085
3086spm(58,59) := 1$
3087
3088spm(59,58) := 1$
3089
3090spm(59,59) := 3$
3091
3092spm(59,60) := 1$
3093
3094spm(60,59) := 1$
3095
3096spm(60,60) := 3$
3097
3098spm(60,61) := 1$
3099
3100spm(61,60) := 1$
3101
3102spm(61,61) := 3$
3103
3104spm(61,62) := 1$
3105
3106spm(62,61) := 1$
3107
3108spm(62,62) := 3$
3109
3110spm(62,63) := 1$
3111
3112spm(63,62) := 1$
3113
3114spm(63,63) := 3$
3115
3116spm(63,64) := 1$
3117
3118spm(64,63) := 1$
3119
3120spm(64,64) := 3$
3121
3122spm(64,65) := 1$
3123
3124spm(65,64) := 1$
3125
3126spm(65,65) := 3$
3127
3128spm(65,66) := 1$
3129
3130spm(66,65) := 1$
3131
3132spm(66,66) := 3$
3133
3134spm(66,67) := 1$
3135
3136spm(67,66) := 1$
3137
3138spm(67,67) := 3$
3139
3140spm(67,68) := 1$
3141
3142spm(68,67) := 1$
3143
3144spm(68,68) := 3$
3145
3146spm(68,69) := 1$
3147
3148spm(69,68) := 1$
3149
3150spm(69,69) := 3$
3151
3152spm(69,70) := 1$
3153
3154spm(70,69) := 1$
3155
3156spm(70,70) := 3$
3157
3158spm(70,71) := 1$
3159
3160spm(71,70) := 1$
3161
3162spm(71,71) := 3$
3163
3164spm(71,72) := 1$
3165
3166spm(72,71) := 1$
3167
3168spm(72,72) := 3$
3169
3170spm(72,73) := 1$
3171
3172spm(73,72) := 1$
3173
3174spm(73,73) := 3$
3175
3176spm(73,74) := 1$
3177
3178spm(74,73) := 1$
3179
3180spm(74,74) := 3$
3181
3182spm(74,75) := 1$
3183
3184spm(75,74) := 1$
3185
3186spm(75,75) := 3$
3187
3188spm(75,76) := 1$
3189
3190spm(76,75) := 1$
3191
3192spm(76,76) := 3$
3193
3194spm(76,77) := 1$
3195
3196spm(77,76) := 1$
3197
3198spm(77,77) := 3$
3199
3200spm(77,78) := 1$
3201
3202spm(78,77) := 1$
3203
3204spm(78,78) := 3$
3205
3206spm(78,79) := 1$
3207
3208spm(79,78) := 1$
3209
3210spm(79,79) := 3$
3211
3212spm(79,80) := 1$
3213
3214spm(80,79) := 1$
3215
3216spm(80,80) := 3$
3217
3218spm(80,81) := 1$
3219
3220spm(81,80) := 1$
3221
3222spm(81,81) := 3$
3223
3224spm(81,82) := 1$
3225
3226spm(82,81) := 1$
3227
3228spm(82,82) := 3$
3229
3230spm(82,83) := 1$
3231
3232spm(83,82) := 1$
3233
3234spm(83,83) := 3$
3235
3236spm(83,84) := 1$
3237
3238spm(84,83) := 1$
3239
3240spm(84,84) := 3$
3241
3242spm(84,85) := 1$
3243
3244spm(85,84) := 1$
3245
3246spm(85,85) := 3$
3247
3248spm(85,86) := 1$
3249
3250spm(86,85) := 1$
3251
3252spm(86,86) := 3$
3253
3254spm(86,87) := 1$
3255
3256spm(87,86) := 1$
3257
3258spm(87,87) := 3$
3259
3260spm(87,88) := 1$
3261
3262spm(88,87) := 1$
3263
3264spm(88,88) := 3$
3265
3266spm(88,89) := 1$
3267
3268spm(89,88) := 1$
3269
3270spm(89,89) := 3$
3271
3272spm(89,90) := 1$
3273
3274spm(90,89) := 1$
3275
3276spm(90,90) := 3$
3277
3278spm(90,91) := 1$
3279
3280spm(91,90) := 1$
3281
3282spm(91,91) := 3$
3283
3284spm(91,92) := 1$
3285
3286spm(92,91) := 1$
3287
3288spm(92,92) := 3$
3289
3290spm(92,93) := 1$
3291
3292spm(93,92) := 1$
3293
3294spm(93,93) := 3$
3295
3296spm(93,94) := 1$
3297
3298spm(94,93) := 1$
3299
3300spm(94,94) := 3$
3301
3302spm(94,95) := 1$
3303
3304spm(95,94) := 1$
3305
3306spm(95,95) := 3$
3307
3308spm(95,96) := 1$
3309
3310spm(96,95) := 1$
3311
3312spm(96,96) := 3$
3313
3314spm(96,97) := 1$
3315
3316spm(97,96) := 1$
3317
3318spm(97,97) := 3$
3319
3320spm(97,98) := 1$
3321
3322spm(98,97) := 1$
3323
3324spm(98,98) := 3$
3325
3326spm(98,99) := 1$
3327
3328spm(99,98) := 1$
3329
3330spm(99,99) := 3$
3331
3332spm(99,100) := 1$
3333
3334spm(100,99) := 1$
3335
3336spm(100,100) := 3$
3337tmp1 :=
3338
3339tmp - tmp1;
3340
3341
3342"Empty Matrix"
3343
3344% and the complex case..
3345on complex;
3346
3347
3348*** Domain mode rounded changed to complex-rounded
3349
3350lu1 := splu_decom(mat6);
3351
3352
3353{
3354
3355 spm(1,1) := 1$
3356
3357 spm(2,1) := 4$
3358
3359 spm(2,2) := 5 - 4*i$
3360
3361 spm(3,1) := 1 + i$
3362
3363 spm(3,2) := 3$
3364
3365 spm(3,3) := 2.26829268293 + 0.414634146341*i$
3366
3367 spm(4,4) := 1$
3368
3369 spm(5,4) := 4$
3370
3371 spm(5,5) := 5 - 4*i$
3372
3373 spm(6,4) := 1 + i$
3374
3375 spm(6,5) := 3$
3376
3377 spm(6,6) := 2.26829268293 + 0.414634146341*i$
3378 ,
3379
3380 spm(1,1) := 1$
3381
3382 spm(1,2) := i$
3383
3384 spm(2,2) := 1$
3385
3386 spm(2,3) := 0.243902439024 + 0.19512195122*i$
3387
3388 spm(3,3) := 1$
3389
3390 spm(4,4) := 1$
3391
3392 spm(4,5) := i$
3393
3394 spm(5,5) := 1$
3395
3396 spm(5,6) := 0.243902439024 + 0.19512195122*i$
3397
3398 spm(6,6) := 1$
3399lu1 :=  ,[3,2,3,6,5,6]}
3400
3401mat6;
3402
3403
3404
3405spm(1,1) := i + 1$
3406
3407spm(1,2) := i + 2$
3408
3409spm(1,3) := i + 3$
3410
3411spm(2,1) := 4$
3412
3413spm(2,2) := 5$
3414
3415spm(2,3) := 2$
3416
3417spm(3,1) := 1$
3418
3419spm(3,2) := i$
3420
3421spm(4,4) := i + 1$
3422
3423spm(4,5) := i + 2$
3424
3425spm(4,6) := i + 3$
3426
3427spm(5,4) := 4$
3428
3429spm(5,5) := 5$
3430
3431spm(5,6) := 2$
3432
3433spm(6,4) := 1$
3434
3435spm(6,5) := i$
3436
3437tmp := first lu1 * second lu1;
3438
3439
3440
3441spm(1,1) := 1$
3442
3443spm(1,2) := i$
3444
3445spm(2,1) := 4$
3446
3447spm(2,2) := 5$
3448
3449spm(2,3) := 2.0$
3450
3451spm(3,1) := 1 + i$
3452
3453spm(3,2) := 2 + i$
3454
3455spm(3,3) := 3.0 + i$
3456
3457spm(4,4) := 1$
3458
3459spm(4,5) := i$
3460
3461spm(5,4) := 4$
3462
3463spm(5,5) := 5$
3464
3465spm(5,6) := 2.0$
3466
3467spm(6,4) := 1 + i$
3468
3469spm(6,5) := 2 + i$
3470
3471spm(6,6) := 3.0 + i$
3472tmp :=
3473
3474tmp1 := spconvert(mat6,third lu1);
3475
3476
3477
3478spm(1,1) := 1$
3479
3480spm(1,2) := i$
3481
3482spm(2,1) := 4$
3483
3484spm(2,2) := 5$
3485
3486spm(2,3) := 2$
3487
3488spm(3,1) := i + 1$
3489
3490spm(3,2) := i + 2$
3491
3492spm(3,3) := i + 3$
3493
3494spm(4,4) := 1$
3495
3496spm(4,5) := i$
3497
3498spm(5,4) := 4$
3499
3500spm(5,5) := 5$
3501
3502spm(5,6) := 2$
3503
3504spm(6,4) := i + 1$
3505
3506spm(6,5) := i + 2$
3507
3508spm(6,6) := i + 3$
3509tmp1 :=
3510
3511tmp - tmp1;
3512
3513
3514"Empty Matrix"
3515
3516off complex;
3517
3518
3519*** Domain mode complex-rounded changed to rounded
3520
3521
3522mat3inv := sppseudo_inverse(mat3);
3523
3524
3525
3526spm(1,1) :=  - 2.0$
3527
3528spm(1,2) := 1$
3529
3530spm(2,1) := 1.5$
3531
3532spm(2,2) :=  - 0.5$
3533
3534spm(3,3) :=  - 2.0$
3535
3536spm(3,4) := 1$
3537
3538spm(4,3) := 1.5$
3539
3540spm(4,4) :=  - 0.5$
3541
3542spm(5,5) :=  - 2.0$
3543
3544spm(5,6) := 1$
3545
3546spm(6,5) := 1.5$
3547
3548spm(6,6) :=  - 0.5$
3549mat3inv :=
3550
3551mat3 * mat3inv;
3552
3553
3554
3555spm(1,1) := 1$
3556
3557spm(2,2) := 1$
3558
3559spm(3,3) := 1$
3560
3561spm(4,4) := 1$
3562
3563spm(5,5) := 1$
3564
3565spm(6,6) := 1$
3566
3567
3568
3569% Predicates.
3570
3571matrixp(mat1);
3572
3573
3574t
3575
3576matrixp(poly);
3577
3578
3579
3580squarep(mat2);
3581
3582
3583t
3584
3585squarep(mat3);
3586
3587
3588t
3589
3590
3591symmetricp(mat1);
3592
3593
3594t
3595
3596symmetricp(mat3);
3597
3598
3599
3600sparsematp(mat1);
3601
3602
3603t
3604
3605sparsematp(poly);
3606
3607
3608
3609off rounded;
3610
3611
3612
3613end;
3614
3615Tested on x86_64-pc-windows CSL
3616Time (counter 1): 48 ms
3617
3618End of Lisp run after 0.04+0.06 seconds
3619real 0.27
3620user 0.03
3621sys 0.06
3622