back to list

Useful normal form for representing affine subspaces

🔗Mike Battaglia <battaglia01@gmail.com>

5/19/2012 2:19:46 AM

Column-reversed hermite normal form, defined as
fliplr(hermiteForm(fliplr(matrix))), is extremely useful for
representing affine subspaces as translated vector subspaces. This
will come up a lot in the posts I'm going to write so I might as well
define it here.

For instance, say we want to figure out the 11-limit temperament which
equates 10/9, 11/10, and 12/11. We know that the set of all JI
intervals which are also equated with these three will be the affine
span of the above set. To represent this affine span, we simply
construct an augmented matrix with the above monzos as points:

[ 1 -2 1 0 0 ; 1]
[-1 0 -1 0 1 ; 1]
[ 2 1 0 0 -1 ; 1]

If we then simply put it in column-reversed hermite form, we get this:

[ 1 -2 1 0 0 ; 1]
[-1 -3 1 0 1 ; 0]
[ 1 -5 3 0 0 ; 0]

Note that the top row is a point and the bottom rows are vectors. The
top point is |1 -2 1 0 0), which represents 10/9. The vector below is
|-1 -3 1 0 1>, which represents 55/54. The vector below that is |1 -5
3 0 0>, which represents 250/243.

The bottom two rows tell us the vanishing monzos, and show that they
span the 55/54 & 250/243 linear subspace, which represents Sonic
temperament. The top row tells us that 10/9 is the point to which we
have to translate this subspace to intersect in order to represent the
tempered interval we originally wanted.

The intersection of the row space of this matrix and the embedded
representation of A^5 is the set of all vectors in R^6 with a final
coordinate of 1. Therefore, by looking at the above matrix, we can see
that all such points will consist of some linear combination of |-1 -3
1 0 1> and |1 -5 3 0 0> added to |1 -2 1 0 0). All such represented
intervals will be of the form 10/9 * (55/54)^n * (250/243)^m, which
our initial three equated intervals satisfy.

I'll be making use of this representation in my next few posts, so
this post will serve as a good mathematical reference for it.

-Mike

🔗Mike Battaglia <battaglia01@gmail.com>

5/19/2012 2:40:17 AM

Also, a useful variant of this normal form comes if we're working with
vals. For instance, say we want to represent the affine span of <12 19
28|, <7 11 16|, and <15 24 35|, for some reason, to see what useful
information it gives us. So we construct a matrix as follows:

[12 19 28 ; 1]
[ 7 11 16 ; 1]
[15 24 35 ; 1]

If we put it in column-reversed Hermite form, we get this:

[1 3 0 ; 1]
[1 3 1 ; 0]
[1 4 0 ; 0]

