Generator form manipulation: Difference between revisions

Cmloegcmluin (talk | contribs)
avoiding enfactoring
Dummy index (talk | contribs)
add ja interwiki
 
(23 intermediate revisions by one other user not shown)
Line 1: Line 1:
A [[User:Cmloegcmluin/Defactored_canonical_form|canonical mapping form]] is an important standard to have as community for uniquely identifying [[temperaments]], but it is not the only mapping form one should ever need, because one may wish to use differently-sized [[generators]].
{{Interwiki
| en = Generator form manipulation
| ja = ジェネレーター読み替え操作
}}
A [[canonical_form|canonical mapping form]] is an important standard to have as a community for uniquely identifying [[temperaments]], but it is not the only mapping form one should ever need, because one may wish to use differently-sized [[generators]] (to ultimately generate the same tempered intervals). Several such forms with different generator sizes have been presented, such as [[Normal_lists#Positive_generator_form|positive generator form]], [[Normal_lists#Equave-reduced_generator_form|equave-reduced generator form]], and [[Normal_lists#Minimal_generator_form|minimal-generator form]].


If two mappings are equivalent, i.e. they have the same canonical form and therefore represent the same temperament, then their corresponding generators are equivalent too. That doesn't mean their generators are the same sizes; it only means that in combination with each other, their generators reach the same set of pitches.  
For our purposes here we will be using the [[defactored Hermite form]] as the canonical form. If two mappings are equivalent, i.e. they have the same canonical form and therefore represent the same temperament, then their corresponding generators are equivalent too. That doesn't mean their generators are the same sizes; it only means that in combination with each other, their generators reach the same set of pitches.  


For example, the canonical form of [[Meantone_family#Meantone_.2812.2619.2C_2.3.5.29|5-limit meantone]] is {{vector|{{map|1 1 0}} {{map|0 1 4}}}}, and form has generators with sizes of approximately an [[octave]] and a [[perfect fifth]], respectively. But any pitch system constructed using an octave and a perfect fifth could also have been constructed using an octave and a [[perfect fourth]], because the perfect fourth is the [[octave complement]] of the perfect fifth. Specifically, any pitch we reached previously with a perfect fifth could be instead reached by going up an octave and down a perfect fourth. So in situations where we're approaching 5-limit meantone as a pitch system constructed by an octave and a perfect fourth, we might prefer to have the mapping in that form, which looks like {{vector|{{map|1 2 4}} {{map|0 -1 -4}}}}.  
For example, the canonical form of [[Meantone_family#Meantone_.2812.2619.2C_2.3.5.29|5-limit meantone]] is {{rket|{{map|1 1 0}} {{map|0 1 4}}}}, and form has generators with sizes of approximately an [[octave]] and a [[perfect fifth]], respectively. But any pitch system constructed using an octave and a perfect fifth could also have been constructed using an octave and a [[perfect fourth]], because the perfect fourth is the [[octave complement]] of the perfect fifth. Specifically, any pitch we reached previously with a perfect fifth could be instead reached by going up an octave and down a perfect fourth. So in situations where we're approaching 5-limit meantone as a pitch system constructed by an octave and a perfect fourth, we might prefer to have the mapping in that form, which looks like {{rket|{{map|1 2 4}} {{map|0 -1 -4}}}}.  


As a further example, we might prefer only to use generators that are approximations of primes, so we'd like meantone's mapping in the form where the generators are an octave and a perfect twelfth, or [[tritave]] (3/1). This works for a similar reason: anything we could have reached with a perfect fifth we could also reach by moving up a tritave and down an octave, and that form looks like {{vector|{{map|1 0 -4}} {{map|0 1 4}}}}.  
As a further example, we might prefer only to use generators that are approximations of primes, so we'd like meantone's mapping in the form where the generators are an octave and a perfect twelfth, or [[tritave]] (3/1). This works for a similar reason: anything we could have reached with a perfect fifth we could also reach by moving up a tritave and down an octave, and that form looks like {{rket|{{map|1 0 -4}} {{map|0 1 4}}}}.  


{| class="wikitable"
{| class="wikitable"
|+example meantone mapping forms
|+example meantone mapping forms
![⟨octave] ⟨fifth]⟩
![⟨octave] ⟨fifth]⟩
|{{vector|{{map|1 1 0}} {{map|0 1 4}}}}
|{{rket|{{map|1 1 0}} {{map|0 1 4}}}}
|-
|-
![⟨octave] ⟨fourth]⟩
![⟨octave] ⟨fourth]⟩
|{{vector|{{map|1 2 4}} {{map|0 -1 -4}}}}
|{{rket|{{map|1 2 4}} {{map|0 -1 -4}}}}
|-
|-
![⟨octave] ⟨tritave]⟩
![⟨octave] ⟨tritave]⟩
|{{vector|{{map|1 0 -4}} {{map|0 1 4}}}}
|{{rket|{{map|1 0 -4}} {{map|0 1 4}}}}
|}
|}


