MathGroup Archive 2002

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

Search the Archive

Re: Fw: Is Mathematica capable of doing this?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg37520] Re: Fw: [mg37469] Is Mathematica capable of doing this?
  • From: "Hermann Schmitt" <schmitther at netcologne.de>
  • Date: Sat, 2 Nov 2002 03:31:54 -0500 (EST)
  • Sender: owner-wri-mathgroup at wolfram.com

----- Original Message -----
From: "Liguo Song" <Liguo.Song at vanderbilt.edu>
To: mathgroup at smc.vnet.net
Subject: [mg37520] Re: Fw: [mg37469] Is Mathematica capable of doing this?


> Thanks for the wonderful advices. That's where I should head to.
>
> But, before further questions, I have to explain myself. I am a newbie
also. I
> have been using Mathematica for a couple of years, but never gave it a
serious
> thought until recently. That's when I began to think about this Tensor
stuff.
> So, I might not have all the solid background with Mathematica as other
veterans
> on this list. :)
>
> As that cleared out, so I can ask some newbie questions now.
>
> First off, how do I define the Tensor Head so that I can use
Plus[x_Tensor]? The
> only thing that I can come close to that is to define TensorQ and use
> Plus[x_?Tensor], which worked but not satisfiable.
>
I should say you have to do nothing. I show you an example below. But I
forgot to mention, that you must Unprotect the symbol "Plus", if you want to
change the definition of "Plus" (in the same way the other symbols).
The first part below is the input, the second part is the output. I added a
normal addition, in order that you can see, that this functions normally:

In[81]:= Plus[x__Tensor]:= Print["Hallo TensorPlus with Parameters: ",
List[x]];
Unprotect[Plus];
tns1 = Tensor[xyz1]
tns2 = Tensor[xyz2]
Plus[tns1, tns2]
3 + 4

Out[83]= {Flat, Listable, NumericFunction, OneIdentity, Orderless}
Out[84]= Tensor[xyz1]
Out[85]= Tensor[xyz2]
Hallo TensorPlus with Parameters: {Tensor[xyz1], Tensor[xyz2]}
Out[87]= 7
In[88]:=

> Second, how can I define the Tensor Head so that I can associate Input of
> Subsuperscriptbox[A,ij,kj] to a Tensor with ij as subscript and kj as
> superscript? Just like Input A^i corresponds to Power[A,i].
I cannot help you with the second question. I think, that you have to work
with indexed variables during the calculations:
A[,i, j, k] ??
>


Hermann Schmitt

