Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2012

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

Search the Archive

Re: Derivatives Output as TraditionalForm

  • To: mathgroup at smc.vnet.net
  • Subject: [mg124552] Re: Derivatives Output as TraditionalForm
  • From: JUN <noeckel at gmail.com>
  • Date: Tue, 24 Jan 2012 05:09:10 -0500 (EST)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • References: <jfb2rl$hls$1@smc.vnet.net> <201201221219.HAA25947@smc.vnet.net> <jfj3sl$7b9$1@smc.vnet.net>

On Jan 22, 11:57 pm, "mathgroup " <fizzym... at 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 left-hand 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 left-hand 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



  • Prev by Date: Re: Locators disappearing in LocatorPane (although working)
  • Next by Date: Re: Animating morphing Bezier curves; saving points
  • Previous by thread: Re: Derivatives Output as TraditionalForm
  • Next by thread: Re: Derivatives Output as TraditionalForm