]> code.delx.au - gnu-emacs/blobdiff - lisp/calc/calcalg2.el
(calc-get-operator-history): New variable.
[gnu-emacs] / lisp / calc / calcalg2.el
index d2459919fda2055a498fa8ebf52854a68fc525a6..f71e58e223a67239f9d4ac67679a08b0022cb3b2 100644 (file)
@@ -1,6 +1,7 @@
 ;;; calcalg2.el --- more algebraic functions for Calc
 
-;; Copyright (C) 1990, 1991, 1992, 1993, 2001 Free Software Foundation, Inc.
+;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2002, 2003, 2004,
+;;   2005, 2006 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 ;; Maintainer: Jay Belanger <belanger@truman.edu>
        (setq expr (list func expr var)))
      (calc-enter-result n "derv" expr))))
 
-(defun calc-integral (var)
-  (interactive "sIntegration variable: ")
-  (calc-slow-wrapper
-   (if (or (equal var "") (equal var "$"))
-       (calc-enter-result 2 "intg" (list 'calcFunc-integ
-                                        (calc-top-n 2)
-                                        (calc-top-n 1)))
-     (let ((var (math-read-expr var)))
-       (if (eq (car-safe var) 'error)
-          (error "Bad format in expression: %s" (nth 1 var)))
-       (calc-enter-result 1 "intg" (list 'calcFunc-integ
-                                        (calc-top-n 1)
-                                        var))))))
+(defun calc-integral (var &optional arg)
+  (interactive "sIntegration variable: \nP")
+  (if arg
+      (calc-tabular-command 'calcFunc-integ "Integration" "intg" nil var nil nil)
+    (calc-slow-wrapper
+     (if (or (equal var "") (equal var "$"))
+         (calc-enter-result 2 "intg" (list 'calcFunc-integ
+                                           (calc-top-n 2)
+                                           (calc-top-n 1)))
+       (let ((var (math-read-expr var)))
+         (if (eq (car-safe var) 'error)
+             (error "Bad format in expression: %s" (nth 1 var)))
+         (calc-enter-result 1 "intg" (list 'calcFunc-integ
+                                           (calc-top-n 1)
+                                           var)))))))
 
 (defun calc-num-integral (&optional varname lowname highname)
   (interactive "sIntegration variable: ")
 (defvar math-deriv-var)
 (defvar math-deriv-total)
 (defvar math-deriv-symb)
+(defvar math-decls-cache)
+(defvar math-decls-all)
 
 (defun math-derivative (expr)
   (cond ((equal expr math-deriv-var)
                        (calcFunc-expand temp)
                      (setq v (list 'var 'PARTS math-cur-record)
                            temp (let (calc-next-why)
-                                  (math-solve-for (math-sub v temp) 0 v nil)))
-                     (and temp (not (integerp temp))
-                          (math-simplify-extended temp)))))
+                                   (math-simplify-extended
+                                    (math-solve-for (math-sub v temp) 0 v nil)))
+                            temp (if (and (eq (car-safe temp) '/) 
+                                          (math-zerop (nth 2 temp))) 
+                                     nil temp)))))
           (setcar (cdr math-cur-record) 'busy)))))
 
 ;;; This tries two different formulations, hoping the algebraic simplifier
                      n (1+ n)
                      t1 (cdr t1)))
              (setq n (math-build-polynomial-expr poly high))
-             (if (memq low '(0 1))
+             (if (= low 1)
                  n
                (math-sub n (math-build-polynomial-expr poly
                                                        (math-sub low 1))))))