From: Stavros M. <mac...@gm...> - 2024-08-17 22:38:59
|
Normally, the *translated* property means that the function was defined using *translate*. I have no idea why functions originally defined in Lisp have this flag. This is intentional (defmfun/ commac.lisp): ;; I (rtoy) think we can consider all defmfun's as translated functions. (defprop ,function t translated) but I have no idea of the rationale. This seems wrong -- for example, (mget '$cons 'mexpr) => nil, unlike a genuine translated function, where it is the Maxima definition of the function. Ray? -s On Sat, Aug 17, 2024 at 6:22 PM Eduardo Ochs <edu...@gm...> wrote: > Thanks!!! > A quick question... > The source of taylorp in simp.lisp is very clear: > > (defmfun $taylorp (x) > (and (not (atom x)) > (eq (caar x) 'mrat) > (member 'trunc (cdar x)) t)) > > but > > :lisp (describe '$taylorp) > > says "Symbol-plist: ... TRANSLATED -> T ...". > > What does the "translated" mean in this case? I took a quick look at > all the occurences of "translate" in the info manual and I got the > impression that translated functions come from Maxima functions, but I > grepped the sources and I didn't find a possible Maxima source for > this $taylorp... > > Cheers, TIA, etc, > Eduardo > > > On Sat, 17 Aug 2024 at 19:04, Stavros Macrakis <mac...@gm...> wrote: > >> taylorp(taylor(1,x,0,1)) => true >> >> >> On Sat, Aug 17, 2024, 16:54 Eduardo Ochs <edu...@gm...> wrote: >> >>> Hi all, >>> >>> sorry for the delay - we're at the end of the semester here, with lots >>> of tests to prepare and to mark... and this will be a partial answer - >>> I haven't tried all of your suggestions yet. Anyway... >>> >>> My questions about the internal representation of the objects returned >>> by "factor", "trunc" and "taylor" were not because I need to do >>> something "practical" with these objects in the near future - I was >>> asking them just because my mental model of Maxima objects is still >>> very incomplete, and when I ask these questions here I usually get >>> answers that help me a lot. >>> >>> The documentation for "trunc", at >>> >>> (info "(maxima)trunc") >>> https://maxima.sourceforge.io/docs/manual/maxima_141.html#trunc >>> >>> says: >>> >>> Annotates the internal representation of the general expression >>> <expr> so that it is displayed as if its sums were truncated Taylor >>> series. <expr> is not otherwise modified. >>> >>> The snippet below shows some ways of exploring these annotations - I'm >>> guessing that "annotations" is the correct term: >>> >>> a1 : a*b; >>> a2 : factor(100); >>> b1 : 23 + 45*x; >>> b2 : trunc(b1); /* has a ... */ >>> b3 : taylor(b1, x, 0, 1); /* has a ... and a /T/ */ >>> ratp(b1); /* false */ >>> ratp(b2); /* false */ >>> ratp(b3); /* true */ >>> to_lisp(); >>> #$a*b$ ; ((MTIMES SIMP) $A $B) >>> #$a1$ ; ((MTIMES SIMP) $A $B) >>> #$a2$ ; ((MTIMES SIMP FACTORED) ((MEXPT SIMP) 2 2) ((MEXPT SIMP) 5 >>> 2)) >>> #$b1$ ; ((MPLUS SIMP) 23 ((MTIMES SIMP) 45 $X)) >>> #$b2$ ; ((MPLUS SIMP TRUNC) 23 ((MTIMES SIMP) 45 $X)) >>> #$b3$ ; ((MRAT SIMP ... TRUNC) PS ...) >>> (car #$b2$) ; (MPLUS SIMP TRUNC) >>> (cdar #$b2$) ; (SIMP TRUNC) >>> (cddar #$b2$) ; (TRUNC) >>> (to-maxima) >>> >>> There is a simple way to detect "taylorness" from Maxima - we can use >>> "ratp" - but I couldn't find a simple way to detect "truncness", or >>> "factoredness"... my guess is that if, and when, I decide that some of >>> these annotations are important in my programs that represent Maxima >>> objects as trees, then I will have write some Lisp to interpret the >>> "cdar"s or the "cddar"s of these objects to see if they have any >>> annotations that are worth showing... and "worth showing" is something >>> that obviously depends on the context, and in many cases just adding a >>> way to indicate that "this object has non-trivial annotations" would >>> be enough. >>> >>> Anyway, these annotations look very important, but the only places in >>> the manual in which I remember seeing them mentioned clearly are here, >>> >>> (info "(maxima)Introduction to Simplification") >>> https://maxima.sourceforge.io/docs/manual/maxima_45.html >>> >>> that points to this paper, in which they are called "flags", >>> >>> https://people.eecs.berkeley.edu/~fateman/papers/intro5.txt >>> https://maxima.sourceforge.io/misc/Fateman-Salz_Simplifier_Paper.pdf >>> >>> and here: >>> >>> (info "(maxima)Introduction to Lists") >>> https://maxima.sourceforge.io/docs/manual/maxima_20.html >>> >>> Are there standard functions to inspect them _from Maxima_? Any >>> pointers, comments, recommendations? >>> >>> Thanks in advance, and, again, sorry for not having digested all the >>> material in your previous answers _yet_... =/ >>> >>> Eduardo Ochs >>> http://anggtwu.net/eev-maxima.html >>> >>> >>> On Thu, 15 Aug 2024 at 14:11, Stavros Macrakis <mac...@gm...> >>> wrote: >>> >>>> As I said in my post: >>>> >>>> The clean way to process factorizations programmatically is with >>>> *ifactors*. >>>> >>>> ifactors(10!) => [[2, 8], [3, 4], [5, 2], [7, 1]] >>>> >>>> >>>> No reason to call internal functions or futz around with the output of >>>> *factor*, which is not designed for programmatic use. >>>> >>>> -s >>>> >>>> >>>> On Thu, Aug 15, 2024 at 9:29 AM Richard Fateman <fa...@gm...> >>>> wrote: >>>> >>>>> >>>>> If you expect Maxima to continually retain a factorization like 2^3 >>>>> through various simplifications, >>>>> you have to turn off the simplifier, which pretty much breaks the >>>>> whole system. >>>>> >>>>> If you want to see the factors and multiplicities, do this: >>>>> :lisp (trace nratfact). >>>>> >>>>> If you want to acquire a result that gives prime factors and >>>>> multiplicities in some structure that >>>>> does not disappear, that structure might look like ... >>>>> factorlist([2,3], [3,1}) for 2^3*3^1 or 24. >>>>> It would be quite easy to make an alternative version of nratfact, or >>>>> consider >>>>> >>>>> >>>>> *factorlist(r) := psubst([ "^"="[","*"="[" ], factor(r));* >>>>> >>>>> which, for factorlist(24) gives [[2,3],3]. >>>>> (sorry, if you want 3 to appear as 3^1 or [3,1] you'll have to write >>>>> another line of code. >>>>> >>>>> As for the show expression task, here's a simpler piece of code for >>>>> most of the task.. >>>>> *showit(r):=psubst(psubstlist,r);* >>>>> where >>>>> >>>>> >>>>> *psubstlist: [ "^"=Power, "*"=Times, "+"=Plus, "/"=Div]; (*etc >>>>> etc for all operators of interest . Maybe choose other names *)* >>>>> >>>>> I think that the graphical tree representation of expressions may be >>>>> of some brief explanatory use, but >>>>> the prefix expression version is, for me, much more appealing. Thus >>>>> *showit (rat(x+1)^2);* >>>>> returns >>>>> *Plus(Power(x,2),Times(2,x),1)* >>>>> >>>>> >>>>> RJF >>>>> >>>>> On Wed, Aug 14, 2024 at 6:15 PM Stavros Macrakis <mac...@gm...> >>>>> wrote: >>>>> >>>>>> One problem with integer factorizations is that they are >>>>>> pseudo-simplified: normally, Maxima does not allow 2^3 as a simplified >>>>>> expression, but *factor* cheats and marks the expression as >>>>>> simplified, even though it isn't. That means that it gives strange results >>>>>> if you try to manipulate it: >>>>>> >>>>>> qq:factor(24) => 2^3*3 >>>>>> qq+1 => 2^3*3 + 1 >>>>>> >>>>>> <big snip> >>>>> >>>>> >>>> |