Now clearly all three of these mapping forms look related, and they are indeed, but the exact relationships between them may not be immediately apparent, or how those relationships correspond to the relationships between their generator sizes. The purpose of this section is to demonstrate tricks for transforming from one matrix form to another so that we can make the generators the sizes we want, and along the way we'll look at how the tricks work in order to explain these relationships.  
Now clearly all three of these mapping forms look related, and they are indeed, but the exact relationships between them may not be immediately apparent, or how those relationships correspond to the relationships between their generator sizes. The purpose of this article is to demonstrate tricks for transforming from one matrix form to another so that we can make the generators the sizes we want, and along the way we'll look at how the tricks work in order to explain these relationships.  


== generator size manipulation tricks ==
== Generator size manipulation tricks ==


=== first trick: change one generator by the size of another generator ===
=== First trick: change one generator by the size of another generator ===


The most basic trick is this: for a rank <span><math>r</math></span> temperament whose mapping has rows <span><math>R_1, R_2 ... R_r</math></span>, and corresponding generators with cents <span><math>G_1, G_2 ... G_r</math></span>, if we want to increase <span><math>G_a</math></span> by <span><math>G_b</math></span>, then replace <span><math>R_b</math></span> with <span><math>R_b' = R_b - R_a</math></span>.
The most basic trick is this: for a rank <math>r</math> temperament whose mapping <math>M</math> has rows <math>𝒎_1, 𝒎_2 ... 𝒎_r</math>, and corresponding generators with cents <math>g_1, g_2 ... g_r</math>, if we want to increase <math>g_a</math> by <math>g_b</math>, then replace <math>𝒎_b</math> with <math>𝒎_b' = 𝒎_b - 𝒎_a</math>.


Let's demonstrate this trick on the most recent example we looked at: meantone as generated by an octave and a tritave. If we begin with meantone in canonical form, {{vector|{{map|1 1 0}} {{map|0 1 4}}}}, where the generators are an octave and a perfect fifth, then we know we need to increase the second generator by the size of the first generator, because a tritave is equal to a perfect fifth plus an octave. So in terms of our variables, we must change <span><math>G_2</math></span> so that it's <span><math>G_2 + G_1</math></span>. According to our trick, then, we must replace <span><math>R_1</math></span> with <span><math>R_1' = R_1 - R_2</math></span>. And so <span><math>R_1'</math></span> is found like this:
Let's demonstrate this trick on the most recent example we looked at: meantone as generated by an octave and a tritave. If we begin with meantone in canonical form, {{rket|{{map|1 1 0}} {{map|0 1 4}}}}, where the generators are an octave and a perfect fifth, then we know we need to increase the second generator by the size of the first generator, because a tritave is equal to a perfect fifth plus an octave. So in terms of our variables, we must change <math>g_2</math> so that it's <math>g_2 + g_1</math>. According to our trick, then, we must replace <math>𝒎_1</math> with <math>𝒎_1' = 𝒎_1 - 𝒎_2</math>. And so <math>𝒎_1'</math> is found like this:


