Description
openedon Nov 10, 2013
from @alanedelman:
We really should think carefully about how the transpose of a vector should dispatch the various A_*op*_B*
methods. It must be possible to avoid new types and ugly mathematics. For example, vector'vector yielding a vector (#2472, #2936), vector' yielding a matrix, and vector'' yielding a matrix (#2686) are all bad mathematics.
What works for me mathematically (which avoids introducing a new type) is that for a 1-dimensional Vector
v
:
v'
is a no-op (i.e. just returnsv
),v'v
orv'*v
is a scalar,v*v'
is a matrix, andv'A
orv'*A
(whereA
is anAbstractMatrix
) is a vector
A general N-dimensional transpose reverses the order of indices. A vector, having one index, should be invariant under transposition.
In practice v'
is rarely used in isolation, and is usually encountered in matrix-vector products and matrix-matrix products. A common example would be to construct bilinear forms v'A*w
and quadratic forms v'A*v
which are used in conjugate gradients, Rayleigh quotients, etc.
The only reason to introduce a new Transpose{Vector}
type would be to represent the difference between contravariant and covariant vectors, and I don't find this compelling enough.