JUN
Posts:
67
Registered:
8/15/07


Re: Derivatives Output as TraditionalForm
Posted:
Jan 24, 2012 5:11 AM


On Jan 22, 11:57 pm, "mathgroup " <fizzym...@knology.net> wrote: > Thank You for Responding.... > > what you wrote was very Interesting....I'm quite mundane when it comes to > Programming but I have enough background to appreciate what you > said.....Your example certainly gives food for thought.... > > In fact, I went back to some old work I had done....lo and behold, I had a > reason to use the form f^(0,1)[x,y] for something and when I tried it with > the new found Derivatives code, it didn't work....I was able to fix it, etc. > but then I realized that perhaps the 'Raw Form' for the end user gives him > many more Options....it proved to be a much easier approach for what I was > trying to do....and actually made more sense.. > > So, again Wolfram has shown itself to be much Smarter then me...but that's > why I use Mathematica and like it so much... > > Interesting how an answer can change your attitude.....I will never again > feel upset by this as output form..... f^(0,1)[x,y] > > jerry B > > > > > > > > Original Message > From: A Retey > Sent: Sunday, January 22, 2012 6:19 AM > Subject: Re: Derivatives Output as TraditionalForm > > Hi, > > > I have 2 Questions.... > > > (1) Why isnt this code standard within Mathematica rather then > > having to be Coded by the user?....I used to do all this with Format > > which was a Royal Nightmare by comparison.........I have never seen > > what purpose this output f^(0,1)[x,y] served.......or does > > it??? > > I don't want to start a discussion about whether it was a good decision > to use that notation as the standard, but I think it probably is > interesting to mention what the rational behind it might be: > > A derivative can be seen as something that acts on a function rather > than an expression, and that includes functions in a programming > language sense. It then is natural to think about argument slots rather > than named variables, and the StandardForm of Derivative reflects that. > > When writing programs I find it very convenient to work with "function" > objects compared to expressions since it avoids all kinds of > complications with localizations and name spaces of those "artifical" > symbols which actually implicitly are just used as named arguments for > functions. If you wonder what I'm talking about, look at how this will > work without ever defining names for the arguments: > > f = #1^2*#2^3 & > > Derivative[0,1][f] > > It probably needs a programmers viewpoint more than a mathematicians to > appreciate the "beauty" and usefulness of such a notation, but I think > with some good will you might see it... > > hth, > > albert
As an example for why an abbreviated traditional form is important to have, consider the following example from vector analysis.
Needs["VectorAnalysis`"]; SetCoordinates[Cartesian[x, y, z]]; a = Through[Array[ \!\(\*SubscriptBox[\("\<A\>"\), \({"\<x\>", "\<y\>", \ "\<z\>"}[\([\)\(#\)\(]\)]\)]\) &, 3][x, y, z]]; b = Through[Array[ \!\(\*SubscriptBox[\("\<B\>"\), \({"\<x\>", "\<y\>", \ "\<z\>"}[\([\)\(#\)\(]\)]\)]\) &, 3][x, y, z]]; MatrixForm[a] MatrixForm[b]
Prove explicitly the following theorem which Mathematica tells us is true: Simplify[Curl[a\[Cross]b] == a Div[b]  b Div[a] + Map[b.Grad[#] &, a]  Map[a.Grad[#] &, b]]
It is nice that Mathematica says it's true, but we want to explain it to our readers by going step by step. Unfortunately, writing out the vectors is quite cumbersome. Even the lefthand side is already quite long (not to mention the right side):
Curl[a\[Cross]b]
All this becomes much easier with the simplified traditional form, in conjunction with some formatting specific to my problem:
Derivative /: MakeBoxes[Derivative[\[Alpha]__][f1_][vars__Symbol], TraditionalForm] := Module[{bb, dd, sp}, MakeBoxes[dd, _] ^= If[Length[{\[Alpha]}] == 1, "\[DifferentialD]", "\[PartialD]"]; MakeBoxes[sp, _] ^= "\[ThinSpace]"; bb /: MakeBoxes[bb[x__], _] := RowBox[Map[ToBoxes[#] &, {x}]]; FractionBox[ToBoxes[bb[dd^Plus[\[Alpha]], f1]], ToBoxes[Apply[bb, Riffle[Map[bb[dd, #] &, Select[({vars}^{\[Alpha]}), (# =!= 1 &)]], sp]]]]]
nice[expression_] := Module[{f, i, x}, HoldForm[expression // MatrixForm] /. Subscript[f_, i_][x__] > Subscript[f, i] // TraditionalForm]
The lefthand side of my desired equation is now:
Curl[a\[Cross]b] // nice
With this, you can now compare terms and recognize cancellations, etc. So not everything is best done in StandardForm, and there is clearly a place for a concise TraditionalForm.
Jens

