The normal form I mentioned, which "fixed" my first try, turns out on reflection to be simply Hermite normal form. Hence, no special wedge products are required--one could, for instance, start with columns which are et maps. I propose therefore that we standardize the mapping to be the (column) Hermite normal form, and the generators to be the generators (in order) that this gives us.

--- In tuning-math@y..., "genewardsmith" <genewardsmith@j...> wrote:

> The normal form I mentioned, which "fixed" my first try, turns out

on reflection to be simply Hermite normal form. Hence, no special

wedge products are required--one could, for instance, start with

columns which are et maps. I propose therefore that we standardize the

mapping to be the (column) Hermite normal form, and the generators to

be the generators (in order) that this gives us.

>

I'm not familiar with this, and Mathworld was no help to me (again).

http://mathworld.wolfram.com/HermiteNormalForm.html

It doesn't give me any clue as to what the HNF matrix looks like

(except that it has a determinant of +-1) or how to compute it.

Would you be so kind as to give as examples, the HNF matrices and

consequent generators for Meantone, Diaschismic and Augmented, as

5-limit linear temperaments, Twin meantone and Half meantone fifth

as degenerate 5-limit whatevers, and Starling as the 7-limit planar

temperament where the 125:126 vanishes?

--- In tuning-math@y..., "dkeenanuqnetau" <d.keenan@u...> wrote:

> Would you be so kind as to give as examples, the HNF matrices and

> consequent generators for Meantone, Diaschismic and Augmented, as

> 5-limit linear temperaments, Twin meantone and Half meantone fifth

> as degenerate 5-limit whatevers, and Starling as the 7-limit planar

> temperament where the 125:126 vanishes?

Do you want this if half-fourth doesn't work? Hermite form seems to

allow twin meantone and schismic, and half-fifth meantome and schismic, but not the half-fourth versions.

--- In tuning-math@y..., "genewardsmith" <genewardsmith@j...> wrote:

> Do you want this if half-fourth doesn't work? Hermite form seems to

> allow twin meantone and schismic, and half-fifth meantome and

>schismic, but not the half-fourth versions.

that seems bizarre. is there an intuitive explanation of why this

should be the case?

--- In tuning-math@y..., "genewardsmith" <genewardsmith@j...> wrote:

> --- In tuning-math@y..., "dkeenanuqnetau" <d.keenan@u...> wrote:

>

> > Would you be so kind as to give as examples, the HNF matrices and

> > consequent generators for Meantone, Diaschismic and Augmented, as

> > 5-limit linear temperaments, Twin meantone and Half meantone fifth

> > as degenerate 5-limit whatevers, and Starling as the 7-limit

planar

> > temperament where the 125:126 vanishes?

>

> Do you want this if half-fourth doesn't work? Hermite form seems to

> allow twin meantone and schismic, and half-fifth meantome and

schismic, but not the half-fourth versions.

That's odd, but I'm still interested in seeing the others.

--- In tuning-math@y..., "paulerlich" <paul@s...> wrote:

> --- In tuning-math@y..., "genewardsmith" <genewardsmith@j...> wrote:

> > Do you want this if half-fourth doesn't work? Hermite form seems to

> > allow twin meantone and schismic, and half-fifth meantome and

> >schismic, but not the half-fourth versions.

> that seems bizarre. is there an intuitive explanation of why this

> should be the case?

It leads off with positive elements in each column.

I'd like to implement the Hermite normal form in Scheme.

Googling didn't produce code for it in any language, and

most definitions apply only to square matrices. Gene's

Maple on the wiki only calls a built-in function.

I'm not going to be putting the movie-watching habits of

30 million Americans into a matrix, so I don't care if

the method is the most efficient. But it does have to

work with rectangular matrices.

Any links or ideas?

-Carl

I've got code in Python, as ever.

If you have code for square matrices that's fine. Assuming it's a row space you do all operations consistently for full rows. When a column ends up with zeros in the significant positions, skip it.

Graham

------Original message------

From: Carl Lumma <carl@lumma.org>

To: <tuning-math@yahoogroups.com>

Date: Tuesday, January 10, 2012 1:14:13 PM GMT-0800

Subject: [tuning-math] Hermite normal form

I'd like to implement the Hermite normal form in Scheme.

Googling didn't produce code for it in any language, and

most definitions apply only to square matrices. Gene's

