(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)