back to list

Partch Diamond and superparticulars

🔗Magnus Jonsson <magnus@smartelectronix.com>

4/16/2006 11:35:08 PM

Hi all,

I happened to noticed something peculiar about the partch diamond: If you sort the pitches in ascending order, each interval between two neighbouring pitches is a superparticular ratio. I verified this for partch diamonds up to size 32 both with and without octave reduction.

For the curious, here's the haskell program I wrote to do it:

import Data.Ratio
import Data.List

diamond::[Integer]->[Ratio Integer]
diamond ns = nub $ sort [i % j | i <- ns, j <- ns]

reduce::Ratio Integer->Ratio Integer->Ratio Integer
reduce ei p | p >= ei = reduce ei (p / ei)
| p < 1%1 = reduce ei (p * ei)
| otherwise = p

steps::[Ratio Integer]->[Ratio Integer]
steps [] = []
steps [_] = []
steps (x:y:rest) = (y/x) : steps (y:rest)

isSuperparticular::Ratio Integer->Bool
isSuperparticular r = numerator r == denominator r + 1

testSize::Integer->Bool
testSize n = all isSuperparticular (steps $ diamond [1..n])
&& all isSuperparticular (steps $ sort $ nub $
map (reduce (2%1)) (diamond [1..n]))

test::Bool
test = all testSize [1..32]

- Magnus Jonsson

🔗Carl Lumma <ekin@lumma.org>

4/17/2006 12:06:26 AM

I'd always observed it, and I think Erv was talking about it
once, but never proved it. I didn't know you used Haskell!

-Carl

At 11:35 PM 4/16/2006, you wrote:
>Hi all,
>
>I happened to noticed something peculiar about the partch diamond: If you
>sort the pitches in ascending order, each interval between two
>neighbouring pitches is a superparticular ratio. I verified this for
>partch diamonds up to size 32 both with and without octave reduction.
>
>For the curious, here's the haskell program I wrote to do it:
>
>import Data.Ratio
>import Data.List
>
>diamond::[Integer]->[Ratio Integer]
>diamond ns = nub $ sort [i % j | i <- ns, j <- ns]
>
>reduce::Ratio Integer->Ratio Integer->Ratio Integer
>reduce ei p | p >= ei = reduce ei (p / ei)
> | p < 1%1 = reduce ei (p * ei)
> | otherwise = p
>
>steps::[Ratio Integer]->[Ratio Integer]
>steps [] = []
>steps [_] = []
>steps (x:y:rest) = (y/x) : steps (y:rest)
>
>isSuperparticular::Ratio Integer->Bool
>isSuperparticular r = numerator r == denominator r + 1
>
>testSize::Integer->Bool
>testSize n = all isSuperparticular (steps $ diamond [1..n])
> && all isSuperparticular (steps $ sort $ nub $
> map (reduce (2%1)) (diamond
>[1..n]))
>
>test::Bool
>test = all testSize [1..32]
>
>- Magnus Jonsson
>
>
>
>Yahoo! Groups Links
>
>
>
>

🔗Magnus Jonsson <magnus@smartelectronix.com>

4/17/2006 12:47:13 AM

On Mon, 17 Apr 2006, Carl Lumma wrote:

> I'd always observed it, and I think Erv was talking about it
> once, but never proved it.

Aha, there you go :). I'd be really surprised if nobody else had observed it before me...

> I didn't know you used Haskell!

I use C, C++, Common Lisp and Haskell for most programming I do. I kinda know my way around in a few other languages too. You know Haskell?

-Magnus

🔗Carl Lumma <ekin@lumma.org>

4/17/2006 1:08:09 AM

> You know Haskell?

Not really, but it seems like a natural place to go
from Scheme.

-Carl

🔗Gene Ward Smith <genewardsmith@coolgoose.com>

4/17/2006 10:21:59 AM

--- In tuning-math@yahoogroups.com, Magnus Jonsson <magnus@...> wrote:
>
> Hi all,
>
> I happened to noticed something peculiar about the partch diamond:
If you
> sort the pitches in ascending order, each interval between two
> neighbouring pitches is a superparticular ratio.

Given that the elements of the n-odd-limit diamond belong to the nth
row of the Farey sequence, not that surprising. You can find the n
tonality diamond by taking the n Farey sequence 1 <= p/q < 2, and then
removing all p whose odd part is greater than n. If you can show the
gaps so created don't lead to any non-superparticular ratios you'd
have a proof.