<math>
<math>
\begin{array} {r}
\begin{array} {r}
R_1 \\
𝒎_1 \\
-R_2 \\
-𝒎_2 \\
\hline
\hline
R_1'
𝒎_1'
\end{array}
\end{array}


Line 47: Line 51:
</math>
</math>


And then simply replace <span><math>R_1</math></span> = {{map|1 1 0}} with <span><math>R_1'</math></span> = {{map|1 0 -4}} in the mapping, changing {{vector|{{map|1 1 0}} {{map|0 1 4}}}} to {{vector|{{map|1 0 -4}} {{map|0 1 4}}}}.
And then simply replace <math>𝒎_1</math> = {{map|1 1 0}} with <math>𝒎_1'</math> = {{map|1 0 -4}} in the mapping, changing {{rket|{{map|1 1 0}} {{map|0 1 4}}}} to {{rket|{{map|1 0 -4}} {{map|0 1 4}}}}.


It may be counterintuitive at first that in order to change the size of a generator we must make a change to a mapping row ''other than the one which corresponds to that generator'' (in this example, we changed the size of of the ''second'' generator by changing the ''first'' row). But there is a way to train our intuition on this effect. Think of it like transferring jobs. Remember that in order to know the size in cents of a generator, we cannot look exclusively at that generator's mapping row out of context; we need to know the entire mapping, because the mapping rows all work together to determine how the temperament works. So we can think of every mapping row like a workforce that outsources some of its work to the other rows; they're an interconnected system of workforces. And so when we subtract one row from another, we're in effect saying that the row being subtracted from is going to do less of the row being subtracted's work. So when we subtract <span><math>R_2</math></span> from <span><math>R_1</math></span>, what we're saying is that whatever work the first generator was doing for the second generator, it will no longer do that work anymore, so the second generator will need to take care of that work itself; and that's why <span><math>G_2</math></span> becomes the size of <span><math>G_2</math></span> plus <span><math>G_1</math></span>.
It may be counterintuitive at first that in order to change the size of a generator we must make a change to a mapping-row ''other than the one which corresponds to that generator'' (in this example, we changed the size of of the ''second'' generator by changing the ''first'' map). But there is a way to train our intuition on this effect. Think of it like transferring jobs. Remember that in order to know the size in cents of a generator, we cannot look exclusively at that generator's mapping-row out of context; we need to know the entire mapping, because the mapping-rows all work together to determine how the temperament works. Instead of "mapping-rows", let's call them "maps" for short. So we can think of every map like a workforce that outsources some of its work to the other maps; they're an interconnected system of workforces. And so when we subtract one map from another, we're in effect saying that the map being subtracted from is going to do less of the work of the map being subtracted. So when we subtract <math>𝒎_2</math> from <math>𝒎_1</math>, what we're saying is that whatever work the first generator was doing for the second generator, it will no longer do that work anymore, so the second generator will need to take care of that work itself; and that's why <math>g_2</math> becomes the size of <math>g_2</math> plus <math>g_1</math>.


Conversely, if we want to ''decrease'' <span><math>G_a</math></span> by <span><math>G_b</math></span>, then we replace <span><math>R_b</math></span> with <span><math>R_b' = R_b</math></span> ''plus'' <span><math>R_a</math></span>.
Conversely, if we want to ''decrease'' <math>g_a</math> by <math>g_b</math>, then we replace <math>𝒎_b</math> with <math>𝒎_b' = 𝒎_b</math> ''plus'' <math>𝒎_a</math>.


=== second trick: negating a generator ===
=== Second trick: negating a generator ===