Maple on the wiki only calls a built-in function.

I'm not going to be putting the movie-watching habits of

30 million Americans into a matrix, so I don't care if

the method is the most efficient. But it does have to

work with rectangular matrices.

Any links or ideas?

-Carl

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

Yahoo! Groups Links

At 01:37 PM 1/10/2012, you wrote:

>Content-Transfer-Encoding: 7bit

>

>I've got code in Python, as ever.

Can you point me to the relevant function? I assumed you

were using a pari built-in.

>If you have code for square matrices that's fine. Assuming it's a row

>space you do all operations consistently for full rows. When a column

>ends up with zeros in the significant positions, skip it.

Sorry, lost me here, can you give an example? Or I guess I

could just trust the function you point me to.

-Carl

regutils.lattice_reduction

This screen's too small for examples

Graham

------Original message------

From: Carl Lumma <carl@lumma.org>

To: <tuning-math@yahoogroups.com>

Date: Tuesday, January 10, 2012 1:46:18 PM GMT-0800

Subject: Re: [tuning-math] Hermite normal form

At 01:37 PM 1/10/2012, you wrote:

>Content-Transfer-Encoding: 7bit

>

>I've got code in Python, as ever.

Can you point me to the relevant function? I assumed you

were using a pari built-in.

>If you have code for square matrices that's fine. Assuming it's a row

>space you do all operations consistently for full rows. When a column

>ends up with zeros in the significant positions, skip it.

Sorry, lost me here, can you give an example? Or I guess I

could just trust the function you point me to.

-Carl

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

Yahoo! Groups Links

On Tue, Jan 10, 2012 at 4:46 PM, Carl Lumma <carl@lumma.org> wrote:

>

> >If you have code for square matrices that's fine. Assuming it's a row

> >space you do all operations consistently for full rows. When a column

> >ends up with zeros in the significant positions, skip it.

>

> Sorry, lost me here, can you give an example? Or I guess I

> could just trust the function you point me to.

>

> -Carl

I think Graham meant "column" instead of "row" above...?

I think he's saying that a temperament is defined as the row space of

a mapping matrix: the space of all vectors that you get by adding

linear combinations of the rows. So if your matrix is |<7 11 16| <12

19 28|>, then 19p and 31p are going to be in the row space of that

matrix, because you can get to them by adding combinations of rows

together. And <1 1 0| and <0 1 4| will also be in the row space too.

So will <0.5 0.5 0|.

For rank 2, this is exactly the same thing as a plane that goes

through the origin, which is what Grassmannians are supposed to

represent. So if you just add a bunch of zero vals at the bottom of

the matrix to make it square, you end up getting the same row space

and hence the same temperament.

tl;dr, throw some zero vals on the bottom and make it square and then

take them off at the end.

-Mike

On Tue, Jan 10, 2012 at 4:46 PM, Carl Lumma <carl@lumma.org> wrote:

>

> >If you have code for square matrices that's fine. Assuming it's a row

> >space you do all operations consistently for full rows. When a column

> >ends up with zeros in the significant positions, skip it.

>

> Sorry, lost me here, can you give an example? Or I guess I

> could just trust the function you point me to.

>

> -Carl

Also, despite that this causes problems with contorsion, I really

don't like think of it as row spaces, but as row lattices. Or, more

intuitively, periodicity blocks in val space. <7 11 16| and <12 19 28|

are like "unison vectors" in this dual space or something, and all of

the stuff you know about Fokker blocks applies. If <7 11 16| and <12

19 28| are "unison vectors," then <1 1 0| and <0 1 4| are also "unison

vectors" in the same lattice. <0 0 0| is hence also a unison vector.

So if you have a Hermite reduction subroutine that requires you to

have a square matrix, just throw <0 0 0|, which will have the same

effect as adding 1/1 to a list of unison vectors.

That's part of the reason why I was talking about formalizing this &

operation a while ago, or the # operation or whatever, and doing it in

a way so that you can talk about 81/80 & 25/24 just like you can talk

about 7p & 12p. It's the same basic operation for both, and it would

be nice to axiomatize it so people like Ryan Avella can work out some

basic stuff using some basic algebraic rules on the back of a cocktail

napkin, should inspiration so strike.

-Mike

Oh, sure, you could do that. But it isn't what I meant.

Graham

------Original message------

From: Mike Battaglia <battaglia01@gmail.com>

