Unfortunately, this does not seem to be true. (if I do understand you
correctly) The DISREP property is explicitly set and read in hayat by the
following functions:
adjoin-sing-datum adjoin-pvar taylor1 setup-multivar-disrep re-taylor
srdisrep
also there are quite some comments, which I do not understand though...
I think I'd need a thourough understanding of rat before tackling this
bug. Stavros?
Martin
On Thu, 30 Jan 2003, Richard Fateman wrote:
> I suspect that the disrep property is used only temporarily when running
> $ratdisrep.
> RJf
>
>
> Martin RUBEY wrote:
> > well, I did some more hacking and ended up with the following result: I do
> > not understand varlist and genvar...
> >
> > It seems that it is perfectly alright for $rat to put anything on the
> > DISREP property of a genvar symbol, discarding its previous value?
> >
> > Is this really true?
> >
> > I let fpolysum print varlist and genvar together with its DISREP
> > properties just before and just after the $RAT stuff:
> >
> > (defun fpolysum (e) ;returns *ans*
> > (bugprint "fpolysum")
> > (let ((a (fpoly1 (setq e ($expand ($ratdisrep ($rat e *var*))))))
> > (b) ($prederror))
> > (bugprint "fpolysum")
> >
> >
> > I found out that setting taylor_simplifier:false; makes the result of
> > taylor(blabla) correct. Still, the following is part of the computation
> > and makes me wonder:
> >
> > ("fpolysum"
> > ($D ((%SUM SIMP)
> > ((MTIMES SIMP) ((%SUM SIMP) ((MEXPT SIMP) $L $K) $L 1 $D)
> > ((MEXPT SIMP) $M $K))
> > $K 1 $INF)
> > $M)
> > ((#:D21809 $D) (#:|'SUM(('SUM(L^K,L,1,D))*M^K,K,1,INF)21808| $L)
> > (#:M21808 $M)))
> > (1 ENTER $RAT (((MEXPT SIMP) $L 2) $L))
> >
> >
> > ("fpolysum"
> > ($D ((%SUM SIMP)
> > ((MTIMES SIMP) ((%SUM SIMP) ((MEXPT SIMP) $L $K) $L 1 $D)
> > ((MEXPT SIMP) $M $K))
> > $K 1 $INF)
> > $M)
> > ((#:D21809 $L) (#:|'SUM(('SUM(L^K,L,1,D))*M^K,K,1,INF)21808| $L)
> > (#:M21808 $M)))
> >
> > The only difference diff found between taylor_simplifier being switched
> > off and being equal to the default SIMPLIFY is that
> > taylor_simplify_recurse is not executed in the first setting. (rather,
> > taylor3 returns the result of taylor2 immediately:
> >
> > (xcons (if (null taylor_simplifier) (taylor2 e)
> > (setq e (taylor2 e))
> > (let ((exact-poly () ) (trunc-constants? () ))
> > (taylor_simplify_recurse e)))
> > (list 'MRAT 'SIMP varlist genvar tlist 'TRUNC)
> >
> > when taylor_simplify_recurse is invoked, it eventually rcdisrep's its
> > argument ps which returns the wrong answer, because the property cell of
> > the genvar contains the value set long ago by $rat in fpolysum. I inserted
> > some bugprint's as below and got the following:
> >
> > (rcdisrep is just a macro that calls cdisrep...)
> >
> > (1 ENTER TAYLOR_SIMPLIFY_RECURSE
> > ((PS (#:M21808 . 2) ((1 . 1)) ((1 . 1) (#:D21809 2 1 1 1) . 2))))
> >
> > ("recurse"
> > ($D ((%SUM SIMP)
> > ((MTIMES SIMP) ((%SUM SIMP) ((MEXPT SIMP) $L $K) $L 1 $D)
> > ((MEXPT SIMP) $M $K))
> > $K 1 $INF)
> > $M)
> > ((#:D21809 $L) (#:|'SUM(('SUM(L^K,L,1,D))*M^K,K,1,INF)21808| $L)
> > (#:M21808 $M)))
> >
> > (2 ENTER TAYLOR_SIMPLIFY_RECURSE (((#:D21809 2 1 1 1) . 2)))
> >
> > ("recurse"
> > ($D ((%SUM SIMP)
> > ((MTIMES SIMP) ((%SUM SIMP) ((MEXPT SIMP) $L $K) $L 1 $D)
> > ((MEXPT SIMP) $M $K))
> > $K 1 $INF)
> > $M)
> > ((#:D21809 $L) (#:|'SUM(('SUM(L^K,L,1,D))*M^K,K,1,INF)21808| $L)
> > (#:M21808 $M)))
> >
> > (1 ENTER CDISREP (((#:D21809 2 1 1 1) . 2)))
> > (1 EXIT CDISREP
> > ((MTIMES RATSIMP) ((RAT) 1 2)
> > ((MPLUS RATSIMP) ((MEXPT RATSIMP) $L 2) $L)))
> > ...
> >
> > Martin
> >
> > (defun taylor_simplify_recurse (ps)
> > (bugprint "recurse")
> > (if (pscoefp ps) (taylor2 (funcall taylor_simplifier (rcdisrep ps))))
> > (let ((datum (ps-data ps)) (var () ))
> > ;; We must treat multivars like 1, since they'll reappear again
> > ;; when we call taylor2 on their disrep'd coeff's.
> > (if (switch 'MULTIVAR datum) (setq datum () )
> > (setq var (getdisrep (gvar-o ps)))
> > ;; Don't push pw's < 0, else constants will be truncated
> > (push-pw datum (emax (trunc-lvl ps) (rczero))))
> > (do ((terms (terms ps) (n-term terms))
> > (ans (rczero) (psplus (if (null datum)
> > (taylor_simplify_recurse (lc
> > terms))
> > (pstimes (taylor_simplify_recurse
> > (lc terms))
> > ;; Don't do
> > ;; (taylor2 (funcall taylor_simplifier
> > ;; (m^ var (edisrep (le terms)))))
> > ;; causes terms to be lost when inverting. E.g.
> > ;; taylor(log(1+exp(-1/x)),x,0,5) calls
> > psexpt(<exp(1/x)^3>...3,-1)
> > ;; which must return a series good to 3+3(-1-1)=-3 which, when
> > added
> > ;; to other terms will truncate them to degree -3 also.
> > (if (ezerop (le terms)) (rcone)
> > (make-ps ps
> > (ncons
> > (term (le terms)
> > (rcone)))))))
> >
> > ans)))
> > ((null terms)
> > (when datum (pop-pw datum))
> > ans)))))
> >
> >
> > _______________________________________________
> > Maxima mailing list
> > Maxima@www.math.utexas.edu
> > http://www.math.utexas.edu/mailman/listinfo/maxima
>
>
>