back to list

Representing a p-limit comma in terms of the two simplest intervals that it equates

🔗Mike Battaglia <battaglia01@gmail.com>

12/27/2010 2:02:33 PM

I have found it extremely useful, when learning about a new
temperament, to figure out what the most common intervals are that it
equates. For example:

Tempering 81/80 - meantone - equates 9/8 and 10/9
Tempering 64/63 - superpyth - equates 9/8 and 8/7
Tempering 50/49 - pajara - equates 7/5 and 10/7
Tempering 250/243 - porcupine - equates 10/9 and 27/25 (also useful to
think of it as equating 81/80 and 25/24)
Tempering 16/15 - father - equates 4/3 and 5/4
Tempering 25/24 - dicot - equates 6/5 and 5/4, equates 10/9 and 16/15
Tempering 128/125 - augmented - equates 16/15 and 25/24
Tempering 3125/3072 - magic - equates 128/125 and 25/24

There might be something simpler for magic but I'm not sure what it is.

Either way, is there some kind of algorithm that can determine, for
some comma being tempered out, the two simplest intervals that it
equates? For 81/80, for example, the two simplest intervals would be
9/8 and 10/9 rather than 81/80 and 1/1. Perhaps something that
minimizes (n1*d1) + (n2*d2) would be best.

-Mike

🔗Mike Battaglia <battaglia01@gmail.com>

12/28/2010 2:42:38 AM

I wrote:
> Either way, is there some kind of algorithm that can determine, for
> some comma being tempered out, the two simplest intervals that it
> equates? For 81/80, for example, the two simplest intervals would be
> 9/8 and 10/9 rather than 81/80 and 1/1. Perhaps something that
> minimizes (n1*d1) + (n2*d2) would be best.

I did some more thinking about this, and rather than minimizing
(n1*d1) + (n2*d2), here's another algorithm that might be simpler:

So if we have some comma p/q, and we're trying to find the two
simplest intervals a/b and c/d that differ by it, then the intervals
involved will satisfy the following relationship:

ad/bc = p/q

Now, if we're trying to make a/b and c/d as simple as possible, then
perhaps the best way to go is to come up with the simplest possible
numbers such that ad = p and bc = q. If we take this approach then
we're trying to minimize a + d and b + c.

A quick way to compute the ideal values for a and d is to set them
both equal to sqrt(p). Find the nearest factor to sqrt(p) and set it
equal to a, and find that factor's complement and set it equal to d.
Do the same thing for b and c with q.

You will end up with two options depending on how you distribute ad
and bc. For porcupine, for example, you end up with either 10/9 and
27/25, or 25/9 and 27/10. If you minimize (a+b)*(c+d), you get the
first, if you minimize (a*b)+(c*d), you get the second. You only get
one option if a=b or c=d.

I'm beat but tomorrow I'll work this out for some common temperaments.

-Mike

🔗Carl Lumma <carl@lumma.org>

12/28/2010 9:27:08 AM

>I'm beat but tomorrow I'll work this out for some common temperaments.
>-Mike

Some of the temperaments you initially listed were codimension > 1,
which means they temper out more than one comma and therefore require
more than a single pair of equated intervals to characterize. -Carl

🔗Mike Battaglia <battaglia01@gmail.com>

12/28/2010 9:45:19 AM

On Tue, Dec 28, 2010 at 12:27 PM, Carl Lumma <carl@lumma.org> wrote:
>
> >I'm beat but tomorrow I'll work this out for some common temperaments.
> >-Mike
>
> Some of the temperaments you initially listed were codimension > 1,
> which means they temper out more than one comma and therefore require
> more than a single pair of equated intervals to characterize. -Carl

I think I used the wrong names - I'm not sure if 50/49 is actually
pajara, or if pajara is 50/49 and 64/63. Either way, the simplest two
intervals equated in the rank-3 50/49 temperament are 7/5 and 10/7.

-Mike

🔗Graham Breed <gbreed@gmail.com>

12/28/2010 10:33:48 AM