To: <tuning-math@yahoogroups.com>

Date: Tuesday, January 10, 2012 4:53:37 PM GMT-0500

Subject: Re: [tuning-math] Hermite normal form

On Tue, Jan 10, 2012 at 4:46 PM, Carl Lumma <carl@lumma.org> wrote:

>

> >If you have code for square matrices that's fine. Assuming it's a row

> >space you do all operations consistently for full rows. When a column

> >ends up with zeros in the significant positions, skip it.

>

> Sorry, lost me here, can you give an example? Or I guess I

> could just trust the function you point me to.

>

> -Carl

I think Graham meant "column" instead of "row" above...?

I think he's saying that a temperament is defined as the row space of

a mapping matrix: the space of all vectors that you get by adding

linear combinations of the rows. So if your matrix is |<7 11 16| <12

19 28|>, then 19p and 31p are going to be in the row space of that

matrix, because you can get to them by adding combinations of rows

together. And <1 1 0| and <0 1 4| will also be in the row space too.

So will <0.5 0.5 0|.

For rank 2, this is exactly the same thing as a plane that goes

through the origin, which is what Grassmannians are supposed to

represent. So if you just add a bunch of zero vals at the bottom of

the matrix to make it square, you end up getting the same row space

and hence the same temperament.

tl;dr, throw some zero vals on the bottom and make it square and then

take them off at the end.

-Mike

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

Yahoo! Groups Links

I don't find the string "hermite" in regutils.py.

I see a lattice_reduction function, but it says it's

for reduced echelon form. Am I looking in the wrong

place? I'm hoping for something applicable to normal

interval lists.

-Carl

At 01:53 PM 1/10/2012, you wrote:

>Content-Transfer-Encoding: 7bit

>

>regutils.lattice_reduction

>This screen's too small for examples

>

>

> Graham

>

>------Original message------

>From: Carl Lumma <carl@lumma.org>

>To: <tuning-math@yahoogroups.com>

>Date: Tuesday, January 10, 2012 1:46:18 PM GMT-0800

>Subject: Re: [tuning-math] Hermite normal form

>

>At 01:37 PM 1/10/2012, you wrote:

>>Content-Transfer-Encoding: 7bit

>>

>>I've got code in Python, as ever.

>

>Can you point me to the relevant function? I assumed you

>were using a pari built-in.

>

>>If you have code for square matrices that's fine. Assuming it's a row

>>space you do all operations consistently for full rows. When a column

>>ends up with zeros in the significant positions, skip it.

>

>Sorry, lost me here, can you give an example? Or I guess I

>could just trust the function you point me to.

>

>-Carl

>

>

>

>------------------------------------

>

>Yahoo! Groups Links

>

That's the one. I didn't understand the definitions of Hermite normal form but it turns out I implemented it anyway.

Graham

------Original message------

From: Carl Lumma <carl@lumma.org>

To: <tuning-math@yahoogroups.com>

Date: Tuesday, January 10, 2012 2:39:31 PM GMT-0800

Subject: Re: Re: [tuning-math] Hermite normal form

I don't find the string "hermite" in regutils.py.

I see a lattice_reduction function, but it says it's

for reduced echelon form. Am I looking in the wrong

place? I'm hoping for something applicable to normal

interval lists.

-Carl

At 01:53 PM 1/10/2012, you wrote:

>Content-Transfer-Encoding: 7bit

>

>regutils.lattice_reduction

>This screen's too small for examples

>

>

> Graham

>

>------Original message------

>From: Carl Lumma <carl@lumma.org>

>To: <tuning-math@yahoogroups.com>

>Date: Tuesday, January 10, 2012 1:46:18 PM GMT-0800

>Subject: Re: [tuning-math] Hermite normal form

>

>At 01:37 PM 1/10/2012, you wrote:

>>Content-Transfer-Encoding: 7bit

>>

>>I've got code in Python, as ever.

>

>Can you point me to the relevant function? I assumed you

>were using a pari built-in.

>

>>If you have code for square matrices that's fine. Assuming it's a row

>>space you do all operations consistently for full rows. When a column

>>ends up with zeros in the significant positions, skip it.

>

>Sorry, lost me here, can you give an example? Or I guess I

>could just trust the function you point me to.

>

>-Carl

>

>

>

>------------------------------------

>

>Yahoo! Groups Links

>

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

Yahoo! Groups Links