Function: calcFunc-integ
calcFunc-integ is an autoloaded and byte-compiled function defined in
calcalg2.el.gz.
Signature
(calcFunc-integ EXPR VAR &optional LOW HIGH)
Source Code
;; Defined in /usr/src/emacs/lisp/calc/calcalg2.el.gz
(defun calcFunc-integ (expr var &optional low high)
(cond
;; Do these even if the parts turn out not to be integrable.
((eq (car-safe expr) '+)
(math-add (calcFunc-integ (nth 1 expr) var low high)
(calcFunc-integ (nth 2 expr) var low high)))
((eq (car-safe expr) '-)
(math-sub (calcFunc-integ (nth 1 expr) var low high)
(calcFunc-integ (nth 2 expr) var low high)))
((eq (car-safe expr) 'neg)
(math-neg (calcFunc-integ (nth 1 expr) var low high)))
((and (eq (car-safe expr) '*)
(not (math-expr-contains (nth 1 expr) var)))
(math-mul (nth 1 expr) (calcFunc-integ (nth 2 expr) var low high)))
((and (eq (car-safe expr) '*)
(not (math-expr-contains (nth 2 expr) var)))
(math-mul (calcFunc-integ (nth 1 expr) var low high) (nth 2 expr)))
((and (eq (car-safe expr) '/)
(not (math-expr-contains (nth 1 expr) var))
(not (math-equal-int (nth 1 expr) 1)))
(math-mul (nth 1 expr)
(calcFunc-integ (math-div 1 (nth 2 expr)) var low high)))
((and (eq (car-safe expr) '/)
(not (math-expr-contains (nth 2 expr) var)))
(math-div (calcFunc-integ (nth 1 expr) var low high) (nth 2 expr)))
((and (eq (car-safe expr) '/)
(eq (car-safe (nth 1 expr)) '*)
(not (math-expr-contains (nth 1 (nth 1 expr)) var)))
(math-mul (nth 1 (nth 1 expr))
(calcFunc-integ (math-div (nth 2 (nth 1 expr)) (nth 2 expr))
var low high)))
((and (eq (car-safe expr) '/)
(eq (car-safe (nth 1 expr)) '*)
(not (math-expr-contains (nth 2 (nth 1 expr)) var)))
(math-mul (nth 2 (nth 1 expr))
(calcFunc-integ (math-div (nth 1 (nth 1 expr)) (nth 2 expr))
var low high)))
((and (eq (car-safe expr) '/)
(eq (car-safe (nth 2 expr)) '*)
(not (math-expr-contains (nth 1 (nth 2 expr)) var)))
(math-div (calcFunc-integ (math-div (nth 1 expr) (nth 2 (nth 2 expr)))
var low high)
(nth 1 (nth 2 expr))))
((and (eq (car-safe expr) '/)
(eq (car-safe (nth 2 expr)) '*)
(not (math-expr-contains (nth 2 (nth 2 expr)) var)))
(math-div (calcFunc-integ (math-div (nth 1 expr) (nth 1 (nth 2 expr)))
var low high)
(nth 2 (nth 2 expr))))
((eq (car-safe expr) 'vec)
(cons 'vec (mapcar (lambda (x) (calcFunc-integ x var low high))
(cdr expr))))
(t
(let ((state (list calc-angle-mode
;;calc-symbolic-mode
;;calc-prefer-frac
calc-internal-prec
(calc-var-value 'var-IntegRules)
(calc-var-value 'var-IntegSimpRules))))
(or (equal state math-integral-cache-state)
(setq math-integral-cache-state state
math-integral-cache nil)))
(let* ((math-max-integral-limit (or (and (natnump var-IntegLimit)
var-IntegLimit)
3))
(math-integral-limit 1)
(sexpr (math-expr-subst expr var math-integ-var))
(trace-buffer (get-buffer "*Trace*"))
(calc-language (if (eq calc-language 'big) nil calc-language))
(math-any-substs t)
(math-enable-subst nil)
(math-prev-parts-v nil)
;; (math-doing-parts nil) ;Unused
(math-good-parts nil)
(res
(if trace-buffer
(let ((calcbuf (current-buffer))
(calcwin (selected-window)))
(unwind-protect
(progn
(if (get-buffer-window trace-buffer)
(select-window (get-buffer-window trace-buffer)))
(set-buffer trace-buffer)
(goto-char (point-max))
(or (assq 'scroll-stop (buffer-local-variables))
(setq-local scroll-step 3))
(insert "\n\n\n")
(set-buffer calcbuf)
(math-try-integral sexpr))
(select-window calcwin)
(set-buffer calcbuf)))
(math-try-integral sexpr))))
(if res
(progn
(if (calc-has-rules 'var-IntegAfterRules)
(setq res (math-rewrite res '(var IntegAfterRules
var-IntegAfterRules))))
(math-simplify
(if (and low high)
(math-sub (math-expr-subst res math-integ-var high)
(math-expr-subst res math-integ-var low))
(setq res (math-fix-const-terms res math-integ-vars))
(if low
(math-expr-subst res math-integ-var low)
(math-expr-subst res math-integ-var var)))))
(append (list 'calcFunc-integ expr var)
(and low (list low))
(and high (list high))))))))