Generator preimage: Difference between revisions
Cmloegcmluin (talk | contribs) hyphenate and link comma-basis |
Cmloegcmluin (talk | contribs) unhyphenate "comma basis" |
||
| Line 13: | Line 13: | ||
Suppose V consists of the 7-limit patent vals for 12 and 19; that is, V = [<12 19 28 34|, <19 30 44 53|]. Then a corresponding list of transversal generators is [49/48, 36/35]. 49/48 corresponds to one step of 12et, and zero steps of 19et, whereas 36/35 is zero steps of 12et, and one step of 19et. This gives us a septimal meantone transversal of the 7-limit where 3/2 is represented by (49/48)^7 * (36/35)^11, and 2 is represented by (49/48)^12 * (36/35)^19. A more familiar septimal meantone transversal starts from the normal val list, [<1 0 -4 -13|, <0 1 4 10|], which corresponds to the transversal generators [2, 3]. | Suppose V consists of the 7-limit patent vals for 12 and 19; that is, V = [<12 19 28 34|, <19 30 44 53|]. Then a corresponding list of transversal generators is [49/48, 36/35]. 49/48 corresponds to one step of 12et, and zero steps of 19et, whereas 36/35 is zero steps of 12et, and one step of 19et. This gives us a septimal meantone transversal of the 7-limit where 3/2 is represented by (49/48)^7 * (36/35)^11, and 2 is represented by (49/48)^12 * (36/35)^19. A more familiar septimal meantone transversal starts from the normal val list, [<1 0 -4 -13|, <0 1 4 10|], which corresponds to the transversal generators [2, 3]. | ||
Given a list of transversal generators, we may append a [[comma | Given a list of transversal generators, we may append a [[comma basis]] for V and obtain a basis for the entire p-limit. For instance, we may extend [49/48, 36/35] to [49/48, 36/35, 81/80, 126/125]. Taking the corresponding matrix of monzos, whose rows are monzos for this list, inverting it and then transposing, we obtain | ||
[<12 19 28 34|, <19 30 44 53|, <-4 -6 -9 -11|, <-5 -8 -12 -14|] | [<12 19 28 34|, <19 30 44 53|, <-4 -6 -9 -11|, <-5 -8 -12 -14|] | ||
| Line 24: | Line 24: | ||
We can find transveral generators for V by the following procedure: | We can find transveral generators for V by the following procedure: | ||
<ul><li>Take the transpose of the [[Tenney-Euclidean_Tuning#The pseudoinverse|pseudoinverse]] of V, call that U</li><li>Find a basis for the commas of V</li><li>For each row U[i] of U, clear denominators and append the monzos of the comma | <ul><li>Take the transpose of the [[Tenney-Euclidean_Tuning#The pseudoinverse|pseudoinverse]] of V, call that U</li><li>Find a basis for the commas of V</li><li>For each row U[i] of U, clear denominators and append the monzos of the comma basis for V</li><li>[[Saturation|Saturate]] (or defactor) the result to a list of monzos, call that S</li><li>Apply the ith val V[i] (dot product) to each element of S</li><li>Insert V[i].S[j] in front of the elements of S[j] as the first element, obtaining the jth element T[j] of a modified list T</li><li>Hermite reduce the modified list T, take the first row, and remove the first element (which should be a 1.)</li><li>Consider the rest to be a monzo and convert it to a rational number</li><li>This is a corresponding transveral generator to the ith val V[i] of V; it may be reduced to an equivalent generator of minimal [[Tenney_Height|Tenney height]] by multiplying by the commas of V</li></ul> | ||
== Example == | == Example == | ||
| Line 60: | Line 60: | ||
</math> | </math> | ||
And here's the comma | And here's the comma basis for <span><math>V</math></span>: | ||
<math> | <math> | ||
| Line 70: | Line 70: | ||
</math> | </math> | ||
Beginning with <span><math>i = 1</math></span>, we'll create a matrix out of <span><math>U[i]</math></span> with denominators cleared and the comma | Beginning with <span><math>i = 1</math></span>, we'll create a matrix out of <span><math>U[i]</math></span> with denominators cleared and the comma basis appended (transposed so each comma is a row): | ||
<math> | <math> | ||
| Line 140: | Line 140: | ||
So indeed that gives the period for meantone, 2/1. | So indeed that gives the period for meantone, 2/1. | ||
Let's repeat the latter steps but now with <span><math>i = 2</math></span>. Here's <span><math>U[2]</math></span> with denominators cleared and the comma | Let's repeat the latter steps but now with <span><math>i = 2</math></span>. Here's <span><math>U[2]</math></span> with denominators cleared and the comma basis appended: | ||
<math> | <math> | ||
Revision as of 20:18, 12 November 2021
For each generator of a regular temperament, we can choose one JI interval that maps to it. Then we can call a set of JI generators like this transversal generators of that temperament.
Definition
Given a reduced list of p-limit vals V, we may define a set of transversal generators for V as a set of p-limit intervals q such that one of the vals of V maps q to 1 and the rest map it to 0. By reduced is meant that the gcd of the elements of each of the vals is 1--or in other words, none of the vals are contorted--and that they are linearly independent, so that if there are r vals, the rank of V as a matrix is r (or in other words, that the set is defactored).
If v1, v2, ... vr are the vals of V and t1, t2, ... tr are the corresponding transversal generators, then for any p-limit q we have, modulo the regular temperament defined by V
q ≅ t1^v1(q) * t2^v2(q) * ... * tr^vr(q)
In this way the transversal generators provide a transversal of the p-limit, and hence the name.
Examples
Suppose V consists of the 7-limit patent vals for 12 and 19; that is, V = [<12 19 28 34|, <19 30 44 53|]. Then a corresponding list of transversal generators is [49/48, 36/35]. 49/48 corresponds to one step of 12et, and zero steps of 19et, whereas 36/35 is zero steps of 12et, and one step of 19et. This gives us a septimal meantone transversal of the 7-limit where 3/2 is represented by (49/48)^7 * (36/35)^11, and 2 is represented by (49/48)^12 * (36/35)^19. A more familiar septimal meantone transversal starts from the normal val list, [<1 0 -4 -13|, <0 1 4 10|], which corresponds to the transversal generators [2, 3].
Given a list of transversal generators, we may append a comma basis for V and obtain a basis for the entire p-limit. For instance, we may extend [49/48, 36/35] to [49/48, 36/35, 81/80, 126/125]. Taking the corresponding matrix of monzos, whose rows are monzos for this list, inverting it and then transposing, we obtain
[<12 19 28 34|, <19 30 44 53|, <-4 -6 -9 -11|, <-5 -8 -12 -14|]
This is a unimodular matrix defining a change of basis for the p-limit.
For another example, consider [<1 1 1 2|, <0 2 1 1|, <0 0 2 1|] which is the normal val list for breed temperament, the temperament tempering out 2401/2400. A corresponding list of transversal generators is [2, 49/40, 10/7].
Finding the transversal generators
We can find transveral generators for V by the following procedure:
- Take the transpose of the pseudoinverse of V, call that U
- Find a basis for the commas of V
- For each row U[i] of U, clear denominators and append the monzos of the comma basis for V
- Saturate (or defactor) the result to a list of monzos, call that S
- Apply the ith val V[i] (dot product) to each element of S
- Insert V[i].S[j] in front of the elements of S[j] as the first element, obtaining the jth element T[j] of a modified list T
- Hermite reduce the modified list T, take the first row, and remove the first element (which should be a 1.)
- Consider the rest to be a monzo and convert it to a rational number
- This is a corresponding transveral generator to the ith val V[i] of V; it may be reduced to an equivalent generator of minimal Tenney height by multiplying by the commas of V
Example
Note: I've followed the algorithm as described above. But clearly I am transposing things here way more often than is necessary than if the algorithm was superficially revised.
For 5-limit meantone, [math]\displaystyle{ V }[/math] is
[math]\displaystyle{ \begin{bmatrix} 1 & 2 & 4 \\ 0 & -1 & -4 \\ \end{bmatrix} }[/math]
The pseudoinverse [math]\displaystyle{ V⁺ }[/math] is
[math]\displaystyle{ \frac{1}{33} \begin{bmatrix} 17 & 18 \\ 16 & 15 \\ -4 & -12 \\ \end{bmatrix} }[/math]
And that transposed is [math]\displaystyle{ (V⁺)ᵀ }[/math], which we'll call [math]\displaystyle{ U }[/math]:
[math]\displaystyle{ \frac{1}{33} \begin{bmatrix} 17 & 16 & -4 \\ 18 & 15 & -12 \\ \end{bmatrix} }[/math]
And here's the comma basis for [math]\displaystyle{ V }[/math]:
[math]\displaystyle{ \begin{bmatrix} -4 \\ 4 \\ -1 \\ \end{bmatrix} }[/math]
Beginning with [math]\displaystyle{ i = 1 }[/math], we'll create a matrix out of [math]\displaystyle{ U[i] }[/math] with denominators cleared and the comma basis appended (transposed so each comma is a row):
[math]\displaystyle{ \begin{bmatrix} 17 & 16 & -4 \\ -4 & 4 & -1 \\ \end{bmatrix} }[/math]
Defactor and call this [math]\displaystyle{ S }[/math]:
[math]\displaystyle{ \begin{bmatrix} 1 & 32 & -8 \\ 0 & 4 & -1 \\ \end{bmatrix} }[/math]
Now take the dot product of [math]\displaystyle{ V[1] }[/math] to each element of [math]\displaystyle{ S }[/math], or in other words, left multiply [math]\displaystyle{ Sᵀ }[/math] by [math]\displaystyle{ V[1] }[/math]:
[math]\displaystyle{ \begin{bmatrix} 1 & 2 & 4 \\ \end{bmatrix} \begin{bmatrix} 1 & 0 \\ 32 & 4 \\ -8 & -1 \\ \end{bmatrix} = \begin{bmatrix} 33 & 4 \\ \end{bmatrix} }[/math]
Now prepend that result, transposed, to [math]\displaystyle{ S }[/math]:
[math]\displaystyle{ \begin{bmatrix} 33 & 1 & 32 & -8 \\ 4 & 0 & 4 & -1 \\ \end{bmatrix} }[/math]
Take the Hermite Normal Form:
[math]\displaystyle{ \begin{bmatrix} 1 & 1 & 0 & 0 \\ 0 & 4 & -4 & 1 \\ \end{bmatrix} }[/math]
Take the first row:
[math]\displaystyle{ \begin{bmatrix} 1 & 1 & 0 & 0 \\ \end{bmatrix} }[/math]
Remove the first element (which should and indeed is a 1):
[math]\displaystyle{ \begin{bmatrix} 1 & 0 & 0 \\ \end{bmatrix} }[/math]
So indeed that gives the period for meantone, 2/1.
Let's repeat the latter steps but now with [math]\displaystyle{ i = 2 }[/math]. Here's [math]\displaystyle{ U[2] }[/math] with denominators cleared and the comma basis appended:
[math]\displaystyle{ \begin{bmatrix} 18 & 15 & -12 \\ -4 & 4 & -1 \\ \end{bmatrix} }[/math]
Defactor to get our new [math]\displaystyle{ S }[/math]:
[math]\displaystyle{ \begin{bmatrix} 2 & 31 & -16 \\ 0 & 2 & -1 \\ \end{bmatrix} }[/math]
Now take the dot product of [math]\displaystyle{ V[2] }[/math] to each element of [math]\displaystyle{ S }[/math], or in other words, left multiply [math]\displaystyle{ Sᵀ }[/math] by [math]\displaystyle{ V[2] }[/math]:
[math]\displaystyle{ \begin{bmatrix} 0 & -1 & -4 \\ \end{bmatrix} \begin{bmatrix} 2 & 0 \\ 31 & 2 \\ -16 & -1 \\ \end{bmatrix} = \begin{bmatrix} 33 & 2 \\ \end{bmatrix} }[/math]
Now prepend that result, transposed, to [math]\displaystyle{ S }[/math]:
[math]\displaystyle{ \begin{bmatrix} 33 & 2 & 31 & -16 \\ 2 & 0 & 2 & -1 \\ \end{bmatrix} }[/math]
Take the Hermite Normal Form:
[math]\displaystyle{ \begin{bmatrix} 1 & 2 & -1 & 0 \\ 0 & 4 & -4 & 1 \\ \end{bmatrix} }[/math]
Take the first row:
[math]\displaystyle{ \begin{bmatrix} 1 & 2 & -1 & 0 \\ \end{bmatrix} }[/math]
Remove the first element (which should and indeed is a 1):
[math]\displaystyle{ \begin{bmatrix} 2 & -1 & 0 \\ \end{bmatrix} }[/math]
So indeed that gives the generator for meantone, 4/3. We're done!
Wolfram Language implementation
transversalGenerator[u_, v_, c_] := Module[{base},
base = Transpose[columnHermiteDefactor[Join[{u}, Transpose[c]]]];
Drop[First[Take[hnf[Transpose[Join[{v}.base,base]]],1]],1]
];
transversalGenerators[m_] := Module[{c},
c = nullSpaceBasis[m];
Transpose[MapThread[transversalGenerator[#1, #1, c]&, {Map[multByLcd,Transpose[PseudoInverse[m]]],m}]]
];
transversalGenerators[{{1,2,4},{0,-1,-4}}] (* {{1,2},{0,-1},{0,0}} = 2/1 and 4/3 as expected *)