fixes typos and a missing reference.
[maxima.git] / share / linearalgebra / rtest_matrixexp.mac
blob6fe28b79f49b847d70cfbaf394289d6d3d433d14
1 (load("matrixexp.lisp"),0);
2 0$
4 (remvalue(a,b,c,x),0);
5 0$
7 (xequal(a,b) := block([gcd : 'spmod, algebraic : true],
8    ratvars(),
9    is(fullratsimp(a) = fullratsimp(b)) or 
10       is(fullratsimp(rectform(a)) = fullratsimp(rectform(b)))),0);
13 scalarmatrixp : false;
14 false$
16 (check(mat,n) := block([s, okay, z : gensym(), i : 0, m],
18   s : spectral_rep(mat),
19   okay : xequal(mat - s[1] . s[2] - s[3] , zeromatrix(n,n)),
20   print(i : i + 1, okay),
22   okay : okay and xequal(mat . s[3], s[3] . mat),
23   print(i : i + 1, okay),
25   okay : okay and xequal(s[3]^^n, zeromatrix(n,n)),
26   print(i : i + 1, okay),
28   okay : okay and xequal(matrixfun(lambda([x],1), mat), ident(n)),
29   print(i : i + 1, okay),
31   okay : okay and xequal(matrixfun(lambda([x], 1+x+x^2), mat), ident(n) + mat + mat . mat),
32   print(i : i + 1, okay),
34   okay : okay and xequal(matrixfun(lambda([x], x^2/5), mat), mat . mat / 5),
35   print(i : i + 1, okay),
37   okay : okay and xequal(matrixfun(lambda([x],x^8),mat), mat^^8),
38   print(i : i + 1, okay),
40   m : errcatch(matrixfun(lambda([z],sqrt(z)), mat)),
41   okay : okay and if m = [ ] then member(0, s[1]) else xequal(m[1] . m[1], mat),
42   print(i : i + 1, okay),
44   m : errcatch(matrixfun(lambda([mat], 1/mat^2), mat)),
45   okay : okay and if m = [ ] then member(0, s[1]) else xequal(m[1], mat^^-2),   
46   print(i : i + 1, okay),
48   m : fullratsimp(matrixexp(mat,z) . matrixexp(mat, -z)),
49   okay : okay and xequal(m, ident(n)),
50   print(i : i + 1, okay),
52   m : matrixexp(mat,z),
53   okay : okay and xequal(diff(m,z) - m . mat, zeromatrix(n,n)),
54   print(i : i + 1, okay),
56   okay), 0);
59 check(matrix([1]),1);
60 true$
62 check(matrix([x]),1);
63 true$
65 check(matrix([1,0],[0,1]),2);
66 true$
68 check(matrix([1,0],[0,0]),2);
69 true$
71 check(matrix([0,0],[0,1]),2);
72 true$
74 check(matrix([0,1],[1,0]),2);
75 true$
77 check(matrix([0,1],[-1,0]),2);
78 true$
80 check(matrix([0,%i],[-%i,0]),2);
81 true$
83 check(matrix([0,a],[0,b]),2);
84 true$
86 check(matrix([1,2],[2,1]),2);
87 true$
89 check(matrix([1,%i],[-%i,1]),2);
90 true$
92 check(matrix([1,2],[3,1]),2);
93 true$
95 check(matrix([1,6],[0,1]),2);
96 true$
98 check(matrix([x,1],[1,1]), 2);
99 true$
101 check(matrix([sqrt(3), sqrt(2)],[sqrt(2), 9]),2);
102 true$
104 check(matrix([sqrt(6),1],[1, -9]),2);
105 true$
107 check(matrix([sqrt(3), sqrt(2)],[sqrt(2), 9]),2);
108 true$
110 check(matrix([a,b],[c,d]),2);
111 true$
113 check(matrix([1,0,0],[0,1,0],[0,0,1]),3);
114 true$
116 check(matrix([1,0,0],[0,1,0],[0,0,-1]),3);
117 true$
119 check(matrix([1,1,0],[1,1,1],[0,1,1]),3);
120 true$
122 check(matrix([1,%i,0],[-%i,1,%i],[0,-%i,1]),3);
123 true$
125 check(matrix([1,2,3],[4,5,6],[7,8,9]),3);
126 true$
128 check(matrix([1,a,b],[0,1,c],[0,0,2]),3);
129 true$
131 check(matrix([1,a,b],[0,1,c],[0,0,1]),3);
132 true$
134 check(matrix([1,a,b],[0,2,c],[0,0,1]),3);
135 true$
137 check(matrix([2,a,b],[0,2,c],[0,0,1]),3);
138 true$
140 check(matrix([1,a,b],[0,1,c],[0,0,2]),3);
141 true$
143 check(matrix([1,0,0],[a,1,0],[b,c,1]),3);
144 true$
146 check(matrix([1,0,0],[a,%i,0],[b,c,%i]),3);
147 true$
149 check(matrix([1,0,0],[a,%i,0],[b,c,1]),3);
150 true$
152 check(matrix([1,0,0],[a,%i,0],[b,c,sqrt(7)]),3);
153 true$
155 check(matrix([1,0,0],[a,%i,0],[b,c,%i]),3);
156 true$
158 /* spectral_rep checks its results--so this really does testing.*/
160 (spectral_rep(matrix([x,1,0],[1,1,1],[0,1,1])),0);
164 check(matrix([1,1,0],[1,1,1],[0,1,1]),3);
165 true$
167 (s : matrix([1,2],[2,3]), 0);
170 (m : s . matrix([1,0],[0,-1]) . s^^-1, 0);
173 xequal(s . matrix([exp(1),0],[0,exp(-1)]) . s^^-1, matrixexp(m));
174 true$
177 /* Matrices from Gosei Furuya's Jordan form code. */
179 (m : matrix([2,0,0,0,0,0,0,0],
180          [1,2,0,0,0,0,0,0],
181          [-4,1,2,0,0,0,0,0],
182          [2,0,0,2,0,0,0,0],
183          [-7,2,0,0,2,0,0,0],
184          [9,0,-2,0,1,2,0,0],
185          [-34,7,1,-2,-1,1,2,0],
186          [145,-17,-16,3,9,-2,0,3]), 0)$
189 xequal(matrixfun(lambda([x],x^2), m), m.m);
190 true$
193 (m : matrix([2,1,0,0,0,0],
194           [-1,4,0,0,0,0],
195           [-1,1,2,1,0,0],
196           [-1,1,-1,4,0,0],
197           [-1,1,-1,1,3,0],
198           [-1,1,-1,1,1,2]),0)$
201 xequal(matrixfun(lambda([x],x^2), m), m.m);
202 true$
204 (m : matrix([0,1,0],
205           [0,0,1],
206           [1,-3,3]),0);
209 xequal(matrixfun(lambda([x],1+x^5), m), ident(3)+m^^5);
210 true$
212 (m : matrix([0,1,2],
213           [0,0,0],
214           [0,0,0]),0);
217 xequal(matrixfun(lambda([x],1+x^5), m), ident(3)+m^^5);
218 true$
220 (m : matrix([3,1,0,0],
221           [-4,-1,0,0],
222           [7,1,2,1],
223           [-17,-6,-1,0]),0);
226 xequal(matrixfun(lambda([x],1+x^2), m), ident(4)+m^^2);
227 true$
229 (m : matrix([2,1,2,0],
230           [-2,2,1,2],
231           [-2,-1,-1,1],
232           [3,1,2,-1]),0);
235 xequal(matrixfun(lambda([x],1+x^2), m), ident(4)+m^^2);
236 true$
237          
238 (m : matrix([0,0,1,1,1],
239           [0,0,0,1,1],
240           [0,0,0,0,1],
241           [0,0,0,0,0],
242           [0,0,0,0,0]),0);
245 xequal(matrixfun(lambda([x],1+x^2), m), ident(5)+m^^2);
246 true$
248 (m : matrix([0,1,0],
249           [0,0,1],
250           [-1,-3,-3]),0);
253 xequal(matrixfun(lambda([x],1+x^5), m), ident(3)+m^^5);
254 true$