Now let's demonstrate a slightly more complicated example: transforming the 5-limit meantone mapping from its canonical form which uses a perfect fifth to the form which uses a perfect fourth. Again, we know this is possible because the perfect fourth is the octave complement of the perfect fifth.  
Now let's demonstrate a slightly more complicated example: transforming the 5-limit meantone mapping from its canonical form which uses a perfect fifth to the form which uses a perfect fourth. Again, we know this is possible because the perfect fourth is the octave complement of the perfect fifth.  
Line 65: Line 69:
We can't accomplish this using the one trick we've already learned. How could we? That first trick relies on the interactions of ''two different'' generators, whereas negating a generator only involves one generator: itself. So here's where our second generator size manipulation trick comes in: negating a generator.
We can't accomplish this using the one trick we've already learned. How could we? That first trick relies on the interactions of ''two different'' generators, whereas negating a generator only involves one generator: itself. So here's where our second generator size manipulation trick comes in: negating a generator.


Fortunately this second trick is very easy. All we need to do in order to negate <span><math>G_a</math></span> (the generator size, e.g. in cents) is to negate each of the terms of the mapping row <span><math>R_a</math></span>. So, we would simply change <span><math>R_2</math> = </span>{{map|0 1 4}} to <span><math>R_2'</math></span> = {{map|0 -1 -4}}, thereby changing the mapping from {{vector|{{map|1 1 0}} {{map|0 1 4}}}} to {{vector|{{map|1 1 0}} {{map|0 -1 -4}}}}<ref>To extend the workplace analogy (if we really like, though I doubt it's helpful here), we could say that we changed R_2's jobs so that they now do the exact opposite of what they used to do, so if we want them to accomplish the same thing as they used to, we have to have them undo their work.</ref>.  
Fortunately this second trick is very easy. All we need to do in order to negate <math>g_a</math> (the generator size, e.g. in cents) is to negate each of the terms of the map <math>𝒎_a</math>. So, we would simply change <math>𝒎_2</math> = </span>{{map|0 1 4}} to <math>𝒎_2'</math> = {{map|0 -1 -4}}, thereby changing the mapping from {{rket|{{map|1 1 0}} {{map|0 1 4}}}} to {{rket|{{map|1 1 0}} {{map|0 -1 -4}}}}<ref>To extend the workplace analogy (if we really like, though I doubt it's helpful here), we could say that we changed <math>𝒎_2</math>'s jobs so that they now do the exact opposite of what they used to do, so if we want them to accomplish the same thing as they used to, we have to have them undo their work.</ref>.  


So at this point, the generators are an octave and a negative perfect fifth. It's time for our second step.
So at this point, the generators are an octave and a negative perfect fifth. It's time for our second step.


The second step of achieving a generator with the size of a perfect fourth should be familiar: we need to increase our negative perfect fifth to a perfect fourth, and so we need to add one octave, and therefore we need to change <span><math>R_1</math></span> to be <span><math>R_1 - R_2</math></span>, so we end up with:
The second step of achieving a generator with the size of a perfect fourth should be familiar: we need to increase our negative perfect fifth to a perfect fourth, and so we need to add one octave, and therefore we need to change <math>𝒎_1</math> to be <math>𝒎_1 - 𝒎_2</math>, so we end up with:


<math>
<math>
\begin{array} {r}
\begin{array} {r}
R_1 \\
𝒎_1 \\
-R_2 \\
-𝒎_2 \\
\hline
\hline
R_1'
𝒎_1'
\end{array}
\end{array}


Line 89: Line 93:
</math>
</math>


And we're done, having found the mapping {{vector|{{map|1 2 4}} {{map|0 -1 -4}}}}.  
And we're done, having found the mapping {{rket|{{map|1 2 4}} {{map|0 -1 -4}}}}.


=== beyond rank-2 ===
=== Beyond rank-2 ===


[[File:Generator step by step manipulation.png|thumb|600px|A demonstration of how one might transform the size of a generator of a rank-3 temperament.]]
[[File:Generator step by step manipulation.png|thumb|600px|A demonstration of how one might transform the size of a generator of a rank-3 temperament.]]


