diff options
author | dos-reis <gdr@axiomatics.org> | 2007-08-14 05:14:52 +0000 |
---|---|---|
committer | dos-reis <gdr@axiomatics.org> | 2007-08-14 05:14:52 +0000 |
commit | ab8cc85adde879fb963c94d15675783f2cf4b183 (patch) | |
tree | c202482327f474583b750b2c45dedfc4e4312b1d /src/hyper/pages/CARTEN.ht | |
download | open-axiom-ab8cc85adde879fb963c94d15675783f2cf4b183.tar.gz |
Initial population.
Diffstat (limited to 'src/hyper/pages/CARTEN.ht')
-rw-r--r-- | src/hyper/pages/CARTEN.ht | 418 |
1 files changed, 418 insertions, 0 deletions
diff --git a/src/hyper/pages/CARTEN.ht b/src/hyper/pages/CARTEN.ht new file mode 100644 index 00000000..702621f3 --- /dev/null +++ b/src/hyper/pages/CARTEN.ht @@ -0,0 +1,418 @@ +% Copyright The Numerical Algorithms Group Limited 1992-94. All rights reserved. +% !! DO NOT MODIFY THIS FILE BY HAND !! Created by ht.awk. +\newcommand{\CartesianTensorXmpTitle}{CartesianTensor} +\newcommand{\CartesianTensorXmpNumber}{9.7} +% +% ===================================================================== +\begin{page}{CartesianTensorXmpPage}{9.7 CartesianTensor} +% ===================================================================== +\beginscroll + +\spadtype{CartesianTensor(i0,dim,R)} +provides Cartesian tensors with +components belonging to a commutative ring \spad{R}. +Tensors can be described as a generalization of vectors and matrices. +%-% \HDindex{tensor!Cartesian}{CartesianTensorXmpPage}{9.7}{CartesianTensor} +This gives a concise {\it tensor algebra} for multilinear objects +supported by the \spadtype{CartesianTensor} domain. +You can form the inner or outer product of any two tensors and you can add +or subtract tensors with the same number of components. +Additionally, various forms of traces and transpositions are useful. + +The \spadtype{CartesianTensor} constructor allows you to specify the +minimum index for subscripting. +In what follows we discuss in detail how to manipulate tensors. + +\xtc{ +Here we construct the domain of Cartesian tensors of dimension 2 over the +integers, with indices starting at 1. +}{ +\spadpaste{CT := CARTEN(i0 := 1, 2, Integer) \bound{CT i0}} +} + +\subsubsection{Forming tensors} + +\labelSpace{2pc} +\xtc{ +Scalars can be converted to tensors of rank zero. +}{ +\spadpaste{t0: CT := 8 \free{CT}\bound{t0}} +} +\xtc{ +}{ +\spadpaste{rank t0 \free{t0}} +} +\xtc{ +Vectors (mathematical direct products, rather than one dimensional array +structures) can be converted to tensors of rank one. +}{ +\spadpaste{v: DirectProduct(2, Integer) := directProduct [3,4] \bound{v}} +} +\xtc{ +}{ +\spadpaste{Tv: CT := v \free{v CT}\bound{Tv}} +} +\xtc{ +Matrices can be converted to tensors of rank two. +}{ +\spadpaste{m: SquareMatrix(2, Integer) := matrix [[1,2],[4,5]] \bound{m}} +} +\xtc{ +}{ +\spadpaste{Tm: CT := m \bound{Tm}\free{CT m}} +} +\xtc{ +}{ +\spadpaste{n: SquareMatrix(2, Integer) := matrix [[2,3],[0,1]] \bound{n}} +} +\xtc{ +}{ +\spadpaste{Tn: CT := n \bound{Tn}\free{CT n}} +} +\xtc{ +In general, a tensor of rank \spad{k} can be formed by making a +list of rank \spad{k-1} tensors or, alternatively, a \spad{k}-deep nested +list of lists. +}{ +\spadpaste{t1: CT := [2, 3] \free{CT}\bound{t1}} +} +\xtc{ +}{ +\spadpaste{rank t1 \free{t1}} +} +\xtc{ +}{ +\spadpaste{t2: CT := [t1, t1] \free{CT t1}\bound{t2}} +} +\xtc{ +}{ +\spadpaste{t3: CT := [t2, t2] \free{CT t2}\bound{t3}} +} +\xtc{ +}{ +\spadpaste{tt: CT := [t3, t3]; tt := [tt, tt] \free{CT t3}\bound{tt}} +} +\xtc{ +}{ +\spadpaste{rank tt \free{tt}} +} + +\subsubsection{Multiplication} +%\head{subsection}{Multiplication}{ugxCartenMult} + +Given two tensors of rank \spad{k1} and \spad{k2}, the outer +%-% \HDindex{tensor!outer product}{CartesianTensorXmpPage}{9.7}{CartesianTensor} +\spadfunFrom{product}{CartesianTensor} forms a new tensor of rank +\spad{k1+k2}. +\xtc{ +Here +\texht{$T_{mn}(i,j,k,l) = T_m(i,j) \ T_n(k,l).$}{% +\spad{Tmn(i,j,k,l) = Tm(i,j)*Tn(k,l).}} +}{ +\spadpaste{Tmn := product(Tm, Tn)\free{Tm Tn}\bound{Tmn}} +} + +The inner product (\spadfunFrom{contract}{CartesianTensor}) forms a tensor +%-% \HDindex{tensor!inner product}{CartesianTensorXmpPage}{9.7}{CartesianTensor} +of rank \spad{k1+k2-2}. +This product generalizes the vector dot product and matrix-vector product +by summing component products along two indices. +\xtc{ +Here we sum along the second index of \texht{$T_m$}{\spad{Tm}} and the +first index of \texht{$T_v$}{\spad{Tv}}. +Here +\texht{$T_{mv} = \sum_{j=1}^{\hbox{\tiny\rm dim}} T_m(i,j) \ T_v(j)$}{% +\spad{Tmv(i) = sum Tm(i,j) * Tv(j) for j in 1..dim.}} +}{ +\spadpaste{Tmv := contract(Tm,2,Tv,1)\free{Tm Tv}\bound{Tmv}} +} + +The multiplication operator \spadopFrom{*}{CartesianTensor} is scalar +multiplication or an inner product depending on the ranks of the +arguments. +\xtc{ +If either argument is rank zero it is treated as scalar multiplication. +Otherwise, \spad{a*b} is the inner product summing the last index of +\spad{a} with the first index of \spad{b}. +}{ +\spadpaste{Tm*Tv \free{Tm Tv}} +} +\xtc{ +This definition is consistent with the inner product on matrices +and vectors. +}{ +\spadpaste{Tmv = m * v \free{Tmv m v}} +} + +\subsubsection{Selecting Components} +%\head{subsection}{Selecting Components}{ugxCartenSelect} + +\labelSpace{2pc} +\xtc{ +For tensors of low rank (that is, four or less), components can be selected +by applying the tensor to its indices. +}{ +\spadpaste{t0() \free{t0}} +} +\xtc{ +}{ +\spadpaste{t1(1+1) \free{t1}} +} +\xtc{ +}{ +\spadpaste{t2(2,1) \free{t2}} +} +\xtc{ +}{ +\spadpaste{t3(2,1,2) \free{t3}} +} +\xtc{ +}{ +\spadpaste{Tmn(2,1,2,1) \free{Tmn}} +} +\xtc{ +A general indexing mechanism is provided for a list of indices. +}{ +\spadpaste{t0[] \free{t0}} +} +\xtc{ +}{ +\spadpaste{t1[2] \free{t1}} +} +\xtc{ +}{ +\spadpaste{t2[2,1] \free{t2}} +} +\xtc{ +The general mechanism works for tensors of arbitrary rank, but is +somewhat less efficient since the intermediate index list must be created. +}{ +\spadpaste{t3[2,1,2] \free{t3}} +} +\xtc{ +}{ +\spadpaste{Tmn[2,1,2,1] \free{Tmn}} +} + +\subsubsection{Contraction} +%\head{subsection}{Contraction}{ugxCartenContract} + +A ``contraction'' between two tensors is an inner product, as we have +%-% \HDindex{tensor!contraction}{CartesianTensorXmpPage}{9.7}{CartesianTensor} +seen above. +You can also contract a pair of indices of a single tensor. +This corresponds to a ``trace'' in linear algebra. +The expression \spad{contract(t,k1,k2)} forms a new tensor by summing the +diagonal given by indices in position \spad{k1} and \spad{k2}. +\xtc{ +This is the tensor given by +\texht{$xT_{mn} = \sum_{k=1}^{\hbox{\tiny\rm dim}} T_{mn}(k,k,i,j).$}{% +\spad{cTmn(i,j) = sum Tmn(k,k,i,j) for k in 1..dim.}} +}{ +\spadpaste{cTmn := contract(Tmn,1,2) \free{Tmn}\bound{cTmn}} +} +\xtc{ +Since \spad{Tmn} is the outer product of matrix \spad{m} and matrix \spad{n}, +the above is equivalent to this. +}{ +\spadpaste{trace(m) * n \free{m n}} +} +\xtc{ +In this and the next few examples, +we show all possible contractions of \spad{Tmn} and their matrix +algebra equivalents. +}{ +\spadpaste{contract(Tmn,1,2) = trace(m) * n \free{Tmn m n}} +} +\xtc{ +}{ +\spadpaste{contract(Tmn,1,3) = transpose(m) * n \free{Tmn m n}} +} +\xtc{ +}{ +\spadpaste{contract(Tmn,1,4) = transpose(m) * transpose(n) \free{Tmn m n}} +} +\xtc{ +}{ +\spadpaste{contract(Tmn,2,3) = m * n \free{Tmn m n}} +} +\xtc{ +}{ +\spadpaste{contract(Tmn,2,4) = m * transpose(n) \free{Tmn m n}} +} +\xtc{ +}{ +\spadpaste{contract(Tmn,3,4) = trace(n) * m \free{Tmn m n}} +} + +\subsubsection{Transpositions} +%\head{subsection}{Transpositions}{ugxCartenTranspos} + +You can exchange any desired pair of indices using the +\spadfunFrom{transpose}{CartesianTensor} operation. + +\labelSpace{1pc} +\xtc{ +Here the indices in positions one and three are exchanged, that is, +\texht{$tT_{mn}(i,j,k,l) = T_{mn}(k,j,i,l).$}{% +\spad{tTmn(i,j,k,l) = Tmn(k,j,i,l).}} +}{ +\spadpaste{tTmn := transpose(Tmn,1,3) \free{tTmn}} +} +\xtc{ +If no indices are specified, the first and last index are exchanged. +}{ +\spadpaste{transpose Tmn \free{Tmn}} +} +\xtc{ +This is consistent with the matrix transpose. +}{ +\spadpaste{transpose Tm = transpose m \free{Tm m}} +} + +If a more complicated reordering of the indices is required, then the +\spadfunFrom{reindex}{CartesianTensor} operation can be used. +This operation allows the indices to be arbitrarily permuted. +\xtc{ +This defines +\texht{$rT_{mn}(i,j,k,l) = \allowbreak T_{mn}(i,l,j,k).$}{% +\spad{rTmn(i,j,k,l) = Tmn(i,l,j,k).}} +}{ +\spadpaste{rTmn := reindex(Tmn, [1,4,2,3]) \free{Tmn}\bound{rTmn}} +} + +\subsubsection{Arithmetic} +%\head{subsection}{Arithmetic}{ugxCartenArith} + +\labelSpace{2pc} +\xtc{ +Tensors of equal rank can be added or subtracted so arithmetic +expressions can be used to produce new tensors. +}{ +\spadpaste{tt := transpose(Tm)*Tn - Tn*transpose(Tm) \free{Tm Tn}\bound{tt2}} +} +\xtc{ +}{ +\spadpaste{Tv*(tt+Tn) \free{tt2 Tv Tn}} +} +\xtc{ +}{ +\spadpaste{reindex(product(Tn,Tn),[4,3,2,1])+3*Tn*product(Tm,Tm) \free{Tm Tn}} +} + +\subsubsection{Specific Tensors} +%\head{subsection}{Specific Tensors}{ugxCartenSpecific} + +Two specific tensors have properties which depend only on the +dimension. + +\labelSpace{1pc} +\xtc{ +The Kronecker delta satisfies +%-% \HDindex{Kronecker delta}{CartesianTensorXmpPage}{9.7}{CartesianTensor} +\texht{}{% +\begin{verbatim} + +- + | 1 if i = j +delta(i,j) = | + | 0 if i ^= j + +- +\end{verbatim} +}% +}{ +\spadpaste{delta: CT := kroneckerDelta() \free{CT}\bound{delta}} +} +\xtc{ +This can be used to reindex via contraction. +}{ +\spadpaste{contract(Tmn, 2, delta, 1) = reindex(Tmn, [1,3,4,2]) \free{Tmn delta}} +} + +\xtc{ +The Levi Civita symbol determines the sign of a permutation of indices. +}{ +\spadpaste{epsilon:CT := leviCivitaSymbol() \free{CT}\bound{epsilon}} +} +Here we have: +\texht{}{% +\begin{verbatim} +epsilon(i1,...,idim) + = +1 if i1,...,idim is an even permutation of i0,...,i0+dim-1 + = -1 if i1,...,idim is an odd permutation of i0,...,i0+dim-1 + = 0 if i1,...,idim is not a permutation of i0,...,i0+dim-1 +\end{verbatim} +} +\xtc{ +This property can be used to form determinants. +}{ +\spadpaste{contract(epsilon*Tm*epsilon, 1,2) = 2 * determinant m \free{epsilon Tm m}} +} + +\subsubsection{Properties of the CartesianTensor domain} +%\head{subsection}{Properties of the CartesianTensor domain}{ugxCartenProp} + +\spadtype{GradedModule(R,E)} denotes ``\spad{E}-graded \spad{R}-module'', +that is, a collection of \spad{R}-modules indexed by an abelian monoid +\spad{E.} +%-% \HDexptypeindex{GradedModule}{CartesianTensorXmpPage}{9.7}{CartesianTensor} +An element \spad{g} of \spad{G[s]} for some specific \spad{s} +in \spad{E} is said to be an element of \spad{G} with +\spadfunFrom{degree}{GradedModule} \spad{s}. +Sums are defined in each module \spad{G[s]} so two elements of +\spad{G} can be added if they have the same degree. +Morphisms can be defined and composed by degree to give the +mathematical category of graded modules. + +\spadtype{GradedAlgebra(R,E)} denotes ``\spad{E}-graded \spad{R}-algebra.'' +%-% \HDexptypeindex{GradedAlgebra}{CartesianTensorXmpPage}{9.7}{CartesianTensor} +A graded algebra is a graded module together with a degree preserving +\spad{R}-bilinear map, called the \spadfunFrom{product}{GradedAlgebra}. + +\begin{verbatim} +degree(product(a,b))= degree(a) + degree(b) + +product(r*a,b) = product(a,r*b) = r*product(a,b) +product(a1+a2,b) = product(a1,b) + product(a2,b) +product(a,b1+b2) = product(a,b1) + product(a,b2) +product(a,product(b,c)) = product(product(a,b),c) +\end{verbatim} + +The domain \spadtype{CartesianTensor(i0, dim, R)} belongs +to the category \spadtype{GradedAlgebra(R, NonNegativeInteger)}. +The non-negative integer \spadfunFrom{degree}{GradedAlgebra} +is the tensor rank +and the graded algebra \spadfunFrom{product}{GradedAlgebra} +is the tensor outer product. +The graded module addition captures the notion that +only tensors of equal rank can be added. + +If \spad{V} is a vector space of dimension \spad{dim} over \spad{R}, +then the tensor module \spad{T[k](V)} is defined as +\begin{verbatim} +T[0](V) = R +T[k](V) = T[k-1](V) * V +\end{verbatim} +where \spadop{*} denotes the \spad{R}-module tensor +\spadfunFrom{product}{GradedAlgebra}. +\spadtype{CartesianTensor(i0,dim,R)} is the graded algebra in which +the degree \spad{k} module is \spad{T[k](V)}. + +\subsubsection{Tensor Calculus} +%\head{subsection}{Tensor Calculus}{ugxCartenCalculus} + +It should be noted here that often tensors are used in the context of +tensor-valued manifold maps. +This leads to the notion of covariant and contravariant bases with tensor +component functions transforming in specific ways under a change of +coordinates on the manifold. +This is no more directly supported by the \spadtype{CartesianTensor} +domain than it is by the \spadtype{Vector} domain. +However, it is possible to have the components implicitly represent +component maps by choosing a polynomial or expression type for the +components. +In this case, it is up to the user to satisfy any constraints which arise +on the basis of this interpretation. +\endscroll +\autobuttons +\end{page} +% |