Unlike with monzos, this doesn't really make things terribly clear at
all. For instance, it's clear to see that this is the subspace spanned
by <1 3 1| and <1 4 0|, translated to intersect the point (1 3 0|, but
it's not clear what <1 3 1| and <1 4 0| are supposed to represent at
all.

What's very useful in this situation when working with vals is: after
putting the matrix in column-reversed hermite form, simply to take the
lowest n-1 rows - e.g. all but the top row, meaning all of the rows
which represent vectors and not points - and then put this submatrix
in non-column reversed Hermite normal form. If you do that, you get
this:

[1 3 0 ; 1]
[1 0 4 ; 0]
[0 1 -1 ; 0]

Note that the bottom two rows now represent a mapping matrix, and it
happens to be the mapping matrix for Father temperament, which is
somewhat mysterious. The top row represents the point val (1 3 0|,
which is also somewhat mysterious. Although I haven't delved into the
algorithm for this yet (that'll be in my next post), we can get some
useful information out of this by taking the null space:

[-4]
[ 1]
[ 1]
[ 1]

This represents the point |-4 1 1), or 15/16. As it will be shown to
turn out, the fact that this is the null space to the above matrix,
coupled with the fact that that latter coordinate is 1, means that the
reciprocal of 15/16, or 16/15, is mapped to 1 in all of the above
vals.

So the thing that |7 11 16>, |12 19 28|, and |15 24 35> all have in
common is that they map 16/15 to 1 step. And that's a useful thing to
know! In other words, much like the linear span of a set of vals
defines a temperament, the affine span of a set of vals defines a sort
of object in which the comma in question maps to a number of steps
other than 0.

This may now make sense if you go back and look at the normal form matrix again:

[1 3 0 ; 1]
[1 0 4 ; 0]
[0 1 -1 ; 0]

You can see that the top point is (1 3 0|, and the corresponding val
<1 3 0| sends 16/15 to 1. Also, you can see that the bottom two vals
are the mapping matrix for father temperament. Therefore, adding
anything supported by father temperament to the val <1 3 0| will lead
to a val that maps 16/15 to 1 step.

Of course, you can always just put the above matrix in Hermite form
without any of this column-reversing or what have you:

[1 0 0 ; 4]
[0 1 0 ; -1]
[0 0 1 ; -1]

Note that the right hand column now spells out |4 -1 -1> or 16/15.
This now makes obvious sense as an augmented matrix, and should
perhaps explain why the above works. But this doesn't give you any
sort of immediate picture of the sort of vals that actually map 16/15
to 1 step, nor does it have any sort of intuitive geometric
representation.

-Mike

On Sat, May 19, 2012 at 5:19 AM, Mike Battaglia <battaglia01@gmail.com> wrote:
> Column-reversed hermite normal form, defined as
> fliplr(hermiteForm(fliplr(matrix))), is extremely useful for
> representing affine subspaces as translated vector subspaces. This
> will come up a lot in the posts I'm going to write so I might as well
> define it here.

🔗genewardsmith <genewardsmith@sbcglobal.net>

5/19/2012 9:19:07 AM

--- In tuning-math@yahoogroups.com, Mike Battaglia <battaglia01@...> wrote:

> For instance, say we want to figure out the 11-limit temperament which
> equates 10/9, 11/10, and 12/11.

Isn't the obvious way to do that to take (10/9)/(11/10) = 100/99 and (11/10)/(12/11) = 121/120 as commas? This gives the rank-three temperament sonic, as in Sonic the Hedgehog.

🔗Graham Breed <gbreed@gmail.com>

5/19/2012 9:27:30 AM

"genewardsmith" <genewardsmith@sbcglobal.net> wrote:
>
>
> --- In tuning-math@yahoogroups.com, Mike Battaglia
> <battaglia01@...> wrote:
>
> > For instance, say we want to figure out the 11-limit
> > temperament which equates 10/9, 11/10, and 12/11.
>
> Isn't the obvious way to do that to take (10/9)/(11/10) =
> 100/99 and (11/10)/(12/11) = 121/120 as commas? This
> gives the rank-three temperament sonic, as in Sonic the
> Hedgehog.

I thought it was named after the signaling protein :-O

Anyway, yes, tempering out the commas is the obvious way to
do it. The problem's that getting from tempered out commas
to a mapping isn't a trivial operation. The way Mike did
it is pretty simple.

Graham

🔗genewardsmith <genewardsmith@sbcglobal.net>

5/19/2012 9:48:25 AM

--- In tuning-math@yahoogroups.com, Mike Battaglia <battaglia01@...> wrote:

> What's very useful in this situation when working with vals is: after
> putting the matrix in column-reversed hermite form, simply to take the
> lowest n-1 rows - e.g. all but the top row, meaning all of the rows
> which represent vectors and not points - and then put this submatrix
> in non-column reversed Hermite normal form. If you do that, you get
> this:
>
> [1 3 0 ; 1]
> [1 0 4 ; 0]
> [0 1 -1 ; 0]

Why not simply put the "1" in front? Now HNF gives

[1; 0 0 -1]
[0; 1 0 4]
[0; 0 1 -1]

Again, the bottom two rows are the mapping for father.

> Note that the bottom two rows now represent a mapping matrix, and it
> happens to be the mapping matrix for Father temperament, which is
> somewhat mysterious. The top row represents the point val (1 3 0|,
> which is also somewhat mysterious. Although I haven't delved into the
> algorithm for this yet (that'll be in my next post), we can get some
> useful information out of this by taking the null space:
>
> [-4]
> [ 1]
> [ 1]
> [ 1]
>
> This represents the point |-4 1 1), or 15/16.

Using the 1 in front version, you get [1 -4 1 1], and removing the 1 in front gives |-4 1 1>, or 15/16.

🔗Mike Battaglia <battaglia01@gmail.com>

5/19/2012 10:48:15 AM

On Sat, May 19, 2012 at 12:19 PM, genewardsmith
<genewardsmith@sbcglobal.net> wrote:
>
> --- In tuning-math@yahoogroups.com, Mike Battaglia <battaglia01@...>
> wrote:
>
> > For instance, say we want to figure out the 11-limit temperament which
> > equates 10/9, 11/10, and 12/11.
>
> Isn't the obvious way to do that to take (10/9)/(11/10) = 100/99 and
> (11/10)/(12/11) = 121/120 as commas? This gives the rank-three temperament
> sonic, as in Sonic the Hedgehog.

Yes, of course. It's not really a problem that needs solving. This is
just a nice neat way to do it algorithmically that shows you a lot of
useful information. Plus, if you, in your wanton ignorance decide that
you want to temper together a set of intervals which aren't affinely
independent, then this will immediately show you by having rows of 0's
at the bottom. This was just a dummy application to demonstrate the
information obtainable this way.

-Mike

🔗genewardsmith <genewardsmith@sbcglobal.net>

5/19/2012 11:15:51 AM

--- In tuning-math@yahoogroups.com, Mike Battaglia <battaglia01@...> wrote:
This was just a dummy application to demonstrate the
> information obtainable this way.

I'd still like an explanation of how to find generators. I tried what I thought you said on IRC without success.

🔗Mike Battaglia <battaglia01@gmail.com>

5/19/2012 11:16:18 AM

On Sat, May 19, 2012 at 12:48 PM, genewardsmith
<genewardsmith@sbcglobal.net> wrote:
>
> Why not simply put the "1" in front? Now HNF gives
>
> [1; 0 0 -1]
> [0; 1 0 4]
> [0; 0 1 -1]
>
> Again, the bottom two rows are the mapping for father.

This is a great idea and I like the way the representation comes out!
The one thing I don't like about it is, if you're doing some
complicated operation that requires using both monzos and vals, this
requires switching the augmented coordinate system in the middle of a
procedure. Probably the simplest solution is to simply define the
normal form for vals as follows:

If M is an augmented matrix in which the rows are vals with a
rightmost coordinate of 1, then, let M' be the matrix obtained by
removing the right column of M and instead prepending it onto the
left. Then M is considered to be in normal form if M' is in Hermite
form.

This still way gets all of the benefits of what you said above, and
even makes the top val point look a bit cleaner. It just sweeps the
coordinate change under the rug and hides it into the definition of
the normal form, so that people don't have to actually deal with it
(since augmented coordinates can be weird enough as is). Plus, it's
still simpler to define than the thing I said, which involved running
through Hermite form twice.

-Mike

🔗genewardsmith <genewardsmith@sbcglobal.net>

5/19/2012 11:54:08 AM

--- In tuning-math@yahoogroups.com, Mike Battaglia <battaglia01@...> wrote:

> This is a great idea and I like the way the representation comes out!
> The one thing I don't like about it is, if you're doing some
> complicated operation that requires using both monzos and vals, this
> requires switching the augmented coordinate system in the middle of a
> procedure.

There's no reason I can see that the augmented coordinates for vals should be the same as those for monzos. In fact, if <v|m> = C, then <1 v|m 1> = C+1, which is kind of nice.

🔗Mike Battaglia <battaglia01@gmail.com>

5/19/2012 12:09:41 PM

On Sat, May 19, 2012 at 2:54 PM, genewardsmith <genewardsmith@sbcglobal.net>
wrote:
>
> There's no reason I can see that the augmented coordinates for vals should
> be the same as those for monzos. In fact, if <v|m> = C, then <1 v|m 1> =
> C+1, which is kind of nice.

Ack, no! If you do it that way, everything gets misaligned!

<1;12 19 28|-4 4 -1;1> = 1*-4 + 12*4 + 19*-1 + 28*1 = 53

It doesn't even let you do vectors and vectors anymore!

<0;12 19 28|-4 4 -1;0> = 0*-4 + 12*4 + 19*-1 + 28*0 = 29

See? <v 1|m 1> = C+1, which is what you want.

However, if you don't mind changing the coordinate system for vals,
then what I was -actually- going to write, the entire post of which I
deleted when I read this, is that I'm starting to think it might be
useful to use -1 as the augmented coordinate for vals, and +1 as the
augmented coordinate for monzos. (Or +1 for vals and -1 for monzos,
but they should be opposite in sign.) This lets you get rid of all of
this inverted generator crap, because the affine span of <7 11 16|,
<12 19 28| and <15 24 35| is then this matrix

[12 19 28 ; -1]
[ 7 11 16 ; -1]
[15 24 35 ; -1]

The null space of this matrix is then

[ 4]
[-1]
[-1]
[ 1]

Which is actually 16/15, rather than this stupid upside down 15/16 we
keep getting. This will make it easy and simple to state lots of
theorems, one of which is that the meantone-tempered pythagorean comma
is dual to the set of all singly-positive meantone temperaments, and
the meantone-tempered inverted pythagorean comma is dual to the set of
all singly-positive meantone temperaments. And if I could ever get to
my method for finding the generators for a temperament, and intervals
in general, you'd see why that might be useful :)

-Mike