On Fri, 7 Dec 2012, Allin Cottrell wrote:
In fact, although we could go either way in terms of resolving the
inconsistency of treatment of X'Y and X'*Y, for X or Y 1x1 and not
strictly conformable with the other operand, it would be easier (I
think) to make the latter operation reduce to the former, hence
(absent any other changes) enforcing the stricter interpretation. If
that's what we want.
Premise: matrix-oriented languages have a short history, compared to the
tradition in mathematically-formal matrix notation. A few conventions have
been emerging in Gauss, Matlab and Ox, with hansl and mata as the
newcomers in the field. It's perfectly natural that some good ideas become
de facto standards (or almost such, such as the A'B syntax, matlab being
the exception), while at the same time there may be inconsistencies and
oddities. Moreover, hansl has not been "designed": many of its features
have been added incrementally as needed, so quirks may arise just as they
do in natural languages, such as English. Sometimes (like in the case of
left- and right- matrix divisions) changing to conform to what others do
is a good idea, sometimes it isn't. I'd say it depends. IMO, the objective
must be to conform to intuition (and established mathematical conventions)
as closely as possible without infringing consistency and predictability
of behaviour.
This said, I think both expressions should be legal: in the expressions
"a'b" and "a' * b" the 'prime' character actually
performs a different
role (as Allin already said): in the first case, it's shorthand for
"transpose and then multiply"; in the second case, it means "transpose and
see what happens next".
In the interest of common sense, I imagine that everybody agrees that
transposition on a 1x1 matrix should be a no-op which takes precedence on
anything else, so "a' * b" is exactly equivalent to "a*b". For
similar
reasons, "a'b" should be interpreted as "since this is shorthand for
"(a')*b, just do the same".
> What's trickier is plain "X*Y" when X is 1x1 and Y
is not a row vector
> (so written without any transposition), but that apparently is not the
> topic right now.
No, but rescinding the "1x1 matrix is treated as a scalar" policy
more generally would be seriously backward-incompatible.
Not only that, it would be wrong IMO. A scalar is not, strictly speaking,
a 1x1 matrix. In fact, the common mathematical convention on how to
interpret $k \cdot A$, $k \in \Re$ and $A \in \Re^{m \times n}$ (pardon my
TeX) is there exactly to avoid the boring and cumbersome details on how to
do "the right way" something quite trivial.
Allin Cottrell
P.S. Although I haven't shifted it myself, shouldn't this be on
gretl-devel?
It's now on both. Is this a bad idea?
-------------------------------------------------------
Riccardo (Jack) Lucchetti
Dipartimento di Scienze Economiche e Sociali (DiSES)
Università Politecnica delle Marche
(formerly known as Università di Ancona)
r.lucchetti(a)univpm.it
http://www2.econ.univpm.it/servizi/hpp/lucchetti
-------------------------------------------------------