From: SourceForge.net <no...@so...> - 2007-12-29 17:43:04
|
Bugs item #1860487, was opened at 2007-12-29 10:43 Message generated for change (Tracker Item Submitted) made by Item Submitter You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=104933&aid=1860487&group_id=4933 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Lisp Core - Integration Group: None Status: Open Resolution: None Priority: 5 Private: No Submitted By: Robert Dodier (robert_dodier) Assigned to: Nobody/Anonymous (nobody) Summary: MONSTERTRIG endless recursion Initial Comment: MONSTERTRIG tries to reduce some trig expressions and start over. However I've encountered an expression for which the attempted reduction has no effect, so it loops endlessly. e.g. trace (integrate, ?monstertrig); integrate (x*(cos(2*x) + sin(x)), x); => 1 Enter integrate [x*(cos(2*x)+sin(x)),x] 1 Enter ?monstertrig [x*(cos(2*x)+sin(x)),x,x] 1 Exit ?monstertrig false 1 Enter ?monstertrig [x*(cos(2*x)+sin(x)),x,2*x] 2 Enter integrate [?new\-var\-15974*(cos(?new\-var\-15974) +sin(?new\-var\-15974/2)) /2,?new\-var\-15974] 2 Enter ?monstertrig [?new\-var\-15974*(cos(?new\-var\-15974) +sin(?new\-var\-15974/2)),?new\-var\-15974, ?new\-var\-15974/2] 3 Enter integrate [2*?new\-var\-15975 *(cos(2*?new\-var\-15975)+sin(?new\-var\-15975)), ?new\-var\-15975] 3 Enter ?monstertrig [?new\-var\-15975*(cos(2*?new\-var\-15975) +sin(?new\-var\-15975)),?new\-var\-15975, ?new\-var\-15975] 3 Exit ?monstertrig false ... etc etc. Here's the relevant code from MONSTERTRIG (src/sin.lisp). ;; We have trig(c*x+b). Use the substitution y=c*x+b to ;; try to compute the integral. Why? Because x*sin(n*x) ;; takes longer and longer as n gets larger and larger. ;; This is caused by the Risch integrator. This is a ;; work-around for this issue. (let ((c (cdras 'c arg)) (b (cdras 'b arg)) (new-var (gensym "NEW-VAR-"))) (let ((new-int (div ($integrate (maxima-substitute (div (sub new-var b) c) var exp) new-var) c))) (return-from monstertrig (maxima-substitute *trigarg* new-var new-int))))) risch has no trouble with the example shown above, although the comments in MONSTERTRIG suggest risch has trouble in some cases. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=104933&aid=1860487&group_id=4933 |