Mike Battaglia <battaglia01@gmail.com> wrote:

> There might be something simpler for magic but I'm not
> sure what it is.

In the 7-limit, there are:

63:50 ~= 81:64
27:25 ~= 49:45 ~= 35:32
9:7 ~= 35:27 ~= 32:25
45:32 ~= 7:5
7:6 ~= 81:70
49:36 ~= 27:20
36:35 ~= 25:24 ~= 28:27
60:49 ~= 100:81
48:35 ~= 112:81 ~= 25:18
15:14 ~= 16:15
28:25 ~= 9:8
50:49 ~= 64:63
81:80 ~= 49:48
56:45 ~= 5:4
54:49 ~= 10:9
32:27 ~= 25:21
6:5 ~= 98:81

For best alignment, use proportional spacing, in so far as
it matters. The python session using "temper.py" from my
website somewhere, is:

>>> magic = temper.Temperament(19,22,temper.limit7)
>>> for vecs in
>>> magic.getEquivalences(temper.limit9.secondOrder()):
... rats = ['%5i:%-5i'%temper.getRatio(v) for v in vecs]
... print ' ~= '.join(rats)
...

This is including the prompt, that may be interpreted by
your mail reader as quotes, but won't be stripped away. I
thought one the dark scripts on my website was doing this,
but apparently not. So if you want other lists you'll
either have to get the code or ask for them

In the 11-limit it gets more interesting, in that 10:9 and
11:10 are the same, because 100:99 is tempered out. That
also gives you 25:9 =~ 11:4, which enables a neat
substitution with domant seventh chords.

The full second-order 11-limit equivalences:

81:64 ~= 63:50 ~= 14:11
21:20 ~= 35:33 ~= 128:121 ~= 81:77
35:32 ~= 49:45 ~= 27:25 ~= 12:11
11:9 ~= 60:49 ~= 121:100 ~= 100:81
32:25 ~= 35:27 ~= 128:99 ~= 77:60 ~= 9:7 ~=
100:77
90:77 ~= 64:55 ~= 7:6 ~= 81:70
63:55 ~= 140:121
7:5 ~= 45:32 ~= 140:99 ~= 108:77
4:3 ~= 33:25
121:108 ~= 55:49
36:35 ~= 33:32 ~= 25:24 ~= 80:77 ~= 28:27
15:14 ~= 77:72 ~= 16:15
48:35 ~= 11:8 ~= 112:81 ~= 25:18
1:1 ~= 100:99
28:25 ~= 25:22 ~= 112:99 ~= 9:8
55:42 ~= 64:49
64:63 ~= 99:98 ~= 55:54 ~= 121:120 ~= 50:49
80:63 ~= 44:35 ~= 121:96
121:90 ~= 66:49 ~= 110:81
49:48 ~= 45:44 ~= 56:55 ~= 81:80
96:77 ~= 5:4 ~= 56:45 ~= 99:80
8:7 ~= 55:48
11:10 ~= 10:9 ~= 54:49
72:55 ~= 160:121 ~= 21:16
88:81 ~= 121:112
33:28 ~= 32:27 ~= 25:21
98:81 ~= 77:64 ~= 6:5 ~= 40:33
49:40 ~= 27:22
49:36 ~= 27:20 ~= 15:11

Graham

🔗Mike Battaglia <battaglia01@gmail.com>

12/29/2010 9:27:15 AM

On Tue, Dec 28, 2010 at 1:33 PM, Graham Breed <gbreed@gmail.com> wrote:
>
> >>> magic = temper.Temperament(19,22,temper.limit7)
> >>> for vecs in
> >>> magic.getEquivalences(temper.limit9.secondOrder()):
> ... rats = ['%5i:%-5i'%temper.getRatio(v) for v in vecs]
> ... print ' ~= '.join(rats)
> ...

Thanks for the chart, so I see you've already done this then. What
algorithm are you using in getEquivalences? Is it similar to what I'm
doing, or does it generate equivalent intervals in order from simplest
-> most complex?