These two tricks should enable us to attain any valid generator sizes we may wish for a given temperament. And these tricks work for any rank<ref>past 1, anyway; of course, rank 1 temperaments are somewhat inflexible in their single generator's size.</ref>, not only rank 2 like we've looked at thus far with 5-limit meantone examples. To be clear, for a rank <span><math>r</math></span> temperament, adding or subtracting <span><math>R_a</math></span> from another generator will only affect the size of <span><math>G_a</math></span>.  
These two tricks should enable us to attain any valid generator sizes we may wish for a given temperament. And these tricks work for any rank<ref>past 1, anyway; of course, rank 1 temperaments are somewhat inflexible in their single generator's size.</ref>, not only rank 2 like we've looked at thus far with 5-limit meantone examples. To be clear, for a rank <math>r</math> temperament, adding or subtracting <math>𝒎_a</math> from another generator will only affect the size of <math>g_a</math>.  


For example, [[Marvel_family#Marvel|7-limit marvel]]'s canonical form is {{vector|{{map|1 0 0 -5}} {{map|0 1 0 2}} {{map|0 0 1 2}}}}, with generators of an octave, tritave, and [[pentave]] (5/1), in that order. We can change that second generator from a tritave to a perfect fifth by decreasing <span><math>G_2</math></span> by <span><math>G_1</math></span>, which we know by the first trick means we add <span><math>R_2</math></span> to <span><math>R_1</math></span>, producing {{vector|{{map|1 1 0 -3}} {{map|0 1 0 2}} {{map|0 0 1 2}}}}. Helpfully, this trick has no effect on any other generators that were not involved, which in this case is just the size of the pentave, which was the one remaining generator out of the three in this temperament.
For example, [[Marvel_family#Marvel|7-limit marvel]]'s canonical form is {{rket|{{map|1 0 0 -5}} {{map|0 1 0 2}} {{map|0 0 1 2}}}}, with generators of an octave, tritave, and [[pentave]] (5/1), in that order. We can change that second generator from a tritave to a perfect fifth by decreasing <math>g_2</math> by <math>g_1</math>, which we know by the first trick means we add <math>𝒎_2</math> to <math>𝒎_1</math>, producing {{rket|{{map|1 1 0 -3}} {{map|0 1 0 2}} {{map|0 0 1 2}}}}. Helpfully, this trick has no effect on any other generators that were not involved, which in this case is just the size of the [[pentave]], which was the one remaining generator out of the three in this temperament.


The fact that these tricks have isolated effects on the generator sizes like this makes it straightforward to compose sequences of them, applied one after the other, to attain an incredible variety of valid generator sizes, as you can see in the diagram to the right.
The fact that these tricks have isolated effects on the generator sizes like this makes it straightforward to compose sequences of them, applied one after the other, to attain an incredible variety of valid generator sizes, as you can see in the diagram to the right.


=== avoiding enfactoring ===
=== Avoiding enfactoring ===


To avoid enfactoring the mapping, i.e. introducing a common factor in one of the rows, you simply avoid ever replacing a row with a multiple of that row. You always replace a row with a combination of at least one each of two different rows, as in trick 1, or with the row negated, as in trick 2.  
Using these two tricks, you do not have to worry about enfactoring the mapping, i.e. introducing a common factor in one of the maps. This is because neither of these tricks ever involve replacing a map with a multiple of that map; we always replace a map with a combination of at least one each of two different maps, as in trick 1, or with the map negated, as in trick 2.


== mingen form ==
== Tuning ==


=== definition ===
In order to determine the relative size of the generators, you need to have chosen a tuning for each them. The tuning we're using here comes from the [[minimax-ES]] tuning scheme, because this scheme is decent enough and easy to compute.<ref>Note from Douglas Blumeyer: though if I had written this article today having done a lot of tuning theory and built a library for optimizing tunings, I would have gone with TILT minimax-U instead.</ref>


A number of generator size targets have been described, such as [[UDP#Generalizing_to_Arbitrary_MOS.27s:_Bright_and_Dark_Generators_.28Chroma-Positive_and_Chroma-Negative.29|chroma-positive generators]], "musician's form", and probably more will be described in the future<ref>Such as forms using [https://mathworld.wolfram.com/LLLAlgorithm.html LLL] to get "a simple set of generators", per a post by Graham Breed on Facebook [https://bit.ly/3AhDYP8 here].</ref>. The generator size target we'll be demonstrating here may not have been rigorously described elsewhere, or named<ref>It is the form used by [[Graham Breed]]'s regular temperament finding scripts hosted here: http://x31eq.com/temper/net.html, at least for rank-2 temperaments.</ref>, but these purposes, we'll be calling it minimum-generator, or mingen, for short. Mingen form is when each successive generator is less than half the size of the previous generator.<ref>Like octave reduction combined with octave inversion, since you can't just add or subtract half octaves until it's between 0 and 600 cents. You have to add or subtract octaves until it's between -600 and +600 cents, then multiply by -1 if it's negative.</ref><ref>You could always find a smaller and smaller generator by going negative, so this assumes positive generators.</ref>
== Easy instructions table to achieve mingen form for rank-2 mapping ==


In order to define the size of the generators, you need to specify a tuning strategy. Though if you have two generators that are close enough that their size ranking depends on the tuning, then you probably have other problems. In any case, the tuning strategy that we'll be using here is T2, because it's decent enough and easy to compute.
The following table shows how to obtain minimal-generator form from various starting positions, by synthesizing the two generator size manipulation tricks explained in the previous section. In this table, the period <math>p</math> is the first map <math>m_1</math> in cents and the generator <math>g</math> is the second map <math>m_2</math> in cents. It uses the simple example of 5-limit meantone.  
 
=== rank-2 instructions table ===
 
Let's begin with the simple example of 5-limit meantone. The following table demonstrates how to obtain mingen form from various starting positions, by synthesizing the two generator size manipulation tricks explained in the previous section. In this table, the period <span><math>p</math></span> is the first mapping row <span><math>r_1</math></span> in cents and the generator <span><math>g</math></span> is the second mapping row <span><math>r_2</math></span> in cents.


  {| class="wikitable"
  {| class="wikitable"
|+mapping manipulations
|+mapping manipulations
!mapping
!mapping
!<span><math>p</math></span> (¢)
!<math>p</math> (¢)
!<span><math>g</math></span> (¢)
!<math>g</math> (¢)
!current <span><math>p</math></span> vs. <span><math>g</math></span>
!current <math>p</math> vs. <math>g</math>
!desired new <span><math>g</math></span>
!desired new <math>g</math>
!required <span><math>r_1</math></span> change
!required <math>𝒎_1</math> change
!required <span><math>r_2</math></span> change
!required <math>𝒎_2</math> change
!repeat?
!repeat?
|-
|-
|{{vector|{{map|1 0 -4}} {{map|0 -1 -4}}}}
|{{rket|{{map|1 0 -4}} {{map|0 -1 -4}}}}
|1201.4
|1201.4
|−1898.4
|−1898.4
|g < −p
|<math>g < −p</math>
|g + p
|<math>g + p</math>
|r₁ 2r₂
|<math>𝒎₁ 2𝒎₂</math>
|
|
|yes
|yes
|-
|-
|{{vector|{{map|1 1 0}} {{map|0 -1 -4}}}}
|{{rket|{{map|1 1 0}} {{map|0 -1 -4}}}}
|1201.4
|1201.4
|−697.049
|−697.049
|−p <= g < −p/2
|<math>−p <= g < −p/2</math>
|p + g
|<math>p + g</math>
|r₁ r₂
|<math>𝒎₁ 𝒎₂</math>
|
|
|no, you're done
|no, you're done
|-
|-
|{{vector|{{map|1 2 4}} {{map|0 1 4}}}}
|{{rket|{{map|1 2 4}} {{map|0 1 4}}}}
|1201.4
|1201.4
|−504.348
|−504.348
|−p/2 <= g < 0
|<math>−p/2 <= g < 0</math>
|−g
|<math>−g</math>
|
|
|−r₂
|<math>−𝒎₂</math>
|no, you're done
|no, you're done
|-
|-
|{{vector|{{map|1 2 4}} {{map|0 -1 -4}}}}
|{{rket|{{map|1 2 4}} {{map|0 -1 -4}}}}
|1201.4
|1201.4
|504.4
|504.4
|0 <= g <= p/2
|<math>0 <= g <= p/2</math>
|g
|<math>g</math>
|
|
|
|
|no, you're done
|no, you're done
|-
|-
|{{vector|{{map|1 1 0}} {{map|0 1 4}}}}
|{{rket|{{map|1 1 0}} {{map|0 1 4}}}}
|1201.4
|1201.4
|697.049
|697.049
|p/2 < g <= p
|<math>p/2 < g <= p</math>
|p - g
|<math>p - g</math>
|r₁ + r₂
|<math>𝒎₁ + 𝒎₂</math>
|−r₂
|<math>−𝒎₂</math>
|no, you're done
|no, you're done
|-
|-
|{{vector|{{map|1 0 -4}} {{map|0 1 4}}}}
|{{rket|{{map|1 0 -4}} {{map|0 1 4}}}}
|1201.4
|1201.4
|1898.4
|1898.4
|p < g
|<math>p < g</math>
|g - p
|<math>g - p</math>
|r₁ + 2r₂
|<math>𝒎₁ + 2𝒎₂</math>
|−r₂
|<math>−𝒎₂</math>
|yes
|yes
|}
|}


=== Wolfram Language implementation ===
=== Wolfram Language implementation of mingen form instructions above ===


The below code essentially works through the input matrix M two rows at a time, beginning with the first two rows. Each pair of rows is "fixed" so that the second row is less than half of the first row. The same set of changes and potential recursions as described in the table in the previous section is used for each pair of rows. When the sizes of the generators is computed, a weighted Frobenius tuning is used for its computational frugality and reasonableness.  
The below code essentially works through the input matrix <math>M</math> two rows at a time, beginning with the first two rows. Each pair of rows is "fixed" so that the second row is less than half of the first row. The same set of changes and potential recursions as described in the table in the previous section is used for each pair of rows. When the sizes of the generators is computed, T2 tuning is used for its computational frugality and reasonableness.  


  <nowiki>
  <nowiki>
Line 267: Line 267:
</nowiki>
</nowiki>


=== limitations ===
= Footnotes =
 
<references/>
Beyond rank-2, the mingen form of a temperament is no longer unique. You can always get smaller and smaller generators.<ref>This is why on Graham Breed's temperament finding tool, beyond rank-2 he simply uses the Hermite Normal Form.</ref>
 
Consider the example in the diagram above. We begin with {{vector|{{map|1 2 0 -1}} {{map|0 -1 6 10}} {{map|0 0 -1 -2}}}} with generators of 1200.6¢, 499.841¢, and 214.024¢, which therefore already satisfies the condition that each generator is less than half the previous generator. But we can transform it into {{vector|{{map|1 2 2 3}} {{map|0 -1 1 0}} {{map|0 0 -1 -2}}}} which has a third generator of 116.013¢ instead. This is accomplished by adding row 3 to row 2 five times, which decreases generator 3 by the size of five times row 2, from 214.024¢ by 5 × 499.841 = 2499.205¢ to -2285.18¢; and then subtracting row 3 from row 1 twice, which increases generator 3 by the size of two times row 1, from -2285.18¢ by 2 × 1200.6¢ = 2401.2¢ to 116.013¢. And we can get that generator even smaller if we had instead moved up by 499.841 twice to 1213.71¢ and then down by 1200.6¢ once to 13.109¢ (that's a final mapping of {{vector|{{map|1 2 -1 -3}} {{map|0 -1 8 14}} {{map|0 0 -1 -2}}}}.
 
You could find smaller and smaller generators if you wanted, by essentially finding increasingly small "commas" between the other generators' sizes (e.g. 5 × 1200.6¢ versus 12 × 499.841¢ is a difference of only 4.908¢) and then shifting generators by those commas.


== References ==
[[Category:Regular temperament theory]]
[[Category:Terms]]
[[Category:Math]]