Cross-domain temperament merging: Difference between revisions
Cmloegcmluin (talk | contribs) |
ArrowHead294 (talk | contribs) m Update links and references |
||
| (2 intermediate revisions by one other user not shown) | |||
| Line 2: | Line 2: | ||
= Steps = | = Steps = | ||
== 1. Determine the domain basis for the output temperament == | == 1. Determine the domain basis for the output temperament == | ||
A guiding principle when performing a temperament merge across domains is [[Temperament_merging#Application|described on the main page for temperament merging]]: | A guiding principle when performing a temperament merge across domains is [[Temperament_merging#Application|described on the main page for temperament merging]]: | ||
| Line 25: | Line 23: | ||
== 2. Convert the input temperaments to the output domain basis == | == 2. Convert the input temperaments to the output domain basis == | ||
After determining the target domain basis, follow the instructions described here to convert the input temperament over: [[Cross-domain temperament merging#Changing basis]]. | After determining the target domain basis, follow the instructions described here to convert the input temperament over: [[Cross-domain temperament merging#Changing basis]]. | ||
== 3. Perform the merge as usual == | == 3. Perform the merge as usual == | ||
See the instructions described here to perform the temperament merge: [[Temperament merging#Merging]]. | See the instructions described here to perform the temperament merge: [[Temperament merging#Merging]]. | ||
= Domains as subspaces of other domains = | = Domains as subspaces of other domains = | ||
In the same way that an ''sub''space is a part of the full space, a subspace can be seen as a part of another larger subspace. So we can say a domain is itself ''a subspace of'' another domain. | In the same way that an ''sub''space is a part of the full space, a subspace can be seen as a part of another larger subspace. So we can say a domain is itself ''a subspace of'' another domain. | ||
| Line 39: | Line 34: | ||
== Examples == | == Examples == | ||
[[File:Interval subspaces 2.3 vs 2.3.7.png|300px|thumb|right|'''Figure 1.''' The domain 2.3 can be clearly seen to be a subspace of 2.3.7. The latter is simply many copies of the former, separated by 7's.]] | [[File:Interval subspaces 2.3 vs 2.3.7.png|300px|thumb|right|'''Figure 1.''' The domain 2.3 can be clearly seen to be a subspace of 2.3.7. The latter is simply many copies of the former, separated by 7's.]] | ||
| Line 51: | Line 45: | ||
== Application: determining whether it is possible to change the domain == | == Application: determining whether it is possible to change the domain == | ||
Understanding which domains are subspaces of each other is important when changing the domain for an interval or temperament. This is because only certain changes are possible: specifically, it is only possible to change between domains where one is a subspace of the other. Otherwise, the domains are incomparable. | Understanding which domains are subspaces of each other is important when changing the domain for an interval or temperament. This is because only certain changes are possible: specifically, it is only possible to change between domains where one is a subspace of the other. Otherwise, the domains are incomparable. | ||
| Line 63: | Line 56: | ||
So from these two opposing bulleted facts above, we can conclude that for any pair of domains where neither one is a subspace of the other, there would be no way for us to express ''either intervals or maps'' from one in the other. And that's why we could say that they're incomparable domains. | So from these two opposing bulleted facts above, we can conclude that for any pair of domains where neither one is a subspace of the other, there would be no way for us to express ''either intervals or maps'' from one in the other. And that's why we could say that they're incomparable domains. | ||
Notably, there is still a way to get intervals to a subspace, and maps to a superspace, but it's indirect. To do so, [[ | Notably, there is still a way to get intervals to a subspace, and maps to a superspace, but it's indirect. To do so, [[Dave Keenan & Douglas Blumeyer's guide to RTT/Exploring temperaments#Nullspace|take the dual]] of your object, then change basis, then take the dual again. So for a mapping you would use the nullspace function to convert it to its corresponding comma basis, change domain basis, and then use the nullspace function to convert it back to its corresponding mapping on the other side. | ||
== General method to determine whether a domain is a subspace of another == | == General method to determine whether a domain is a subspace of another == | ||
[[Cross-domain temperament merging#Examples|A couple subsections ago]], we provided a couple examples where we used natural language to explain — between two domains — which one was a subspace of the other. But we still need to describe a method to determine this in general. Let's do that next. | [[Cross-domain temperament merging#Examples|A couple subsections ago]], we provided a couple examples where we used natural language to explain — between two domains — which one was a subspace of the other. But we still need to describe a method to determine this in general. Let's do that next. | ||
| Line 74: | Line 66: | ||
=== Example === | === Example === | ||
For instance, we can demonstrate how 2.25/9.11/7 is a subspace of 2.5/3.7.11 using this approach. If you've really got a knack for this stuff, you may be able to eyeball even this somewhat intense example, but it's obviously good to have a rigorous method like this to fall back on, if only to convince ourselves that we've got the right answer (or to automate things with code, as has been done with these methods in the [[RTT library in Wolfram Language]]). | For instance, we can demonstrate how 2.25/9.11/7 is a subspace of 2.5/3.7.11 using this approach. If you've really got a knack for this stuff, you may be able to eyeball even this somewhat intense example, but it's obviously good to have a rigorous method like this to fall back on, if only to convince ourselves that we've got the right answer (or to automate things with code, as has been done with these methods in the [[RTT library in Wolfram Language]]). | ||
| Line 165: | Line 156: | ||
= Domain basis operations = | = Domain basis operations = | ||
== Merging == | == Merging == | ||
If you happen to already be familiar with [[temperament merging]], merging<ref group="note">The technical mathematical term for this is "sumset", not "union" as we might expect; in many contexts, "union" is the dual operation to "intersection", but for vector spaces, the dual operation to intersection is "sumset" (see page 4 of https://www2.math.upenn.edu/~siegelch/Notes/linalg.pdf). The difference between union and sumset can be explained like this: if we had two planes in a volume, their union would be both the planes, but their sumset would be the volume.</ref> domain bases follows a similar pattern: concatenate, then canonicalize the result. | |||
If you happen to already be familiar with [[temperament merging]], merging<ref>The technical mathematical term for this is "sumset", not "union" as we might expect; in many contexts, "union" is the dual operation to "intersection", but for vector spaces, the dual operation to intersection is "sumset" (see page 4 of https://www2.math.upenn.edu/~siegelch/Notes/linalg.pdf). The difference between union and sumset can be explained like this: if we had two planes in a volume, their union would be both the planes, but their sumset would be the volume.</ref> domain bases follows a similar pattern: concatenate, then canonicalize the result. | |||
=== But first: a gentle introduction === | === But first: a gentle introduction === | ||
Many times, it's easy to eyeball the merge of two domain bases. The basic idea is to just take everything that's in either one basis or the other. So 2.3.7 merged with 2.3.5 should just be 2.3.5.7, easy. Sometimes it can get kind of tricky, though. Like, what's the merge of 2.3.7/5 and 2.9.21/5? Not so obvious now. Hint: it's not 2.3.9.7/5.21/5! | Many times, it's easy to eyeball the merge of two domain bases. The basic idea is to just take everything that's in either one basis or the other. So 2.3.7 merged with 2.3.5 should just be 2.3.5.7, easy. Sometimes it can get kind of tricky, though. Like, what's the merge of 2.3.7/5 and 2.9.21/5? Not so obvious now. Hint: it's not 2.3.9.7/5.21/5! | ||
=== Concatenate === | === Concatenate === | ||
This is the easy part. Suppose we're merging 2.3.5 and 2.3.7; the concatenation of those two is quite simply 2.3.5.2.3.7. Yes, that result contains a lot of repetition. But that's what the next step — the canonicalization step — is there to solve. | This is the easy part. Suppose we're merging 2.3.5 and 2.3.7; the concatenation of those two is quite simply 2.3.5.2.3.7. Yes, that result contains a lot of repetition. But that's what the next step — the canonicalization step — is there to solve. | ||
=== Canonicalize === | === Canonicalize === | ||
See [[Domain basis#Canonical form]]. | See [[Domain basis#Canonical form]]. | ||
=== Notation === | === Notation === | ||
The notation used for merging here is the same as comma-merge: <math>B_1|B_2</math><ref group="note">Using ∩ for intersection, which seems obvious. But the merge notation is tricky. We could use ∪, of course. But technically speaking, it's not a union, but a sumset, and the notation for that is unfortunately just the plus sign +, which could be confusing. Furthermore, in the context of merging temperaments, we don't use either of those symbols. Actually, we use two different symbols there, depending on what we're merging! We use & if it's maps, and | if it's commas. At least, that's the notation used on the [[Meet and join]] and [[Temperament merging]] pages. And because intersections also arise for temperament matrices like mappings and comma bases, this article has gone with consistent notation for domain bases. Domain bases concatenate horizontally, like comma bases, so we use | and consider it a "basis-merge" symbol, i.e. it works on both comma bases and domain bases.</ref>. | |||
The notation used for merging here is the same as comma-merge: <math>B_1|B_2</math><ref>Using ∩ for intersection, which seems obvious. But the merge notation is tricky. We could use ∪, of course. But technically speaking, it's not a union, but a sumset, and the notation for that is unfortunately just the plus sign +, which could be confusing. Furthermore, in the context of merging temperaments, we don't use either of those symbols. Actually, we use two different symbols there, depending on what we're merging! We use & if it's maps, and | if it's commas. At least, that's the notation used on the [[Meet and join]] and [[Temperament merging]] pages. And because intersections also arise for temperament matrices like mappings and comma bases, this article has gone with consistent notation for domain bases. Domain bases concatenate horizontally, like comma bases, so we use | and consider it a "basis-merge" symbol, i.e. it works on both comma bases and domain bases.</ref>. | |||
=== Applications === | === Applications === | ||
Domain merging comes up in two key situations: | Domain merging comes up in two key situations: | ||
# Determining whether one domain is a subspace of another: <math>B_1</math> is a subspace of <math>B_2</math> if <math>B_1|B_2 = B_2</math>. For more details, see: [[Cross-domain temperament merging#General method to determine whether a domain is a subspace of another]]. | # Determining whether one domain is a subspace of another: <math>B_1</math> is a subspace of <math>B_2</math> if <math>B_1|B_2 = B_2</math>. For more details, see: [[Cross-domain temperament merging#General method to determine whether a domain is a subspace of another]]. | ||
| Line 193: | Line 177: | ||
== Intersecting == | == Intersecting == | ||
Finding the intersection of domain bases is surprisingly tricky<ref group="note">This approach was found by Sintel here: https://math.stackexchange.com/questions/1560411/basis-for-the-intersection-of-two-integer-lattices/2472784#2472784</ref>: | |||
Finding the intersection of domain bases is surprisingly tricky<ref>This approach was found by Sintel here: https://math.stackexchange.com/questions/1560411/basis-for-the-intersection-of-two-integer-lattices/2472784#2472784</ref>: | |||
# Convert the domain bases to basis matrices, as with a merge. | # Convert the domain bases to basis matrices, as with a merge. | ||
| Line 202: | Line 185: | ||
# Canonicalize. | # Canonicalize. | ||
The reason this works is that wherever the corresponding top-half columns are all zeros, this was achieved through linear combinations of vectors from both domain bases, which means the information below them represents vectors that are in both of them. In other words, if <math>(x, x) + (y, 0) = (0, z)</math> and <math>x</math> is in <math>B_1</math> and <math>y</math> is in <math>B_2</math>, then we must have <math>x + y = 0</math> and <math>z = x</math><ref>credit this explanation to Tom Price on Discord</ref>. We're sort of abusing HNF as a way to solve a system, kind of like [[Dave Keenan & Douglas Blumeyer's guide to RTT | The reason this works is that wherever the corresponding top-half columns are all zeros, this was achieved through linear combinations of vectors from both domain bases, which means the information below them represents vectors that are in both of them. In other words, if <math>(x, x) + (y, 0) = (0, z)</math> and <math>x</math> is in <math>B_1</math> and <math>y</math> is in <math>B_2</math>, then we must have <math>x + y = 0</math> and <math>z = x</math><ref group="note">credit this explanation to Tom Price on Discord</ref>. We're sort of abusing HNF as a way to solve a system, kind of like [[Dave Keenan & Douglas Blumeyer's guide to RTT/Exploring temperaments#Nullspace|when we calculate the nullspace]]<ref group="note">Credit this explanation to Sintel on Discord</ref>. | ||
=== But first: a gentle introduction === | === But first: a gentle introduction === | ||
As with the domain basis merge, it is sometimes practical to eyeball the answer. The basic idea is just to take only basis elements that in both of the domain bases. So the intersection of 2.3.5 and 2.3.7 is plainly just 2.3. But other times the answer may not be so clear. Such as: What is the intersection of 2.5/3.9/7 and 2.9.5? Hint: It's not just 2! | As with the domain basis merge, it is sometimes practical to eyeball the answer. The basic idea is just to take only basis elements that in both of the domain bases. So the intersection of 2.3.5 and 2.3.7 is plainly just 2.3. But other times the answer may not be so clear. Such as: What is the intersection of 2.5/3.9/7 and 2.9.5? Hint: It's not just 2! | ||
=== Example === | === Example === | ||
Let's find the intersection of 2.5/3 and 2.9.5. | Let's find the intersection of 2.5/3 and 2.9.5. | ||
| Line 360: | Line 341: | ||
=== Notation === | === Notation === | ||
The notation for domain basis intersecting we'll use here is just the intersection symbol: <math>B_1∩B_2</math>. | The notation for domain basis intersecting we'll use here is just the intersection symbol: <math>B_1∩B_2</math>. | ||
=== Applications === | === Applications === | ||
The intersection of domain bases comes up with doing a map-merge of temperaments. The resulting temperament's domain basis will be the intersection of all the input domain bases. For more information, see: [[Cross-domain temperament merging#Map-merge]]. | The intersection of domain bases comes up with doing a map-merge of temperaments. The resulting temperament's domain basis will be the intersection of all the input domain bases. For more information, see: [[Cross-domain temperament merging#Map-merge]]. | ||
= Changing basis = | = Changing basis = | ||
[[File:Two-way bridge.png|400px|right|thumb|A basis change matrix forms a two-way bridge between an interval superspace basis <math>B_L</math> and a domain basis <math>B_s</math>. But mappings can only use it to go from the superspace to the subspace, and comma bases can only use it to go from the subspace to the superspace.]] | [[File:Two-way bridge.png|400px|right|thumb|A basis change matrix forms a two-way bridge between an interval superspace basis <math>B_L</math> and a domain basis <math>B_s</math>. But mappings can only use it to go from the superspace to the subspace, and comma bases can only use it to go from the subspace to the superspace.]] | ||
| Line 380: | Line 358: | ||
== Constructing a basis change matrix == | == Constructing a basis change matrix == | ||
Here are the steps: | Here are the steps: | ||
# Set up a matrix with <math>d_L</math> rows, where <math>d_L</math> is the dimensionality of the superspace, and <math>d_s</math> columns, where <math>d_s</math> is the dimensionality of the subspace<ref>We're borrowing <math>L</math> and <math>s</math> from [[MOS]] scale theory; there's no direct conceptual connection here, nor any need to understand anything about such scale theory at this moment, but if you happen to be familiar with the conventional use of <math>L</math> for "Large" and <math>s</math> for "small" in that other xenharmonic topic, then this variable choice may be particularly helpful for you.</ref>. | # Set up a matrix with <math>d_L</math> rows, where <math>d_L</math> is the dimensionality of the superspace, and <math>d_s</math> columns, where <math>d_s</math> is the dimensionality of the subspace<ref group="note">We're borrowing <math>L</math> and <math>s</math> from [[MOS]] scale theory; there's no direct conceptual connection here, nor any need to understand anything about such scale theory at this moment, but if you happen to be familiar with the conventional use of <math>L</math> for "Large" and <math>s</math> for "small" in that other xenharmonic topic, then this variable choice may be particularly helpful for you.</ref>. | ||
# Label the rows with the superspace basis elements. | # Label the rows with the superspace basis elements. | ||
# Label the columns with the subspace basis elements. | # Label the columns with the subspace basis elements. | ||
# Fill in each entry with the count of basis elements from the interval superspace basis for this row that could be used to build the basis elements in the domain basis for this column. | # Fill in each entry with the count of basis elements from the interval superspace basis for this row that could be used to build the basis elements in the domain basis for this column. | ||
=== Example === | === Example === | ||
Let's construct the basis change matrix <math>B_{L↔s}</math> between 2.25/9.11/7 and 2.5/3.7.11. [[Cross-domain temperament merging#Example|As we proved earlier]], the former is a subspace of the latter. So this will be a 4×3 matrix. | Let's construct the basis change matrix <math>B_{L↔s}</math> between 2.25/9.11/7 and 2.5/3.7.11. [[Cross-domain temperament merging#Example|As we proved earlier]], the former is a subspace of the latter. So this will be a 4×3 matrix. | ||
| Line 434: | Line 410: | ||
== Using the basis change matrix == | == Using the basis change matrix == | ||
For intervals and comma bases, which can only be changed from a subspace to a superspace, we left-multiply by the basis change matrix; this process is identical to the process used when mapping intervals with ordinary temperament mappings, except replacing the mapping with the basis change matrix. | For intervals and comma bases, which can only be changed from a subspace to a superspace, we left-multiply by the basis change matrix; this process is identical to the process used when mapping intervals with ordinary temperament mappings, except replacing the mapping with the basis change matrix. | ||
| Line 440: | Line 415: | ||
=== Examples === | === Examples === | ||
Suppose we have the basis change matrix <math>B_{L↔s}</math> between 2.3.5.7 <math>B_L</math> and 2.9/7.5/3 <math>B_s</math>. The superspace is 2.3.5.7, so that's the rows, and 2.9/7.5/3 is the subspace, so that's the columns. And so here's our <math>B_{L↔s}</math>: | Suppose we have the basis change matrix <math>B_{L↔s}</math> between 2.3.5.7 <math>B_L</math> and 2.9/7.5/3 <math>B_s</math>. The superspace is 2.3.5.7, so that's the rows, and 2.9/7.5/3 is the subspace, so that's the columns. And so here's our <math>B_{L↔s}</math>: | ||
| Line 695: | Line 669: | ||
== Wolfram implementation == | == Wolfram implementation == | ||
The [[RTT library in Wolfram Language]] contains <code>changeBasis[]</code> which you can use directly on any temperament representation. | The [[RTT library in Wolfram Language]] contains <code>changeBasis[]</code> which you can use directly on any temperament representation. | ||
= Examples = | = Examples = | ||
== Comma-merge == | == Comma-merge == | ||
First, let's work through an example of a comma-merge across domain bases: meantone <math>\mathrm{C}_1</math> with archytas <math>\mathrm{C}_2</math>, where meantone is in the 5-limit standard domain basis 2.3.5, which we'll call <math>B_1</math>, and archytas is in the 2.3.7 domain basis, which we'll call <math>B_2</math>. | First, let's work through an example of a comma-merge across domain bases: meantone <math>\mathrm{C}_1</math> with archytas <math>\mathrm{C}_2</math>, where meantone is in the 5-limit standard domain basis 2.3.5, which we'll call <math>B_1</math>, and archytas is in the 2.3.7 domain basis, which we'll call <math>B_2</math>. | ||
| Line 1,145: | Line 1,116: | ||
== Map-merge == | == Map-merge == | ||
Now, let's work through an example of a map-merge of temperaments with different basis elements: 22 equal temperament <math>M_1</math> with 17 equal temperament <math>M_2</math>, where 22-ET has domain basis 2.3.5.11, which we'll call <math>B_1</math>, and 17-ET has domain basis 2.9.7.11, which we'll call <math>B_2</math>. | Now, let's work through an example of a map-merge of temperaments with different basis elements: 22 equal temperament <math>M_1</math> with 17 equal temperament <math>M_2</math>, where 22-ET has domain basis 2.3.5.11, which we'll call <math>B_1</math>, and 17-ET has domain basis 2.9.7.11, which we'll call <math>B_2</math>. | ||
| Line 1,294: | Line 1,264: | ||
Canonicalize (HNF, remove all-zero columns, back to number list form, and make super). So that tells us that the intersected domain basis <math>B_1∩B_2</math> is 2.9.11. | Canonicalize (HNF, remove all-zero columns, back to number list form, and make super). So that tells us that the intersected domain basis <math>B_1∩B_2</math> is 2.9.11. | ||
Now we change the domain basis for each mapping to <math>B_1∩B_2</math>. Let's do 22-ET first. First we need to find our basis change matrix <math>B_{1↔1∩2}</math>: | Now we change the domain basis for each mapping to <math>B_1∩B_2</math>. Let's do 22-ET first. First we need to find our basis change matrix <math>B_{1↔1∩2}</math> : | ||
| Line 1,333: | Line 1,303: | ||
Now we take our mapping <math>M_1</math> and right-multiply it by this <math>B_{1∩2↔1}</math>, just like we would right-multiply it by a list of vectors: | Now we take our mapping <math>M_1</math> and right-multiply it by this <math>B_{1∩2↔1}</math> , just like we would right-multiply it by a list of vectors: | ||
| Line 1,426: | Line 1,396: | ||
Now we find our other <math>B</math>, the one for 17-ET, i.e. <math>B_{2↔1∩2}</math>: | Now we find our other <math>B</math>, the one for 17-ET, i.e. <math>B_{2↔1∩2}</math> : | ||
| Line 1,597: | Line 1,567: | ||
= Footnotes = | = Footnotes = | ||
<references group="note" /> | |||
<references/> | |||
[[Category:Regular temperament theory]] | [[Category:Regular temperament theory]] | ||
[[Category:Terms]] | [[Category:Terms]] | ||
[[Category:Math]] | [[Category:Math]] | ||