Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2007
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2007

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: record intermediate steps

  • To: mathgroup at smc.vnet.net
  • Subject: [mg73328] Re: record intermediate steps
  • From: "dimitris" <dimmechan at yahoo.com>
  • Date: Mon, 12 Feb 2007 05:05:51 -0500 (EST)
  • References: <acbec1a40702030708s788e8d9eyb42dbca0941a061c@mail.gmail.com>

On Feb 11, 8:12 am, "Chris Chiasson" <c... at chiasson.name> wrote:
> Look under "miscellaneous advanced techniques" here:http://library.wolfram.com/conferences/devconf99/villegas/Unevaluated...
>
> On 2/9/07, dimitris <dimmec... at yahoo.com> wrote:
>
>
>
>
>
> > On Feb 9, 9:38 am, "dimitris" <dimmec... at yahoo.com> wrote:
> > > On Feb 6, 9:35 am, "Chris Chiasson" <c... at chiasson.name> wrote:
>
> > > > The trap method is pretty straightforward and elegant, at least when
> > > > one isn't trying to use it on all functions at once or limit the
> > > > number of function calls recorded:
>
> > > > The first idea is to take a function name (which is a symbol) and then
> > > > assign a very specific DownValue to it, causing that DownValue to
> > > > "jump the queue" and be executed before the symbol's internal
> > > > DownValues.
>
> > > > The second idea is that the right hand side of this specific DownValue
> > > > then sets the condition to be False, Prints or otherwise records the
> > > > function call, and then executes the built in DownValues by performing
> > > > the same function call again. The condition must be set to false in
> > > > order to avoid infinite tail recursion.
>
> > > > On 2/3/07, dimitris anagnostou <dimmec... at yahoo.com> wrote:
>
> > > > > Hello Chris,
>
> > > > > Thanks for your response!
>
> > > > > It will be very good to suceed in your attempts!
>
> > > > > I used Robby Villegas' trap method on some examples; very interesting indeed
> > > > > but I doubt if I will ever can understand it completely or write it down on
> > > > > my own!
>
> > > > > Doing my first steps on this area of Mathematica (figuring out what is
> > > > > going/called etc) I tried to use something like
>
> > > > > On[];
> > > > > FullSimplify[Cos[2*(Pi/7)]*Cos[4*(Pi/7)]*Cos[8*(Pi/7)]]
> > > > > Off[];
>
> > > > > But the process during the (Full)Simplification are too "internal" to be
> > > > > "reported" by this elementary setting.
>
> > > > > Best Regards
> > > > > Dimitris
>
> > > > > Chris Chiasson <c... at chiasson.name> wrote:
> > > > > Dimitris,
> > > > > I tried using Robby Villegas' trap method in an automated fashion on
> > > > > most of the functions in the System` context to see if I could figure
> > > > > out what is being called. Unfortunately, it breaks FullSimplify and
> > > > > doesn't reveal what functions were called. However, I am not yet ready
> > > > > to give up on this method.
>
> > > > > Also, it is possible to get 1/8 by using
> > > > > RootReduce@TrigFactor@tr
>
> > > > > Anyway, here is the automated trapping code:
> > > > > In[1]:=
> > > > > nameTrapBin={};
> > > > > In[2]:=
> > > > > nameTrap[symb_Symbol]/;FreeQ[Attributes@symb,Locked]:=
> > > > > Module[{trap=True},Unprotect@Unevaluated@symb;
> > > > > g_symb/;trap:=
> > > > > Block[{trap=False},
> > > > > If[nameTrapCount>0,nameTrapCount--;
> > > > > nameTrapBin={nameTrapBin,HoldForm@g}];g]]
> > > > > In[3]:=
> > > > > nameTrap[str_String]:=ToExpression[str,InputForm,nameTrap]
> > > > > In[4]:=
> > > > > nameSet=DeleteCases[Names["System`*"],
> > > > > Alternatives@@
> > > > > Union[Join[
> > > > > ToString/@
> > > > > Cases[DownValues@nameTrap,_Symbol,{0,Infinity},
> > > > > Heads\[Rule]True],Names["System`*Packet*"],
> > > > > Names["System`*Box*"],Names["System`*Abort*"],
> > > > > Names["System`*Trace*"],Names["System`*Dialog*"],
> > > > > Names["System`*Message*"],Names["System`*$*"],
> > > > > Names["System`*Link*"],Names["System`*Set*"],
> > > > > Names["System`*Message*"],{"Apply"}]]];
> > > > > In[5]:=
> > > > > ((*Print@#;*)nameTrap@#)&/@nameSet;
> > > > > In[6]:=
> > > > > Block[{nameTrapCount=10},tr=Cos[2*Pi/7]*Cos[4*Pi/7]*Cos[8*Pi/7]]
> > > > > In[7]:=
> > > > > FullSimplify@tr
> > > > > In[8]:=
> > > > > Block[{name TrapCount=10},BetaRegularized[1,2,3]]
> > > > > In[9]:=
> > > > > Flatten@nameTrapBin
>
> > > > > On 2/3/07, dimitris wrote:
> > > > > > I know that Mathematica's implementated algorithms in most cases (for
> > > > > > e.g. indefinite integration) do not follow the "human way" (e.g.
> > > > > > integration by parts, substitution etc).
>
> > > > > > But sometimes it is quite interesting to "record on the side" the
> > > > > > intermediate tranformations
> > > > > > rules followed in the course of arriving in the result.
>
> > > > > > So, consider the following expression:
>
> > > > > > In[6]:=
> > > > > > tr = Cos[2*Pi/7]*Cos[4*Pi/7]*Cos[8*Pi/7]
>
> > > > > > Out[6]=
> > > > > > Cos[(2*Pi)/7]*Cos[(4*Pi)/7]*Cos[(8*Pi)/7]
>
> > > > > > It is very easy to show that tr is actually equal to 1/8.
>
> > > > > > In Mathematica you can demonstrate this with the command
>
> > > > > > In[7]:=
> > > > > > FullSimplify[tr]
>
> > > > > > Out[7]=
> > > > > > 1/8
>
> > > > > > I believe (but I am not sure!) that Mathematica more or less in this
> > > > > > example follow the "human way" of applying the transformation rules.
>
> > > > > > So, I would like to see/know them (i.e. the transformation rules)
> > > > > > applied by mathematica to reach this result and further record on the
> > > > > > side (regardless if they actually have any resemblence with the way a
> > > > > > human will work in this example!).
>
> > > > > > I personally tried
>
> > > > > > In[8]:=
> > > > > > Trace[FullSimplify[tr], TraceInternal -> True]
>
> > > > > > but this is not the case here!
>
> > > > > > Thanks in advance for any kind of response.
>
> > > > > > Dimitris
>
> > > > > --
> > > > >http://chris.chiasson.name/
>
> > > > >  ________________________________
> > > > > We won't tell. Get more on shows you hate to love
> > > > > (and love to hate): Yahoo! TV's Guilty Pleasures list.
>
> > > > --http://chris.chiasson.name/-Hidequoted text -
>
> > > > - Show quoted text -
>
> > > Hello again!
>
> > > Can you provide me with some advances of application of the trap
> > > method of your own?
>
> > > Thanks a lot!
>
> > > Dimitris- Hide quoted text -
>
> > > - Show quoted text -
>
> > Oooops!
>
> > I meant
>
> > "Can you provide me with some examples of application of the trap
> > method of your own?"
>
> > that is,examples instead of advances (I really don't know what I was
> > thinking when I wrote the last post!)
>
> > Dimitris
>
> --http://chris.chiasson.name/- Hide quoted text -
>
> - Show quoted text -

Thanks a lot Chris!

Cheers
Dimitris



  • Prev by Date: Re: a function containg MeijerG (limit behavior)
  • Next by Date: conditional plotstyles in ListPlot
  • Previous by thread: Re: Re: record intermediate steps
  • Next by thread: Problem with new Mathematica Installation on Linux