changeset 65356:22640ddbd499

(math-expand-term): Multiply out the powers when in matrix mode.
author Jay Belanger <jay.p.belanger@gmail.com>
date Wed, 07 Sep 2005 19:27:11 +0000
parents d96b22b8de33
children 86ed743ad197
files lisp/calc/calc-poly.el
diffstat 1 files changed, 36 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/calc/calc-poly.el	Wed Sep 07 18:48:34 2005 +0000
+++ b/lisp/calc/calc-poly.el	Wed Sep 07 19:27:11 2005 +0000
@@ -1069,18 +1069,45 @@
 	 (math-add-or-sub (list '/ (nth 1 (nth 1 expr)) (nth 2 expr))
 			  (list '/ (nth 2 (nth 1 expr)) (nth 2 expr))
 			  nil (eq (car (nth 1 expr)) '-)))
+        ((and (eq calc-matrix-mode 'matrix)
+              (eq (car-safe expr) '^)
+              (natnump (nth 2 expr))
+              (> (nth 2 expr) 1)
+              (memq (car-safe (nth 1 expr)) '(+ -)))
+         (if (= (nth 2 expr) 2)
+             (math-add-or-sub (list '* (nth 1 (nth 1 expr)) (nth 1 expr))
+                              (list '* (nth 2 (nth 1 expr)) (nth 1 expr))
+                              nil (eq (car (nth 1 expr)) '-))
+           (math-add-or-sub (list '* (nth 1 (nth 1 expr)) (list '^ (nth 1 expr) 
+                                                                (1- (nth 2 expr))))
+                            (list '* (nth 2 (nth 1 expr)) (list '^ (nth 1 expr) 
+                                                                (1- (nth 2 expr))))
+                            nil (eq (car (nth 1 expr)) '-))))
 	((and (eq (car-safe expr) '^)
 	      (memq (car-safe (nth 1 expr)) '(+ -))
 	      (integerp (nth 2 expr))
-	      (if (> (nth 2 expr) 0)
-		  (or (and (or (> math-mt-many 500000) (< math-mt-many -500000))
-			   (math-expand-power (nth 1 expr) (nth 2 expr)
-					      nil t))
-		      (list '*
-			    (nth 1 expr)
-			    (list '^ (nth 1 expr) (1- (nth 2 expr)))))
-		(if (< (nth 2 expr) 0)
-		    (list '/ 1 (list '^ (nth 1 expr) (- (nth 2 expr))))))))
+              (if (and (eq calc-matrix-mode 'matrix)
+                       (> (nth 2 expr) 1))
+                  (if (= (nth 2 expr) 2)
+                      (math-add-or-sub (list '* (nth 1 (nth 1 expr)) (nth 1 expr))
+                                       (list '* (nth 2 (nth 1 expr)) (nth 1 expr))
+                                       nil (eq (car (nth 1 expr)) '-))
+                    (math-add-or-sub (list '* (nth 1 (nth 1 expr)) 
+                                           (list '^ (nth 1 expr) 
+                                                 (1- (nth 2 expr))))
+                                     (list '* (nth 2 (nth 1 expr)) 
+                                           (list '^ (nth 1 expr) 
+                                                 (1- (nth 2 expr))))
+                                     nil (eq (car (nth 1 expr)) '-)))
+                (if (> (nth 2 expr) 0)
+                    (or (and (or (> math-mt-many 500000) (< math-mt-many -500000))
+                             (math-expand-power (nth 1 expr) (nth 2 expr)
+                                                nil t))
+                        (list '*
+                              (nth 1 expr)
+                              (list '^ (nth 1 expr) (1- (nth 2 expr)))))
+                  (if (< (nth 2 expr) 0)
+                      (list '/ 1 (list '^ (nth 1 expr) (- (nth 2 expr)))))))))
 	(t expr)))
 
 (defun calcFunc-expand (expr &optional many)