PDA

View Full Version : MATLAB toolbox: Vector Algebra for Multidimensional Arrays



Paolo De Leva
03-01-2006, 05:22 AM
Dear subscribers,

a new Vector Algebra Toolbox for the MATLAB programming language is freely
available on the following web server:

http://www.mathworks.com/matlabcentral/fileexchange/

FILE EXCHANGE CATHEGORY:
- MATLAB Central > File Exchange > Mathematics > Linear Algebra
TITLE:
- Vector Algebra for Multidimensional Arrays of Vectors

----------------------------------------------------------------
VECTOR ALGEBRA TOOLBOX
Vector Algebra for Multidimensional Arrays of Vectors
By Paolo de Leva
----------------------------------------------------------------

KEYWORDS
Outer product, Cross division, Norm, Unit vector, Projection Rejection

SUMMARY
Multiple outer products, cross divisions, norms, normalizations,
projections, rejections, with no loops.

DESCRIPTION
This toolbox was written to complete the incomplete set of vectorial
operations which can be performed with MATLAB 7 on block arrays of vectors
(arrays of any size containing vectors along one of their dimensions).

MATLAB 7 includes just five functions performing vectorial algebraic
operations on N-D arrays of vectors:

SUM (generic function usable to perform vector additions)
+ (generic operator usable to perform vector additions)
- (generic operator usable to perform vector subtractions)
DOT (specific function performing dot products)
CROSS (specific function performing cross products)

Except for SUM, they all perform multiple binary operations on pairs of
vectors, contained in two arrays. SUM can be used to add together all the
vectors contained in a single array or subarray.

All of the above functions accept as input arrays of vectors. What about
outer products and cross divisions?

Outer products between two vectors (1-by-N or N-by-1) can be easily
performed in MATLAB using the operators for matrix multiplication (*) and
transposition ('). See the MATLAB Help page titled "Vector Products and
Transpose".

Outer products between two arrays of vectors become extremely easy if you
use my function MULTIPROD (published separately, see below). They can be
performed with a single call to MULTIPROD. However, a function called OUTER
is included here, selecting for you the appropriate MULTIPROD syntax.

As for cross division, it was not invented until now (see
http://mathworld.wolfram.com/VectorDivision.html), but it was useful to me,
so I invented it. It was not indispensable, but it markedly simplified my
equations and my code, and those who appreciate short symbolic equations are
likely to love it. Without it, in some cases you are forced to write scalar
equations, containing negative terms and operations involving various
combinations of scalar components. I am not saying those scalar equations
are complex, but they are certainly less simple than a vectorial equation,
and a typo is more likely to occur when you write scalar equations than when
you write vectorial equations. See CROSSDIV help for more detailed
explanations.

A list of simple vectorial operations is given below. Only the first five
can be performed with functions integrated in MATLAB 7. The others are
implemented in this toolbox. All of them can be performed on N-D arrays of
vectors.

Operation: MATLAB implementation
----------------------------------------
Repeated addition: SUM
Binary addition: +
Subtraction: -
Dot product: DOT
Cross product: CROSS
Outer product: OUTER
Cross division: CROSSDIV
Euclidean norm: MAGN
Normalization: UNIT
Projection: PROJECTION
Rejection: REJECTION

See the respective help texts for further details.

Some of the functions included in this toolbox call MULTIPROD. This function
is a powerful generalization for N-D arrays of the MATLAB function MTIMES
and the matrix multiplication operator (*).

Obviously, MULTIPROD has a broad field of potential applications. For
instance, it can use large arrays of 3-by-3 or 4-by-4 transformation
matrices to perform, in a single step and with no loops, multiple
geometrical transformations (rotations, roto-translations) on arrays of
vectors. Thus, I believe it deserves a separate introduction and I published
it in a separate package: "Matlab Central > File Exchange > Multiplying two
N-D arrays of matrices, vectors or scalars".

The functions testUNIT and testXDIV, included in this toolbox, contain the
code I used to test the output of functions UNIT and CROSSDIV.

OTHER REQUIREMENTS
Some functions included in this toolbox call MULTIPROD. Since this is a
versatile function with a broad field of applications, I published it
separately: "Matlab Central > File Exchange > Multiplying two N-D arrays of
matrices, vectors or scalars".

---------------------------------------------------------------------------

With my kindest regards,

Paolo de Leva
Department of Human Movement and Sport Sciences
University Institute of Movement Science
Rome, ITALY