I can verify that the MUL* in invert.lisp that Ray
tracked down seems to be a trouble maker (I'm using
gcl 2.7.0 on XP) In invert.lisp, I changed MUL* to
MUL. Now, invert works okay on this matrix:
(%i1) display2d : false$
(%i2) m : matrix([1,0,0],[-.3,1,0],[0,-.3,1])$
(%i3) m.invert(m);
(%o3) MATRIX([1.0,0.0,0.0],[0.0,1.0,0.0],[0.0,0.0,1.0])
(%i4) m . invert(m);
(%o4) MATRIX([1.0,0.0,0.0],[0.0,1.0,0.0],[0.0,0.0,1.0])
(%i5) invert(m) - m^^-1;
RAT replaced -0.3 by -3//10 = -0.3
RAT replaced -0.3 by -3//10 = -0.3
(%o5) MATRIX([0.0,0,0],[0.0,0.0,0],[0.0,0.0,0.0])
(%i6) build_info();
Maxima version: 5.9.0.9beta1
Maxima build date: 12:41 7/13/2004
host type: i686-pc-mingw32
lisp-implementation-type: Kyoto Common Lisp
lisp-implementation-version: GCL 2.7.0
After the change, My $adjoint function is
(EVAL-WHEN (COMPILE EVAL LOAD)
(DEFPROP $ADJOINT T TRANSLATED)
(ADD2LNC '$ADJOINT $PROPS)
(DEFMTRFUN
($ADJOINT $ANY MDEFINE NIL NIL)
($MAT)
NIL
((LAMBDA
($ADJ $N)
NIL
(SETQ $N ($LENGTH $MAT))
(SETQ $ADJ (SIMPLIFY ($IDENT $N)))
(COND
((NOT (LIKE $N 1))
(DO (($I 1 (f+ 1 $I)))
((> $I $N) '$DONE)
(DO (($J 1 (f+ 1 $J)))
((> $J $N) '$DONE)
(MASET (MUL (POWER -1 (f+ $I $J)) ;; changed MUL* --> MUL
(SIMPLIFY ($DETERMINANT (SIMPLIFY ($MINOR $MAT
$J
$I)))))
$ADJ
$I
$J)))))
$ADJ)
'$ADJ
'$N)))
Could the 'eval-when' be the real trouble maker?
Barton