Function: math-integral
math-integral is a byte-compiled function defined in calcalg2.el.gz.
Signature
(math-integral EXPR &optional SIMPLIFY SAME-AS-ABOVE)
Source Code
;; Defined in /usr/src/emacs/lisp/calc/calcalg2.el.gz
(defun math-integral (expr &optional simplify same-as-above)
(let* ((simp math-cur-record)
(math-cur-record (assoc expr math-integral-cache))
(math-integ-depth (1+ math-integ-depth))
(val 'cancelled))
(math-tracing-integral "Integrating "
(math-format-value expr 1000)
"...\n")
(and math-cur-record
(progn
(math-tracing-integral "Found "
(math-format-value (nth 1 math-cur-record) 1000))
(and (consp (nth 1 math-cur-record))
(math-replace-integral-parts math-cur-record))
(math-tracing-integral " => "
(math-format-value (nth 1 math-cur-record) 1000)
"\n")))
(or (and math-cur-record
(not (eq (nth 1 math-cur-record) 'cancelled))
(or (not (integerp (nth 1 math-cur-record)))
(>= (nth 1 math-cur-record) math-integ-level)))
(and (math-integral-contains-parts expr)
(progn
(setq val nil)
t))
(unwind-protect
(progn
(let (math-integ-msg)
(if (eq calc-display-working-message 'lots)
(progn
(calc-set-command-flag 'clear-message)
(setq math-integ-msg (format
"Working... Integrating %s"
(math-format-flat-expr expr 0)))
(message "%s" math-integ-msg)))
(if math-cur-record
(setcar (cdr math-cur-record)
(if same-as-above (vector simp) 'busy))
(setq math-cur-record
(list expr (if same-as-above (vector simp) 'busy))
math-integral-cache (cons math-cur-record
math-integral-cache)))
(if (eq simplify 'yes)
(progn
(math-tracing-integral "Simplifying...")
(setq simp (math-simplify expr))
(setq val (if (equal simp expr)
(progn
(math-tracing-integral " no change\n")
(math-do-integral expr))
(math-tracing-integral " simplified\n")
(math-integral simp 'no t))))
(or (setq val (math-do-integral expr))
(eq simplify 'no)
(let ((simp (math-simplify expr)))
(or (equal simp expr)
(progn
(math-tracing-integral "Trying again after "
"simplification...\n")
(setq val (math-integral simp 'no t))))))))
(if (eq calc-display-working-message 'lots)
(message "%s" math-integ-msg)))
(setcar (cdr math-cur-record) (or val
(if (or math-enable-subst
(not math-any-substs))
math-integ-level
'cancelled)))))
(setq val math-cur-record)
(while (vectorp (nth 1 val))
(setq val (aref (nth 1 val) 0)))
(setq val (if (memq (nth 1 val) '(parts parts2))
(progn
(setcar (cdr val) 'parts2)
(list 'var 'PARTS val))
(and (consp (nth 1 val))
(nth 1 val))))
(math-tracing-integral "Integral of "
(math-format-value expr 1000)
" is "
(math-format-value val 1000)
"\n")
val))