# [Maxima] Testing of simplify().

Constantine Frangos cfrangos at telkomsa.net
Thu Dec 10 20:00:58 CST 2009

```Dear List,

I am using the Maxima program pasted below to test the simplify() lisp
function (attached) kindly contributed some time ago by Ziga Lenarcic.

In this case there is an error message:

Division by 0
#0: test_simplifyv3()(test_simplifyv3.mac line 41)
-- an error.  To debug this try debugmode(true);
(%i30)

I dont know lisp, but it seems to be caused by the lisp function:

(defun \$rationalize_numerator (x)
(let ((\$algebraic t))
(if (zerop1 x) x (div 1 (sratsimp (div 1 x))))))

Also, its not clear whether Maxima takes into account the assume statement, as

Any assistance would be appreciated.

Thanks very much.

Regards,

C. Frangos.

test_simplifyv3() := block(

display2d : false,

Aconz : matrix([1,0,Lo1*sin(phi),-a*sin(phi),0,0,0,0,0],
[0,1,-Lo1*cos(phi),a*cos(phi),0,0,0,0,0],
[1,0,-Lo1*sin(phi),0,-a*sin(phi),0,0,0,0],
[0,1,Lo1*cos(phi),0,a*cos(phi),0,0,0,0],
[1,0,Lo1*sin(phi)-Lc*cos(phi),0,0,0,
-a*(cos(delta3)*sin(phi)+sin(delta3)*cos(phi)),0,0],
[0,1,-(Lc*sin(phi)+Lo1*cos(phi)),0,0,0,
a*(cos(delta3)*cos(phi)-sin(delta3)*sin(phi)),0,0],
[1,0,-(Lo1*sin(phi)+Lc*cos(phi)),0,0,
-a*(sin(phi)/sqrt(sin(delta3)^2*Lc^2
/(2*sin(delta3)*Lo1+cos(delta3)*Lc)^2
+1)
+sin(delta3)*Lc*cos(phi)
/((2*sin(delta3)*Lo1+cos(delta3)*Lc)
*sqrt(sin(delta3)^2*Lc^2
/(2*sin(delta3)*Lo1+cos(delta3)*Lc)^2
+1))),0,0,0],
[0,1,-(Lc*sin(phi)-Lo1*cos(phi)),0,0,
a*(cos(phi)/sqrt(sin(delta3)^2*Lc^2
/(2*sin(delta3)*Lo1+cos(delta3)*Lc)^2
+1)
-sin(delta3)*Lc*sin(phi)
/((2*sin(delta3)*Lo1+cos(delta3)*Lc)
*sqrt(sin(delta3)^2*Lc^2
/(2*sin(delta3)*Lo1+cos(delta3)*Lc)^2
+1))),0,0,0],[0,0,0,1,1,0,0,0,-kon]),

display(Aconz),

assume(2*sin(delta3)*Lo1+cos(delta3)*Lc > 0),

Aconzs : simplify(Aconz),

display(Aconzs),

return(" ")

);

-------------- next part --------------
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Simplify
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; This library is free software; you can redistribute it and/or modify it
;;; Free Software Foundation; either version 2 of the License, or (at
;;; your option) any later version.
;;;
;;; This library is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
;;; Library General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License along
;;; with this library; if not, write to the Free Software
;;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
;;;
;;; Copyright (C) 2009 Ziga Lenarcic
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defun \$leaf_count (expr)
(cond ((atom expr) 1)
((eq (caar expr) 'mrat) (\$leaf_count (ratdisrep expr)))
(t (1+ (reduce #'+ (mapcar #'\$leaf_count (rest expr)))))))

(defun \$rationalize_numerator (x)
(let ((\$algebraic t))
(if (zerop1 x) x (div 1 (sratsimp (div 1 x))))))

(defun \$algebraic_simp (x)
(let ((\$algebraic t))
(sratsimp x)))

(defun hec (x)
(defun hec2 (x)
(defun hec3 (x)
(mfuncall '\$trigsimp x))
(defparameter *simplify-functions*
'(
\$factor
\$factorsum
\$expand
\$rationalize_numerator
\$algebraic_simp
\$ratsimp
\$rectform
\$trigreduce
hec3
hec
\$rectform
hec2
\$exponentialize))

(defun \$simplify (expr &optional (cost-function #'\$leaf_count))
(if (listp expr)
(let ((best-expr expr)
(best-cost (mfuncall cost-function expr)))
(dolist (fun *simplify-functions*)
(let* ((new-expr (funcall fun expr))
(new-cost (mfuncall cost-function new-expr)))
(if (< new-cost best-cost) (setf best-cost new-cost
best-expr new-expr)
(let* ((new-expr2 (funcall fun best-expr))
(new-cost2 (mfuncall cost-function new-expr2)))
(when (< new-cost2 best-cost)
(setf best-cost new-cost2
best-expr new-expr2))))
))

(if (listp best-expr)
(cons (first best-expr) (mapcar #'\$simplify (rest best-expr)))
best-expr)
)
expr))

```