Also, do you have a "simplest interval reversed" algorithm as well (or
a "goodest" interval reversed?) It would be useful to throw 16/15 in
there and have it spit out that the limma is reversed, so that F is
lower than E and so on.

> This is including the prompt, that may be interpreted by
> your mail reader as quotes, but won't be stripped away. I
> thought one the dark scripts on my website was doing this,
> but apparently not. So if you want other lists you'll
> either have to get the code or ask for them

Can you run this on the normal 5-limit comma list? That's what I was
going to spend a bunch of time doing manually, by hand...

> In the 11-limit it gets more interesting, in that 10:9 and
> 11:10 are the same, because 100:99 is tempered out. That
> also gives you 25:9 =~ 11:4, which enables a neat
> substitution with domant seventh chords.

Ah right, we were talking about this.

-Mike

🔗Graham Breed <gbreed@gmail.com>

12/29/2010 10:28:26 AM

Mike Battaglia <battaglia01@gmail.com> wrote:

> Thanks for the chart, so I see you've already done this
> then. What algorithm are you using in getEquivalences? Is
> it similar to what I'm doing, or does it generate
> equivalent intervals in order from simplest -> most
> complex?

It generates intervals of the second-order tonality
diamond, in no particular order, and then puts them into
bins according to generator steps. At least, that sounds
like a good way to do it, I can't remember what I actually
did. Any two intervals in the same bin will be equivalent
(as long as you take proper account of the period division).

> Also, do you have a "simplest interval reversed"
> algorithm as well (or a "goodest" interval reversed?) It
> would be useful to throw 16/15 in there and have it spit
> out that the limma is reversed, so that F is lower than E
> and so on.

I don't have that, and I'm not sure what you want. But it
might have something to do with chromatic-unison vectors.

> Can you run this on the normal 5-limit comma list? That's
> what I was going to spend a bunch of time doing manually,
> by hand...

I've got this, from your original message:

81:80 Meantone
10:9 ~= 9:8
64:63 Superpyth
failure
50:49 Pajara
failure
250:243 Porcupine
16:15 Father
4:3 ~= 5:4
25:24 ~= 10:9
6:5 ~= 9:8 ~= 32:25
16:15 ~= 1:1
25:24 Dicot
6:5 ~= 5:4
16:15 ~= 10:9
25:24 ~= 1:1
25:18 ~= 4:3 ~= 32:25
128:125 Augmented
25:24 ~= 16:15
5:4 ~= 32:25
3125:3072 Magic

Note the two cases where you gave a 7-limit ratio, so it
doesn't find the right temperament class.

Here's some code, in case other of us wants it again (and
with some line-wrap mess):

>>> text = """
... Tempering 81/80 - meantone - equates 9/8 and 10/9
... Tempering 64/63 - superpyth - equates 9/8 and 8/7
... Tempering 50/49 - pajara - equates 7/5 and 10/7
... Tempering 250/243 - porcupine - equates 10/9 and 27/25
(also useful to ... think of it as equating 81/80 and 25/24)
... Tempering 16/15 - father - equates 4/3 and 5/4
... Tempering 25/24 - dicot - equates 6/5 and 5/4, equates
10/9 and 16/15 ... Tempering 128/125 - augmented - equates
16/15 and 25/24 ... Tempering 3125/3072 - magic - equates
128/125 and 25/24 ... """
>>> import re
>>> for n, d, name in re.findall(r"(\d+)/(\d+) - (\w+)",
>>> text):
... vector = temper.factorizeRatio(int(n),int(d))
... print "%3i:%-3i %s"%(int(n),
int(d),name.capitalize())
... try:
... lt = temper.temperOut([vector])
... except temper.TemperamentException:
... print "failure"
... continue
... for vecs in lt.getEquivalences(
temper.limit5.secondOrder()):
... rats = ['%3i:%-3i'%temper.getRatio(v) for v
in vecs]
... print " ~= ".join(rats)
...

Graham