> Again, thanks a lot for you input.
>
>
> Liguo
>
>
>
> Hermann Schmitt wrote:
> > Hello,
> > a further hint:
> > by:  lst = List[x__],  where x__ specifies the paramters e.g. of the
> > function Plus,
> > you get a list of the paramters and you can access them, easily.
> > Hermann Schmitt
> > ----- Original Message -----
> > From: "Hermann Schmitt" <schmitther at netcologne.de>
To: mathgroup at smc.vnet.net
> > To: "Liguo Song" <Liguo.Song at vanderbilt.edu>
> > Cc: <mathgroup at smc.vnet.net>
> > Sent: Friday, November 01, 2002 11:02 AM
> > Subject: [mg37520] Re: [mg37469] Is Mathematica capable of doing this?
> >
> >
> >
> >>Hello,
> >>you may use entries with Head "Tensor", e.g. Tensor[xyz], where xyz
> >>identifies an specific Tensor.
> >>Then you can define functions Plus, Times, ... in the form:
> >>Plus[x__Tensor] := .......
> >>x__ Tensor  means one ore more expressions with Head "Tensor".
> >>Hermann Schmitt
> >>
> >>----- Original Message -----
> >>From: "Liguo Song" <Liguo.Song at vanderbilt.edu>
To: mathgroup at smc.vnet.net
> >>To: <mathgroup at smc.vnet.net>
> >>Sent: Friday, November 01, 2002 7:43 AM
> >>Subject: [mg37520] [mg37493] Re: [mg37469] Is Mathematica capable of doing this?
> >>
> >>
> >>
> >>>Thanks for the helpful input. I have been playing with the idea for a
> >>
> >>while. And
> >>
> >>>here are my answers for the questions that you brought out.
> >>>
> >>>First, about the super/sub-scripts. I can easily use a list of
> >>
> > True/False
> >
> >>for
> >>
> >>>sub/super-script. I can combine this list with the List that represent
> >>
> > the
> >
> >>>tensor together to for a new object, Tensor.
> >>>
> >>>Second, output formatting can be done easily with
> >>
> >>SubsuperscriptBox[string, sub,
> >>
> >>>sup], where string represents the name of the Tensor, sub/sup are
> >>
> > strings
> >
> >>to
> >>
> >>>represent the scripts for the tensor. Spaces can be used to align the
> >>
> > sub
> >
> >>and
> >>
> >>>super-scripts.
> >>>
> >>>So, it boils down the my first question, how can I define a object,
> >>
> >>Tensor,
> >>
> >>>which will behave like Complex? So, I can redefine Times, Plus, Minus,
> >>
> > and
> >
> >>other
> >>
> >>>operators to handle Tensor.
> >>>
> >>>Also, how can I relate a symble to a Function as + relates Plus, *
> >>
> > relates
> >
> >>to Times?
> >>
> >>>Again, thanks for your thoughts on this topic.
> >>>
> >>>
> >>>Liguo
> >>>
> >>>
> >>>David Park wrote:
> >>>
> >>>>Liguo,
> >>>>
> >>>>I think it is a "dragon's egg" and certainly not the best way to learn
> >>>>Mathematica. Basically you would have to Unprotect and add new
> >>>
> >>definitions
> >>
> >>>>to Times and that would be only the start of it because how are you
> >>>
> >>going to
> >>
> >>>>distinguish between superscripts and powers? How are you going to
> >>>
> > handle
> >
> >>>>mixed up and down indices? How are you going to get nice output
> >>>
> >>formatting?
> >>
> >>>>There are many nice tensor packages out there. The moderator of this
> >>>
> >>group
> >>
> >>>>has the original powerful tensor package. As a way of learning some
> >>>
> >>tensor
> >>
> >>>>calculus I have been working with Renan Cabrera on a package called
> >>>>Tensorial. It can be obtained at my web site below. It is oriented
> >>>
> >>toward
> >>
> >>>>learning the basic mechanics and reproducing textbook problems. You
> >>>
> > can
> >
> >>have
> >>
> >>>>any symbols for tensor labels or indices. The index domain can be any
> >>>
> >>range
> >>
> >>>>of numbers or a set of symbols. For example, {0,1,2,3} or {t,x,y,z}
> >>>
> > for
> >
> >>>>relativity problems. You can have colored indices to distinguish
> >>>
> >>different
> >>
> >>>>coordinate frames.
> >>>>
> >>>>Here is how one would do your two problems in Tensorial.
> >>>>
> >>>>Needs["TensorCalculus`Tensorial`"]
> >>>>SetMetric[{x, g}, IdentityMatrix[3]]
> >>>>
> >>>>DefineTensorShortcuts[{T, g}, 2]
> >>>>
> >>>>guu[u, v]Tdd[v, k]
> >>>>% // MetricSimplify
> >>>>(formatted output)
> >>>>(formatted output, but Tud[u,k] in shortcut notation.)
> >>>>
> >>>>guu[u, v]Tdd[u, v]
> >>>>% // IndexEinstein
> >>>>(formatted output)
> >>>>(formatted output but Tdd[1,1] + Tdd[2,2] + Tdd[3,3] in shortcut
> >>>
> >>notation.)
> >>
> >>>>The DefineTensorShortcuts statement defines T and g as labels of
> >>>
> > second
> >
> >>>>order tensors. The various up and down index configurations can be
> >>>
> >>specified
> >>
> >>>>by appending "u"'s or "d"'s to the tensor label. So, for example,
> >>>
> >>gud[i,j]
> >>
> >>>>is the shortcut for g with the first index i up, and the second index
> >>>
> > j
> >
> >>>>down. Isn't that easier than maneuvering between superscripts and
> >>>>subscripts? MetricSimplify automatically carries our the raising or
> >>>
> >>lowering
> >>
> >>>>of indices with the metric tensor. IndexEinstein automatically carries
> >>>
> >>out
> >>
> >>>>summations on paired up and down indices.
> >>>>
> >>>>David Park
> >>>>djmp at earthlink.net
> >>>>http://home.earthlink.net/~djmp/
> >>>>
> >>>>
> >>>>From: Liguo Song [mailto:Liguo.Song at vanderbilt.edu]
To: mathgroup at smc.vnet.net
> >>>
> >>>To: mathgroup at smc.vnet.net
> >>>
> >>>>Dear MathGroup,
> >>>>
> >>>>I am in the process of learning to use Mathematica. Here are a couple
> >>>
> > of
> >
> >>>>questions that I want to ask the group.
> >>>>
> >>>>1) Can I define a new object, Tensor, which will act like Complex? So,
> >>>
> >>two
> >>
> >>>>Times[TensorA, TensorB] or TensorA*TensorB will invoke proper Times
> >>>
> >>function
> >>
> >>>>to
> >>>>handle it.
> >>>>
> >>>>2) If the answer to the above question is yes, then can I use
> >>>>super/sub-scripts
> >>>>to represent the indices for the Tensor, and carry out the calculation
> >>>
> >>based
> >>
> >>>>on
> >>>>these indices? Such as, g^uv*T_vk will get T^u_k, which essentially
> >>>
> >>raises
> >>
> >>>>the
> >>>>first index of T_vk. Another example would be g^uv*T_uv will get a
> >>>
> >>scalor T.
> >>
> >>>>I know there are couple of Tensor analysis packages, comercial and
> >>>
> > free,
> >
> >>out
> >>
> >>>>there. But, all the free packages I looked through won't be able to do
> >>>
> >>this.
> >>
> >>>>And, figuring out how to do stuff is the best to learn how to use
> >>>>Mathematica.
> >>>>
> >>>>Maybe, I am pursuing a dragon egg here. But, I'd still like to hear
> >>>
> >>about
> >>
> >>>>how
> >>>>well Mathematica can do to imitate this behavior.
> >>>>
> >>>>Thanks for any input on this.
> >>>>
> >>>>
> >>>>Liguo
> >>>>
> >>>
> >>>
> >>>
>
>



  • Prev by Date: Re: Fw: Is Mathematica capable of doing this?
  • Next by Date: Seemingly simple gridbox question
  • Previous by thread: Re: Fw: Is Mathematica capable of doing this?
  • Next by thread: Re: Re: Not quite a Swell FLOOP?