help-octave
[Top][All Lists]

## Re: Scalars and Matrices:

 From: Ted Harding Subject: Re: Scalars and Matrices: Date: Fri, 15 Oct 1999 13:20:39 +0100 (BST)

```On 15-Oct-99 Johan Kullstam wrote:
>>
>> Sorry, I don't think I can sympathise with this. As a general
>> convention for associativity,
>>
>>   A*B*C = (A*B)*C
>
> no. associativity says, by definition, that
>
>   (A*B)*C = A*(B*C)             (A)
>
> and one draws the conclusion that since (A) holds, we can write
>
>   A*B*C
>
> with no risk of confusion.  *order doesn't matter* if star (*)
> is associative.
>
> what you are promoting is implicit grouping.  this is *not*
> associativity.  it is, in fact, nearly the *opposite* of
> associativity, since order clearly *does* matter.  you even go out of
> your way to define a default order convention.
>
> one could also take the point of view that the octave interpreter
> should *require* parenthesis in cases of ambiguity.

Confusion of terminology here. I was using "associativity" in the
sense usual in programming languages, e.g. as in C there is
implicit "left associativity" (using the terminology of the manuals)
for (most) operators of the same precedence so that x*y/z = (x*y)/z,
and x*y*z is evaluated in the order (x*y)*z, for instance.
(You are of course right about the meaning of "associative"
in the mathematical (algebraic) sense.)

How this works depends on the expression parser. I think octave's is
close to the general C convention, allowing for complications due to
the fact that the operands in an expression may be scalars, vectors
and matrices. This means that A*B*C*... will be parsed to evaluate
as (...((A*B)*C)*...), with the possibility that this may create
non-conformal terms for a product, in which case it will fail.

The usual proof that "(A*B)*C = A*(B*C) provided either side is defined"
in matrix algebra presumes that (A*B) evaluates to a matrix with as many
columns as C has rows in the case that the LHS is given as defined, or
that (B*C) has as many rows as A has columns in the case that the RHS
is given as defined. It does not cover the case where (e.g.) in the
LHS (A*B) evaluates to a scalar (i.e. is of the form (x'*y) for
equal-length column vectors x,y); nor, similarly, where in the RHS
(B*C) is a scalar. In either of these cases, however, the other side may
be undefined. So the (algebraic) associativity (A*B)*C = A*(B*C) = A*B*C
for matrices is not necessarily true unless you restrict "is defined" to
exclude cases where A*B (or A*C) evaluates to a scalar.

Quite where that leaves the discussion about the distinction between
a scalar and a 1x1 matrix is not clear to me. I think the main issue
is: what would you want to mean by a 1x1 matrix, if this is not the
same as the meaning of a scalar?

In any case, I'd like to re-iterate the wise motto:

When in doubt use brackets

Ted.

--------------------------------------------------------------------
Date: 15-Oct-99                                       Time: 13:20:39
------------------------------ XFMail ------------------------------

---------------------------------------------------------------------
Octave is freely available under the terms of the GNU GPL.  To ensure