Re: [Maxima-bugs] [ maxima-Bugs-988701 ] incorrect matrix inversion



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