1;;; -*-  Mode: Lisp; Package: Maxima; Syntax: Common-Lisp; Base: 10 -*- ;;;;
2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3;;;     The data in this file contains enhancments.                    ;;;;;
4;;;                                                                    ;;;;;
5;;;  Copyright (c) 1984,1987 by William Schelter,University of Texas   ;;;;;
6;;;     All rights reserved                                            ;;;;;
7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
8;;;     (c) Copyright 1980 Massachusetts Institute of Technology         ;;;
9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
10
11(in-package :maxima)
12
13(macsyma-module tlimit)
14
15(load-macsyma-macros rzmac)
16
17;; TOP LEVEL FUNCTION(S): $TLIMIT $TLDEFINT
18
19(defmfun $tlimit (&rest args)
20  (let ((limit-using-taylor t))
21    (declare (special limit-using-taylor))
22    (apply #'$limit args)))
23
24(defmfun $tldefint (exp var ll ul)
25  (let ((limit-using-taylor t))
26    (declare (special limit-using-taylor))
27    ($ldefint exp var ll ul)))
28
29(defun tlimp (expr)		; TO BE EXPANDED TO BE SMARTER (MAYBE)
30  (declare (ignore expr))
31  t)
32
33;; compute limit of exp by finding its taylor series expansion.
34;; asks for $lhospitallim terms of taylor series.
35;; this is an arbitrary limit: with default value $lhospitallim = 4,
36;;  tlimit(2^n/n^5, n, inf)  =>  0
37(defun taylim (exp var val *i*)
38  (prog (ex)
39     (setq ex (catch 'taylor-catch
40		(let ((silent-taylor-flag t))
41		  (declare (special silent-taylor-flag))
42		  ($taylor exp var (ridofab val) $lhospitallim))))
43     (or ex (return (cond ((eq *i* t)
44			   (limit1 exp var val))
45			  ((eq *i* 'think)
46			   (if (member (caar exp) '(mtimes mexpt) :test #'eq)
47			       (limit1 exp var val)
48			       (simplimit exp var val)))
49			  (t
50			   (simplimit exp var val)))))
51     (return
52       (let ((taylored t))
53	 (declare (special taylored))
54	 (limit (simplify ($ratdisrep ex)) var val 'think)))))
55