Generator embedding optimization/Alternative complexities
This chapter shows how each method of generator embedding optimization is used with complexities other than log-product complexity.
Pseudoinverse method
The following examples all pick up from a shared setup here: Dave Keenan & Douglas Blumeyer's guide to RTT/Alternative complexities#Computing all-interval tuning schemes with alternative complexities.
For all complexities used here (well again at least the first several more basic ones), our formula will be:
[math]\displaystyle{
G = S_{\text{p}}(MS_{\text{p}})^{+} = S_{\text{p}}(MS_{\text{p}})^\mathsf{T}(MS_{\text{p}}(MS_{\text{p}})^\mathsf{T})^{-1}
}[/math]
Minimax-E-S
This example specifically picks up from the setup laid out here: Dave Keenan & Douglas Blumeyer's guide to RTT/Alternative complexities#Log-product2. Plugging [math]\displaystyle{ L^{-1} }[/math] into our pseudoinverse method for [math]\displaystyle{ S_{\text{p}} }[/math] we find:
[math]\displaystyle{
G = L^{-1}(ML^{-1})^\mathsf{T}(ML^{-1}(ML^{-1})^\mathsf{T})^{-1}
}[/math]
We already have computed [math]\displaystyle{ ML^{-1} }[/math], so plug that in a few times, two of them transposed:
[math]\displaystyle{
G =
\begin{array}{c}
L^{-1} \\
\left[ \begin{array} {r}
\frac{1}{\log_2(2)} & 0 & 0 \\
0 & \frac{1}{\log_2(3)} & 0 \\
0 & 0 & \frac{1}{\log_2(5)} \\
\end{array} \right]
\end{array}
\begin{array}{c}
(ML^{-1})^\mathsf{T} \\
\left[ \begin{array} {r}
\frac{1}{\log_2(2)} & 0 \\
\frac{2}{\log_2(3)} & \frac{-3}{\log_2(3)} \\
\frac{3}{\log_2(5)} & \frac{-5}{\log_2(5)} \\
\end{array} \right]
\end{array}
\Huge ( \normalsize
\begin{array}{c}
ML^{-1} \\
\left[ \begin{array} {r}
\frac{1}{\log_2(2)} & \frac{2}{\log_2(3)} & \frac{3}{\log_2(5)} \\
0 & \frac{-3}{\log_2(3)} & \frac{-5}{\log_2(5)} \\
\end{array} \right]
\end{array}
\begin{array}{c}
(ML^{-1})^\mathsf{T} \\
\left[ \begin{array} {r}
\frac{1}{\log_2(2)} & 0 \\
\frac{2}{\log_2(3)} & \frac{-3}{\log_2(3)} \\
\frac{3}{\log_2(5)} & \frac{-5}{\log_2(5)} \\
\end{array} \right]
\end{array}
\Huge )^{\Large -1} \normalsize
}[/math]
Work that out and you get (at this point we'll convert to decimal form):
[math]\displaystyle{
G =
\left[ \begin{array} {r}
0.991 & 0.623 \\
0.044 & {-0.117} \\
{-0.027} & {-0.129}\\
\end{array} \right]
}[/math]
And when you multiply that by [math]\displaystyle{ 𝒋 }[/math], we get the generator tuning map [math]\displaystyle{ 𝒈 }[/math] for the minimax-ES tuning of porcupine, ⟨1199.562 163.891].
This too can be computed easily with the Wolfram Library:
In: optimizeGeneratorTuningMap["[⟨1 2 3] ⟨0 -3 -5]]", "minimax-ES"]
Out: {1199.562 163.891]
Minimax-E-sopfr-S
This example specifically picks up from the setup laid out here: Dave Keenan & Douglas Blumeyer's guide to RTT/Alternative complexities#Sum-of-prime-factors-with-repetition2. Plugging [math]\displaystyle{ \text{diag}(𝒑)^{-1} }[/math] into our pseudoinverse method for [math]\displaystyle{ S_{\text{p}} }[/math] we find:
[math]\displaystyle{
G = \text{diag}(𝒑)^{-1}(M\text{diag}(𝒑)^{-1})^\mathsf{T}(M\text{diag}(𝒑)^{-1}(M\text{diag}(𝒑)^{-1})^\mathsf{T})^{-1}
}[/math]
We already have [math]\displaystyle{ M\text{diag}(𝒑)^{-1} }[/math] computed, so we plug that in a few times, two of them transposed:
[math]\displaystyle{
G =
\begin{array}{c}
\text{diag}(𝒑)^{-1} \\
\left[ \begin{array} {r}
\frac{1}{2} & 0 & 0 \\
0 & \frac{1}{3} & 0 \\
0 & 0 & \frac{1}{5} \\
\end{array} \right]
\end{array}
\begin{array}{c}
(M\text{diag}(𝒑)^{-1})^\mathsf{T} \\
\left[ \begin{array} {r}
\frac{1}{2} & 0 \\
\frac{2}{3} & \frac{-3}{3} \\
\frac{3}{5} & \frac{-5}{5} \\
\end{array} \right]
\end{array}
\Huge ( \normalsize
\begin{array}{c}
M\text{diag}(𝒑)^{-1} \\
\left[ \begin{array} {r}
\frac{1}{2} & \frac{2}{3} & \frac{3}{5} \\
0 & \frac{-3}{3} & \frac{-5}{5} \\
\end{array} \right]
\end{array}
\begin{array}{c}
(M\text{diag}(𝒑)^{-1})^\mathsf{T} \\
\left[ \begin{array} {r}
\frac{1}{2} & 0 \\
\frac{2}{3} & \frac{-3}{3} \\
\frac{3}{5} & \frac{-5}{5} \\
\end{array} \right]
\end{array}
\Huge )^{\Large -1} \normalsize
}[/math]
Work that out and you get :
[math]\displaystyle{
G =
\left[ \begin{array} {r}
\frac{225}{227} & \frac{285}{454} \\
\frac{10}{227} & \frac{-63}{454} \\
\frac{-6}{227} & \frac{-53}{454} \\
\end{array} \right]
}[/math]
And when you multiply that by [math]\displaystyle{ 𝒋 }[/math], we get the generator tuning map [math]\displaystyle{ 𝒈 }[/math] for the minimax-E-sofpr-S tuning of porcupine, ⟨1199.567 164.102].
This too can be computed easily with the Wolfram Library:
In: optimizeGeneratorTuningMap["[⟨1 2 3] ⟨0 -3 -5]]", "minimax-E-sopfr-S"]
Out: {1199.567 164.102]
Minimax-E-copfr-S
This example specifically picks up from the setup laid out here: Dave Keenan & Douglas Blumeyer's guide to RTT/Alternative complexities#Count-of-prime-factors-with-repetition2. Plugging [math]\displaystyle{ I }[/math] into our pseudoinverse method for [math]\displaystyle{ S_{\text{p}} }[/math] we find:
[math]\displaystyle{
G = I(MI)^\mathsf{T}(MI(MI)^\mathsf{T})^{-1} = M^\mathsf{T}(MM^\mathsf{T})^{-1} = M^{+}
}[/math]
That's right: our answer is simply the pseudoinverse of the mapping.
[math]\displaystyle{
G =
\begin{array}{c}
M^\mathsf{T} \\
\left[ \begin{array} {r}
1 & 0 \\
2 & {-3} \\
3 & {-5} \\
\end{array} \right]
\end{array}
\Huge ( \normalsize
\begin{array}{c}
M \\
\left[ \begin{array} {r}
1 & 2 & 3 \\
0 & {-3} & {-5} \\
\end{array} \right]
\end{array}
\begin{array}{c}
M^\mathsf{T} \\
\left[ \begin{array} {r}
1 & 0 \\
2 & {-3} \\
3 & {-5} \\
\end{array} \right]
\end{array}
\Huge )^{\Large -1} \normalsize
}[/math]
Work that out and you get:
[math]\displaystyle{
G =
\left[ \begin{array} {r}
\frac{34}{35} & \frac{3}{5} \\
\frac{1}{7} & 0 \\
\frac{-3}{35} & \frac{-1}{5} \\
\end{array} \right]
}[/math]
And when you multiply that by [math]\displaystyle{ 𝒋 }[/math], we get the generator tuning map [math]\displaystyle{ 𝒈 }[/math] for the minimax-ES tuning of porcupine, ⟨1198.595 162.737].
This too can be computed easily with the Wolfram Library:
In: optimizeGeneratorTuningMap["[⟨1 2 3] ⟨0 -3 -5]]", "minimax-E-copfr-S"]
Out: {1198.595 162.737]
Minimax-E-lils-S
This example specifically picks up from the setup laid out here: Dave Keenan & Douglas Blumeyer's guide to RTT/Alternative complexities#Log-integer-limit-squared2.
As for the minimax-E-lils-S tuning, we use the pseudoinverse method, but with the same augmented matrices as discussed for the minimax-lils-S tuning discussed later in this article. Well, we've established our [math]\displaystyle{ MS_{\text{p}} }[/math] equivalent, but we still need an equivalent for [math]\displaystyle{ S_{\text{p}} }[/math] alone. This is [math]\displaystyle{ L^{-1} }[/math], but with an extra 1 before the logs of primes are diagonalized:
[math]\displaystyle{
\begin{array} {c}
\text{equiv. of} \; S_{\text{p}} \\
\left[ \begin{array} {ccc|c}
\frac{1}{\log_2(2)} & 0 & 0 & \style{background-color:#FFF200;padding:5px}{0} \\
0 & \frac{1}{\log_2(3)} & 0 & \style{background-color:#FFF200;padding:5px}{0} \\
0 & 0 & \frac{1}{\log_2(5)} & \style{background-color:#FFF200;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{1} \\
\end{array} \right]
\end{array}
}[/math]
So plugging in to
[math]\displaystyle{
G = S_{\text{p}}(MS_{\text{p}})^\mathsf{T}(MS_{\text{p}}(MS_{\text{p}})^\mathsf{T})^{-1}
}[/math]
We get:
[math]\displaystyle{
G =
\begin{array}{c}
S_{\text{p}} \\
\left[ \begin{array} {r}
\frac{1}{\log_2(2)} & 0 & 0 & \style{background-color:#FFF200;padding:5px}{0} \\
0 & \frac{1}{\log_2(3)} & 0 & \style{background-color:#FFF200;padding:5px}{0} \\
0 & 0 & \frac{1}{\log_2(5)} & \style{background-color:#FFF200;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{1} \\
\end{array} \right]
\end{array}
\begin{array}{c}
(MS_{\text{p}})^\mathsf{T} \\
\left[ \begin{array} {rr|r}
\frac{1}{\log_2(2)} & 0 & \style{background-color:#FFF200;padding:5px}{1} \\
\frac{2}{\log_2(3)} & \frac{-3}{\log_2(3)} & \style{background-color:#FFF200;padding:5px}{1} \\
\frac{3}{\log_2(5)} & \frac{-5}{\log_2(5)} & \style{background-color:#FFF200;padding:5px}{1} \\
\hline
\style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{-1} \\
\end{array} \right]
\end{array}
\Huge ( \normalsize
\begin{array}{c}
MS_{\text{p}} \\
\left[ \begin{array} {r}
\frac{1}{\log_2(2)} & \frac{2}{\log_2(3)} & \frac{3}{\log_2(5)} & \style{background-color:#FFF200;padding:5px}{0} \\
0 & \frac{-3}{\log_2(3)} & \frac{-5}{\log_2(5)} & \style{background-color:#FFF200;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{1} & \style{background-color:#FFF200;padding:5px}{1} & \style{background-color:#FFF200;padding:5px}{1} & \style{background-color:#FFF200;padding:5px}{-1} \\
\end{array} \right]
\end{array}
\begin{array}{c}
(MS_{\text{p}})^\mathsf{T} \\
\left[ \begin{array} {rr|r}
\frac{1}{\log_2(2)} & 0 & \style{background-color:#FFF200;padding:5px}{1} \\
\frac{2}{\log_2(3)} & \frac{-3}{\log_2(3)} & \style{background-color:#FFF200;padding:5px}{1} \\
\frac{3}{\log_2(5)} & \frac{-5}{\log_2(5)} & \style{background-color:#FFF200;padding:5px}{1} \\
\hline
\style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{-1} \\
\end{array} \right]
\end{array}
\Huge )^{\Large -1} \normalsize
}[/math]
Work that out and you get (at this point we'll convert to decimal form):
[math]\displaystyle{
G =
\left[ \begin{array} {rr|r}
0.991 & 0.623 & \style{background-color:#FFF200;padding:5px}{0.000} \\
0.044 & {-0.117} & \style{background-color:#FFF200;padding:5px}{-0.002} \\
{-0.027} & {-0.129} & \style{background-color:#FFF200;padding:5px}{0.001} \\
\hline
\style{background-color:#FFF200;padding:5px}{1.000} & \style{background-color:#FFF200;padding:5px}{0.137} & \style{background-color:#FFF200;padding:5px}{-1.000} \\
\end{array} \right]
}[/math]
(Yet again, compare with the result for minimax-ES; same but augmented.)
And when you multiply that by the augmented version of our [math]\displaystyle{ 𝒋 }[/math], we get the generator tuning map [math]\displaystyle{ 𝒈 }[/math] for the minimax-E-lilS tuning of porcupine, ⟨1199.544 163.888 0.018]. Well, that last entry is only the [math]\displaystyle{ g_{\text{augmented}} }[/math] result, which is junk, so we throw that part away.
This too can be computed easily with the Wolfram Library:
In: optimizeGeneratorTuningMap["[⟨1 2 3] ⟨0 -3 -5]]", "minimax-ES"]
Out: {1199.544 163.888]
Minimax-E-lols-S
This example specifically picks up from the setup laid out here: Dave Keenan & Douglas Blumeyer's guide to RTT/Alternative complexities#Log-odd-limit-squared2. We use the pseudoinverse method, with our same [math]\displaystyle{ MS_{\text{p}} }[/math] and [math]\displaystyle{ S_{\text{p}} }[/math] equivalents as from the minimax-E-lils-S examples:
[math]\displaystyle{
\begin{array}{c}
\text{equiv. of} \; MS_{\text{p}} \\
\left[ \begin{array} {rrr|r}
\frac{1}{\log_2(2)} & \frac{2}{\log_2(3)} & \frac{3}{\log_2(5)} & \style{background-color:#FFF200;padding:5px}{0} \\
0 & \frac{-3}{\log_2(3)} & \frac{-5}{\log_2(5)} & \style{background-color:#FFF200;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{1} & \style{background-color:#FFF200;padding:5px}{1} & \style{background-color:#FFF200;padding:5px}{1} & \style{background-color:#FFF200;padding:5px}{-1} \\
\end{array} \right]
\end{array}
}[/math]
[math]\displaystyle{
\begin{array} {c}
\text{equiv. of} \; S_{\text{p}} \\
\left[ \begin{array} {ccc|c}
\frac{1}{\log_2(2)} & 0 & 0 & \style{background-color:#FFF200;padding:5px}{0} \\
0 & \frac{1}{\log_2(3)} & 0 & \style{background-color:#FFF200;padding:5px}{0} \\
0 & 0 & \frac{1}{\log_2(5)} & \style{background-color:#FFF200;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{1} \\
\end{array} \right]
\end{array}
}[/math]
And we have our [math]\displaystyle{ \mathrm{U} }[/math] = [1 0 0⟩, being the octave, but it's augmented to [1 0 0⟩, that last entry being its size. So this whole thing is blue on account of having to do with the held-interval augmentation, but its last entry is green because it's also yellow from the lils augmentation:
[math]\displaystyle{
\begin{array} {c}
\mathrm{U} \\
\left[ \begin{array} {c}
\style{background-color:#00AEEF;padding:5px}{1} \\
\style{background-color:#00AEEF;padding:5px}{0} \\
\style{background-color:#00AEEF;padding:5px}{0} \\
\style{background-color:#8DC73E;padding:5px}{1} \\
\end{array} \right]
\end{array}
}[/math]
And so our [math]\displaystyle{ M\mathrm{U} }[/math] we can think of as our held-interval having been mapped. For this we must ask ourselves "what is [math]\displaystyle{ M }[/math]"? We know what [math]\displaystyle{ MS_{\text{p}} }[/math] is but not really [math]\displaystyle{ M }[/math] itself, i.e. in terms of its augmentation status. So, the present author is not sure, but is going with this: [1 0 0⟩ would normally map to [1 0} in this temperament, and the third entry it needs to fit into the block matrices we're about to build would be mapped by the mapping's junk row, so why not just make it 0. So that gives us:
[math]\displaystyle{
\begin{array} {c}
M\mathrm{U} \\
\left[ \begin{array} {c}
\style{background-color:#00AEEF;padding:5px}{1} \\
\style{background-color:#00AEEF;padding:5px}{0} \\
\style{background-color:#8DC73E;padding:5px}{0} \\
\end{array} \right]
\end{array}
}[/math]
Ah, and [math]\displaystyle{ 𝒋 }[/math] is augmented with a 0 for the lils-stuff that is just junk. Might as well:
[math]\displaystyle{
\begin{array} {c}
𝒋 \\
\left[ \begin{array} {cccc}
1200 & 1901.955 & 2786.314 & \style{background-color:#FFF200;padding:5px}{0} \\
\end{array} \right]
\end{array}
}[/math]
Now we need to plug this into the variation on the pseudoinverse formula that accounts for held-intervals:
[math]\displaystyle{
\left[ \begin{array} {cc|c|c}
g_1 & g_2 & \style{background-color:#FFF200;padding:5px}{g_{\text{augmented}}} & \style{background-color:#00AEEF;padding:5px}{λ_1} \\
\end{array} \right]
=
𝒋
\left[ \begin{array} {c|c}
S_{\text{p}}(MS_{\text{p}})^\mathsf{T} & \style{background-color:#00AEEF;padding:5px}{U} \\
\end{array} \right]
\left[ \begin{array} {c|c}
\\
MS_{\text{p}}(MS_{\text{p}})^\mathsf{T} & \style{background-color:#00AEEF;padding:5px}{𝑀U} \\
\hline
\quad \style{background-color:#00AEEF;padding:5px}{(𝑀U)}^\mathsf{T} \quad & \style{background-color:#00AEEF;padding:5px}{0} \\
\end{array} \right]^{\large -1}
}[/math]
So let's just start plugging in!
[math]\displaystyle{
\small
\left[ \begin{array} {cc|c|c}
g_1 & g_2 & \style{background-color:#FFF200;padding:5px}{g_{\text{augmented}}} & \style{background-color:#00AEEF;padding:5px}{λ_1} \\
\end{array} \right]
=
\begin{array} {c}
𝒋 \\
\left[ \begin{array} {c}
1200 & 1901.955 & 2786.314 & \style{background-color:#FFF200;padding:5px}{0} \\
\end{array} \right]
\end{array}
\left[ \begin{array} {c|c}
\begin{array} {c}
\text{equiv. of} \; S_{\text{p}} \\
\left[ \begin{array} {ccc|c}
\frac{1}{\log_2(2)} & 0 & 0 & \style{background-color:#FFF200;padding:5px}{0} \\
0 & \frac{1}{\log_2(3)} & 0 & \style{background-color:#FFF200;padding:5px}{0} \\
0 & 0 & \frac{1}{\log_2(5)} & \style{background-color:#FFF200;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{1} \\
\end{array} \right]
\end{array}
\begin{array}{c}
(MS_{\text{p}})^\mathsf{T} \\
\left[ \begin{array} {rr|r}
\frac{1}{\log_2(2)} & 0 & \style{background-color:#FFF200;padding:5px}{1} \\
\frac{2}{\log_2(3)} & \frac{-3}{\log_2(3)} & \style{background-color:#FFF200;padding:5px}{1} \\
\frac{3}{\log_2(5)} & \frac{-5}{\log_2(5)} & \style{background-color:#FFF200;padding:5px}{1} \\
\hline
\style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{-1} \\
\end{array} \right]
\end{array}
&
\begin{array} {c}
\mathrm{U} \\
\left[ \begin{array} {c}
\style{background-color:#00AEEF;padding:5px}{1} \\
\style{background-color:#00AEEF;padding:5px}{0} \\
\style{background-color:#00AEEF;padding:5px}{0} \\
\style{background-color:#8DC73E;padding:5px}{1} \\
\end{array} \right]
\end{array}
\\
\end{array} \right]
\left[ \begin{array} {c|c}
\\
\begin{array}{c}
\text{equiv. of} \; MS_{\text{p}} \\
\left[ \begin{array} {rrr|r}
\frac{1}{\log_2(2)} & \frac{2}{\log_2(3)} & \frac{3}{\log_2(5)} & \style{background-color:#FFF200;padding:5px}{0} \\
0 & \frac{-3}{\log_2(3)} & \frac{-5}{\log_2(5)} & \style{background-color:#FFF200;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{1} & \style{background-color:#FFF200;padding:5px}{1} & \style{background-color:#FFF200;padding:5px}{1} & \style{background-color:#FFF200;padding:5px}{-1} \\
\end{array} \right]
\end{array}
\begin{array}{c}
(MS_{\text{p}})^\mathsf{T} \\
\left[ \begin{array} {rr|r}
\frac{1}{\log_2(2)} & 0 & \style{background-color:#FFF200;padding:5px}{1} \\
\frac{2}{\log_2(3)} & \frac{-3}{\log_2(3)} & \style{background-color:#FFF200;padding:5px}{1} \\
\frac{3}{\log_2(5)} & \frac{-5}{\log_2(5)} & \style{background-color:#FFF200;padding:5px}{1} \\
\hline
\style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{-1} \\
\end{array} \right]
\end{array}
&
\begin{array} {c}
M\mathrm{U} \\
\left[ \begin{array} {c}
\style{background-color:#00AEEF;padding:5px}{1} \\
\style{background-color:#00AEEF;padding:5px}{0} \\
\style{background-color:#8DC73E;padding:5px}{0} \\
\end{array} \right]
\end{array}
\\
\hline
\begin{array}{c}
(M\mathrm{U})^\mathsf{T} \\
\left[ \begin{array} {r}
\style{background-color:#00AEEF;padding:5px}{1} & \style{background-color:#00AEEF;padding:5px}{0} & \style{background-color:#8DC73E;padding:5px}{0} \\
\end{array} \right]
\end{array}
& \style{background-color:#00AEEF;padding:5px}{0} \\
\end{array} \right]^{\large -1}
}[/math]
Now if you crunch all that on the right, you get ⟨1200 164.062 -0.211 -0.229]. So we can throw away both the lambda that helped us hold our octave unchanged, and then the augmented generator that helped us account for the size of our intervals. So we're left with our held-octave minimax-E-lils-S tuning.
This too can be computed by the Wolfram Library:
In: optimizeGeneratorTuningMap["[⟨1 2 3] ⟨0 -3 -5]]", "held-octave minimax-E-lils-S"]
Out: {1200 164.062]
Zero-damage method
No examples will be given here, on account of the lack of popularity of these tunings.
Coinciding-damage method
The following examples all pick up from a shared setup here: Dave Keenan & Douglas Blumeyer's guide to RTT/Alternative complexities#Computing all-interval tuning schemes with alternative complexities.
So for all complexities used here—at least the first several simpler examples—our constraint matrices will be:
[math]\displaystyle{
\left[ \begin{array} {rrr}
+1 & +1 \\
+1 & 0 \\
0 & +1 \\
\end{array} \right]
, \\
\left[ \begin{array} {rrr}
+1 & +1 \\
+1 & 0 \\
0 & -1 \\
\end{array} \right]
, \\
\left[ \begin{array} {rrr}
+1 & +1 \\
-1 & 0 \\
0 & +1 \\
\end{array} \right]
, \\
\left[ \begin{array} {rrr}
+1 & +1 \\
-1 & 0 \\
0 & -1 \\
\end{array} \right]
}[/math]
Minimax-S
This example specifically picks up from the setup laid out here: Dave Keenan & Douglas Blumeyer's guide to RTT/Alternative complexities#Log-product2, by plugging [math]\displaystyle{ L^{-1} }[/math] into our pseudoinverse method for [math]\displaystyle{ S_{\text{p}} }[/math].
[math]\displaystyle{ % \slant{} command approximates italics to allow slanted bold characters, including digits, in MathJax. \def\slant#1{\style{display:inline-block;margin:-.05em;transform:skew(-14deg)translateX(.03em)}{#1}} }[/math] Now we need to find the tunings corresponding to our series of constraint matrices [math]\displaystyle{ K }[/math]. Those constraint matrices apply to both sides of the approximation [math]\displaystyle{ GM\mathrm{T}_{\text{p}}S_{\text{p}} \approx \mathrm{T}_{\text{p}}S_{\text{p}} }[/math], or simplified, [math]\displaystyle{ GMS_{\text{p}} \approx S_{\text{p}} }[/math]. So first we find [math]\displaystyle{ MS_{\text{p}} = ML^{-1} = }[/math] [⟨[math]\displaystyle{ \frac{1}{\log_2(2)} }[/math] [math]\displaystyle{ \frac{2}{\log_2(3)} }[/math] [math]\displaystyle{ \frac{3}{\log_2(5)} }[/math]] ⟨[math]\displaystyle{ \frac{0}{\log_2(2)} }[/math] [math]\displaystyle{ \frac{-3}{\log_2(3)} }[/math] [math]\displaystyle{ \frac{-5}{\log_2(5)} }[/math]]}. And then we find [math]\displaystyle{ S_{\text{p}} = L^{-1} = \text{diag}(\left[ \begin{array} {r} \frac{1}{\log_2(2)} & \frac{1}{\log_2(3)} & \frac{1}{\log_2(5)} \end{array} \right]) }[/math].
So here's our first constraint matrix:
[math]\displaystyle{
\begin{array} {c}
K \\
\left[ \begin{array} {rrr}
+1 & +1 \\
+1 & 0 \\
0 & +1 \\
\end{array} \right]
\end{array}
}[/math]
Applying the constraint to get an equality:
[math]\displaystyle{
\begin{array} {c}
G \\
\left[ \begin{array} {rrr}
g_{11} & g_{12} \\
g_{21} & g_{22} \\
g_{31} & g_{32} \\
\end{array} \right]
\end{array}
\begin{array} {c}
ML^{-1} \\
\left[ \begin{array} {rrr}
\frac{1}{\log_2(2)} & \frac{2}{\log_2(3)} & \frac{3}{\log_2(5)} \\
\frac{0}{\log_2(2)} & \frac{-3}{\log_2(3)} & \frac{-5}{\log_2(5)} \\
\end{array} \right]
\end{array}
\begin{array} {c}
K \\
\left[ \begin{array} {rrr}
+1 & +1 \\
+1 & 0 \\
0 & +1 \\
\end{array} \right]
\end{array}
=
\begin{array} {c}
L^{-1} \\
\left[ \begin{array} {rrr}
\frac{1}{\log_2(2)} & 0 & 0 \\
0 & \frac{1}{\log_2(3)} & 0 \\
0 & 0 & \frac{1}{\log_2(5)} \\
\end{array} \right]
\end{array}
\begin{array} {c}
K \\
\left[ \begin{array} {rrr}
+1 & +1 \\
+1 & 0 \\
0 & +1 \\
\end{array} \right]
\end{array}
}[/math]
Multiply:
[math]\displaystyle{
\begin{array} {c}
G \\
\left[ \begin{array} {rrr}
g_{11} & g_{12} \\
g_{21} & g_{22} \\
g_{31} & g_{32} \\
\end{array} \right]
\end{array}
\begin{array} {c}
ML^{-1}K \\
\left[ \begin{array} {rrr}
1+\frac{2}{\log_2(3)} & 1+\frac{3}{\log_2(5)} \\
\frac{-3}{\log_2(3)} & \frac{5}{\log_2(5)} \\
\end{array} \right]
\end{array}
=
\begin{array} {c}
L^{-1}K \\
\left[ \begin{array} {rrr}
\frac{1}{\log_2(2)} & \frac{1}{\log_2(2)} \\
\frac{1}{\log_2(3)} & 0 \\
0 & \frac{1}{\log_2(5)}\\
\end{array} \right]
\end{array}
}[/math]
Solve for [math]\displaystyle{ G }[/math]:
[math]\displaystyle{
\begin{array} {c}
G \\
\left[ \begin{array} {rrr}
g_{11} & g_{12} \\
g_{21} & g_{22} \\
g_{31} & g_{32} \\
\end{array} \right]
\end{array}
=
\begin{array} {c}
L^{-1}K \\
\left[ \begin{array} {rrr}
\frac{1}{\log_2(2)} & \frac{1}{\log_2(2)} \\
\frac{1}{\log_2(3)} & 0 \\
0 & \frac{1}{\log_2(5)}\\
\end{array} \right]
\end{array}
\begin{array} {c}
(ML^{-1}K)^{-1} \\
\left[ \begin{array} {rrr}
\frac{-5}{\log_2(5)} & {-1}-\frac{3}{\log_2(5)} \\
\frac{3}{\log_2(3)} & 1+\frac{2}{\log_2(3)} \\
\end{array} \right] \\
\hline
(\frac{3}{\log_2(3)} - \frac{5}{\log_2(5)} - \frac{1}{\log_2(3)\log_2(5)})
\end{array}
=
\begin{array} {c}
\\
\left[ \begin{array} {rrr}
0.490 & 0.0567 \\
2.552 & 2.717 \\
-1.531 & -1.830 \\
\end{array} \right]
\end{array}
}[/math]
From that we can find [math]\displaystyle{ 𝒈 = 𝒋G }[/math] to get [math]\displaystyle{ g_1 = 1174.903 }[/math] and [math]\displaystyle{ g_2 = 136.024 }[/math].
Sure, that looks like a horrible tuning; it only minimizes the maximum damage across all intervals to about 25 ¢(S)! But don't worry yet. This is all part of the process. We've only checked our first of four constraint matrices. Certainly one of the other three will lead to a better candidate tuning. We won't work through these examples in detail; one illustrative example should be enough.
Indeed we find that the second one to be [math]\displaystyle{ 𝒈 = }[/math] {1196.906 162.318] dealing only 3 ¢(S) maximum damage. And the third [math]\displaystyle{ K }[/math] leads to {1203.540 166.505] which also deals just over 3 ¢(S) maximum damage. The fourth [math]\displaystyle{ K }[/math] is a dud, sending the tuning to {0 0], dealing a whopping 1200 ¢(S) maximum damage.
And so the minimax-S tuning of this temperament is {1196.906 162.318]. We could compute this in the RTT Library in Wolfram Language with the following line of code:
In: optimizeGeneratorTuningMap["[⟨1 2 3] ⟨0 -3 -5]]", "minimax-S"]
Out: {1196.906 162.318]
Minimax-sopfr-S
This example specifically picks up from the setup laid out here: Dave Keenan & Douglas Blumeyer's guide to RTT/Alternative complexities#Sum-of-prime-factors-with-repetition2. Plugging [math]\displaystyle{ \text{diag}(𝒑)^{-1} }[/math] in for [math]\displaystyle{ S_{\text{p}} }[/math].
Now we need to find the tunings corresponding to our series of constraint matrices [math]\displaystyle{ K }[/math]. Those constraint matrices apply to both sides of the approximation [math]\displaystyle{ GM\mathrm{T}_{\text{p}}S_{\text{p}} \approx \mathrm{T}_{\text{p}}S_{\text{p}} }[/math], or simplified, [math]\displaystyle{ GMS_{\text{p}} \approx S_{\text{p}} }[/math]. So first we find [math]\displaystyle{ MS_{\text{p}} = M\text{diag}(𝒑)^{-1} = }[/math] [⟨[math]\displaystyle{ \frac{1}{2} }[/math] [math]\displaystyle{ \frac{2}{3} }[/math] [math]\displaystyle{ \frac{3}{5} }[/math]] ⟨[math]\displaystyle{ \frac{0}{2} }[/math] [math]\displaystyle{ \frac{-3}{3} }[/math] [math]\displaystyle{ \frac{-5}{5} }[/math]]}. And then we find [math]\displaystyle{ S_{\text{p}} = \text{diag}(𝒑)^{-1} = \text{diag}(\left[ \begin{array} {r} \frac12 & \frac13 & \frac15 \end{array} \right]) }[/math].
So here's our first constraint matrix:
[math]\displaystyle{
\begin{array} {c}
K \\
\left[ \begin{array} {rrr}
+1 & +1 \\
+1 & 0 \\
0 & +1 \\
\end{array} \right]
\end{array}
}[/math]
Applying the constraint to get an equality:
[math]\displaystyle{
\begin{array} {c}
G \\
\left[ \begin{array} {rrr}
g_{11} & g_{12} \\
g_{21} & g_{22} \\
g_{31} & g_{32} \\
\end{array} \right]
\end{array}
\begin{array} {c}
M\text{diag}(𝒑)^{-1} \\
\left[ \begin{array} {rrr}
\frac12 & \frac23 & \frac35 \\
\frac02 & \frac{-3}{3} & \frac{-5}{5} \\
\end{array} \right]
\end{array}
\begin{array} {c}
K \\
\left[ \begin{array} {rrr}
+1 & +1 \\
+1 & 0 \\
0 & +1 \\
\end{array} \right]
\end{array}
=
\begin{array} {c}
\text{diag}(𝒑)^{-1} \\
\left[ \begin{array} {rrr}
\frac12 & 0 & 0 \\
0 & \frac13 & 0 \\
0 & 0 & \frac15 \\
\end{array} \right]
\end{array}
\begin{array} {c}
K \\
\left[ \begin{array} {rrr}
+1 & +1 \\
+1 & 0 \\
0 & +1 \\
\end{array} \right]
\end{array}
}[/math]
Multiply:
[math]\displaystyle{
\begin{array} {c}
G \\
\left[ \begin{array} {rrr}
g_{11} & g_{12} \\
g_{21} & g_{22} \\
g_{31} & g_{32} \\
\end{array} \right]
\end{array}
\begin{array} {c}
M\text{diag}(𝒑)^{-1}K \\
\left[ \begin{array} {rrr}
\frac76 & \frac{11}{10} \\
{-1} & {-1} \\
\end{array} \right]
\end{array}
=
\begin{array} {c}
\text{diag}(𝒑)^{-1}K \\
\left[ \begin{array} {rrr}
\frac12 & \frac12 \\
\frac13 & 0 \\
0 & \frac15 \\
\end{array} \right]
\end{array}
}[/math]
Solve for [math]\displaystyle{ G }[/math]:
[math]\displaystyle{
\begin{array} {c}
G \\
\left[ \begin{array} {rrr}
g_{11} & g_{12} \\
g_{21} & g_{22} \\
g_{31} & g_{32} \\
\end{array} \right]
\end{array}
=
\begin{array} {c}
\text{diag}(𝒑)^{-1}K \\
\left[ \begin{array} {rrr}
\frac12 & \frac12 \\
\frac13 & 0 \\
0 & \frac15 \\
\end{array} \right]
\end{array}
\begin{array} {c}
(M\text{diag}(𝒑)^{-1}K)^{-1} \\
\left[ \begin{array} {rrr}
15 & \frac{33}{2} \\
{-15} & {-\frac{35}{2}} \\
\end{array} \right] \\
\end{array}
=
\begin{array} {c}
\\
\left[ \begin{array} {rrr}
0 & {-\frac{1}{2}} \\
5 & \frac{11}{2} \\
-3 & {-\frac{7}{2}} \\
\end{array} \right]
\end{array}
}[/math]
Note the tempered octave is exactly [math]\displaystyle{ 3^{5}5^{-3} = \frac{243}{125} }[/math]! That sounds cool, but it's actually an entire quartertone narrow. We find [math]\displaystyle{ g_1 = 1150.834 }[/math] and [math]\displaystyle{ g_2 = 108.655 }[/math]. Again, that looks like a horrible tuning; this first constraint matrix is beginning to seem so hot for tuning porcupine temperament, irrespective of our choice of complexity.
But again that the second candidate tuning to be much nicer, with [math]\displaystyle{ 𝒈 = }[/math] {1196.927 162.430] dealing only about 1.5 ¢(S) maximum damage. And the third [math]\displaystyle{ K }[/math] leads to {1203.512 166.600] which also deals about 1.8 ¢(S) maximum damage. The fourth [math]\displaystyle{ K }[/math] is a dud, giving {1150.834 157.821], dealing a whopping 25 ¢(S) maximum damage.
And so the minimax-sopfr-S tuning of this temperament is {1196.927 162.430]. We could compute this in the RTT Library in Wolfram Language with the following line of code:
In: optimizeGeneratorTuningMap["[⟨1 2 3] ⟨0 -3 -5]]", "minimax-sopfr-S"]
Out: {1196.927 162.430]
Minimax-copfr-S
This example specifically picks up from the setup laid out here: Dave Keenan & Douglas Blumeyer's guide to RTT/Alternative complexities#Count-of-prime-factors-with-repetition2. Plugging [math]\displaystyle{ I }[/math] into our pseudoinverse method for [math]\displaystyle{ S_{\text{p}} }[/math].
Now we need to find the tunings corresponding to our series of constraint matrices [math]\displaystyle{ K }[/math]. Those constraint matrices apply to both sides of the approximation [math]\displaystyle{ GM\mathrm{T}_{\text{p}}S_{\text{p}} \approx \mathrm{T}_{\text{p}}S_{\text{p}} }[/math], or simplified, [math]\displaystyle{ GMS_{\text{p}} \approx S_{\text{p}} }[/math]. So first we find [math]\displaystyle{ MS_{\text{p}} = M = }[/math] [⟨1 2 3] ⟨0 -3 -5]}. And then we find [math]\displaystyle{ S_{\text{p}} = I }[/math].
So here's our first constraint matrix:
[math]\displaystyle{
\begin{array} {c}
K \\
\left[ \begin{array} {rrr}
+1 & +1 \\
+1 & 0 \\
0 & +1 \\
\end{array} \right]
\end{array}
}[/math]
Applying the constraint to get an equality:
[math]\displaystyle{
\begin{array} {c}
G \\
\left[ \begin{array} {rrr}
g_{11} & g_{12} \\
g_{21} & g_{22} \\
g_{31} & g_{32} \\
\end{array} \right]
\end{array}
\begin{array} {c}
M \\
\left[ \begin{array} {rrr}
1 & 2 & 3 \\
0 & {-3} & {-5} \\
\end{array} \right]
\end{array}
\begin{array} {c}
K \\
\left[ \begin{array} {rrr}
+1 & +1 \\
+1 & 0 \\
0 & +1 \\
\end{array} \right]
\end{array}
=
\begin{array} {c}
I \\
\left[ \begin{array} {rrr}
1 & 0 & 0 \\
0 & 1 & 0 \\
0 & 0 & 1 \\
\end{array} \right]
\end{array}
\begin{array} {c}
K \\
\left[ \begin{array} {rrr}
+1 & +1 \\
+1 & 0 \\
0 & +1 \\
\end{array} \right]
\end{array}
}[/math]
Multiply:
[math]\displaystyle{
\begin{array} {c}
G \\
\left[ \begin{array} {rrr}
g_{11} & g_{12} \\
g_{21} & g_{22} \\
g_{31} & g_{32} \\
\end{array} \right]
\end{array}
\begin{array} {c}
MK \\
\left[ \begin{array} {rrr}
3 & 4 \\
{-3} & {-5} \\
\end{array} \right]
\end{array}
=
\begin{array} {c}
IK \\
\left[ \begin{array} {rrr}
1 & 1 \\
1 & 0 \\
0 & 1 \\
\end{array} \right]
\end{array}
}[/math]
Solve for [math]\displaystyle{ G }[/math]:
[math]\displaystyle{
\begin{array} {c}
G \\
\left[ \begin{array} {rrr}
g_{11} & g_{12} \\
g_{21} & g_{22} \\
g_{31} & g_{32} \\
\end{array} \right]
\end{array}
=
\begin{array} {c}
K \\
\left[ \begin{array} {rrr}
1 & 1 \\
1 & 0 \\
0 & 1 \\
\end{array} \right]
\end{array}
\begin{array} {c}
(MK)^{-1} \\
\left[ \begin{array} {rrr}
\frac53 & \frac43 \\
{-1} & {-1} \\
\end{array} \right]
\end{array}
=
\begin{array} {c}
\\
\dfrac13
\left[ \begin{array} {rrr}
2 & 1 \\
5 & 4 \\
{-3} & {-3} \\
\end{array} \right]
\end{array}
}[/math]
So that's a tempered octave equal to [math]\displaystyle{ 2^{\frac23}3^{\frac53}5^{-\frac33} = \sqrt[3]{\frac{972}{125}} }[/math]. Interesting, perhaps. But we find [math]\displaystyle{ g_1 = 1183.611 }[/math] and [math]\displaystyle{ g_2 = 149.626 }[/math]. You know the drill by now. This one's a horrible tuning. It does 16 ¢(S) damage.
The second constraint gives [math]\displaystyle{ 𝒈 = }[/math] {1194.537 160.552] dealing only 5 ¢(S) maximum damage. And the third [math]\displaystyle{ K }[/math] leads to {1207.024 168.356] which also deals just over 7 ¢(S) maximum damage. The fourth [math]\displaystyle{ K }[/math] is a dud, sending the tuning to {1249.166 182.404], dealing nearly 50 ¢(S) maximum damage.
And so the minimax-copfr-S tuning of this temperament is {1194.537 160.552]. We could compute this in the RTT Library in Wolfram Language with the following line of code:
In: optimizeGeneratorTuningMap["[⟨1 2 3] ⟨0 -3 -5]]", "minimax-copfr-S"]
Out: {1194.537 160.552]
In the case of minimax-copfr-S with nullity-1 (only one comma) like this, we actually have a shortcut. First, take the size of the comma in cents, and divide it by its total count of primes. The porcupine comma is [math]\displaystyle{ \frac{250}{243} }[/math], or in vector form [1 -5 3⟩, and so it has |1| + |-5| + |3| = 9 total primes. And being 49.166 ¢ in size, that gives us [math]\displaystyle{ \frac{49.166}{9} = 5.463 }[/math]. What's this number for? That's the amount of cents to retune each prime by! If the count of a prime in the comma is positive, we tune narrow by that much, and if negative, we tune wide. So the map for the minimax-copfr-S tuning of porcupine is [math]\displaystyle{ 𝒕 }[/math] = ⟨1200 1901.955 2786.314] + ⟨-5.463 5.463 -5.463] = ⟨1194.537 1907.418 2780.851]. If you're not convinced this matches the [math]\displaystyle{ 𝒈 }[/math] we found the long way, feel free to check via [math]\displaystyle{ 𝒕 = 𝒈M }[/math].
Minimax-lils-S
This example specifically picks up from the setup laid out here: Dave Keenan & Douglas Blumeyer's guide to RTT/Alternative complexities#Log-integer-limit-squared2.
Now we need to find the tunings corresponding to our series of constraint matrices [math]\displaystyle{ K }[/math]. Those constraint matrices apply to both sides of the approximation [math]\displaystyle{ GM\mathrm{T}_{\text{p}}S_{\text{p}} \approx \mathrm{T}_{\text{p}}S_{\text{p}} }[/math], or simplified, [math]\displaystyle{ GMS_{\text{p}} \approx S_{\text{p}} }[/math], or equivalent thereof. So first we find [math]\displaystyle{ M\mathrm{T}_{\text{p}}S_{\text{p}} }[/math]. According to Mike's augmentation pattern[note 1], we get:
[math]\displaystyle{
\left[ \begin{array} {rrr|r}
\frac{1}{\log_2(2)} & \frac{2}{\log_2(3)} & \frac{3}{\log_2(5)} & \style{background-color:#FFF200;padding:5px}{0} \\
0 & \frac{-3}{\log_2(3)} & \frac{-5}{\log_2(5)} & \style{background-color:#FFF200;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{1} & \style{background-color:#FFF200;padding:5px}{1} & \style{background-color:#FFF200;padding:5px}{1} & \style{background-color:#FFF200;padding:5px}{-1} \\
\end{array} \right]
}[/math]
(Compare with the result for minimax-S, the same but without the augmentations.)
And then we find [math]\displaystyle{ S_{\text{p}} }[/math] or equivalent thereof. It's an augmentation of [math]\displaystyle{ L^{-1} }[/math]:
[math]\displaystyle{
\left[ \begin{array} {rrr|r}
\frac{1}{\log_2(2)} & 0 & 0 & \style{background-color:#FFF200;padding:5px}{0} \\
0 & \frac{1}{\log_2(3)} & 0 & \style{background-color:#FFF200;padding:5px}{0} \\
0 & 0 & \frac{1}{\log_2(5)} & \style{background-color:#FFF200;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{1} \\
\end{array} \right]
}[/math]
This is an extrapolation from Mike's augmentation pattern. It's not actually directly any sort of inverse of the complexity pretransformer. In some sense, that effect has already been built into the augmentation of [math]\displaystyle{ M\mathrm{T}_{\text{p}}S_{\text{p}} }[/math]. (Again, it's the same as minimax-S, but with the augmentation.)
On account of the augmentation, our constraint matrices are a bit different here. Actually, we have twice as many candidate tunings to check this time (if you compare this list with the one given in the opening part of this supersection, the pattern relating them is fairly clear). The extra dimension is treated just like it would be otherwise. Here are all of our [math]\displaystyle{ K }[/math]'s:
[math]\displaystyle{
\left[ \begin{array} {rr|r}
+1 & +1 & \style{background-color:#FFF200;padding:5px}{+1} \\
+1 & 0 & \style{background-color:#FFF200;padding:5px}{0} \\
0 & +1 & \style{background-color:#FFF200;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{+1} \\
\end{array} \right]
, \\
\left[ \begin{array} {rr|r}
+1 & +1 & \style{background-color:#FFF200;padding:5px}{+1} \\
+1 & 0 & \style{background-color:#FFF200;padding:5px}{0} \\
0 & +1 & \style{background-color:#FFF200;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{-1} \\
\end{array} \right]
, \\
\left[ \begin{array} {rr|r}
+1 & +1 & \style{background-color:#FFF200;padding:5px}{+1} \\
+1 & 0 & \style{background-color:#FFF200;padding:5px}{0} \\
0 & -1 & \style{background-color:#FFF200;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{+1} \\
\end{array} \right]
, \\
\left[ \begin{array} {rr|r}
+1 & +1 & \style{background-color:#FFF200;padding:5px}{+1} \\
+1 & 0 & \style{background-color:#FFF200;padding:5px}{0} \\
0 & -1 & \style{background-color:#FFF200;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{-1} \\
\end{array} \right]
, \\
\left[ \begin{array} {rr|r}
+1 & +1 & \style{background-color:#FFF200;padding:5px}{+1} \\
-1 & 0 & \style{background-color:#FFF200;padding:5px}{0} \\
0 & +1 & \style{background-color:#FFF200;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{+1} \\
\end{array} \right]
, \\
\left[ \begin{array} {rr|r}
+1 & +1 & \style{background-color:#FFF200;padding:5px}{+1} \\
-1 & 0 & \style{background-color:#FFF200;padding:5px}{0} \\
0 & +1 & \style{background-color:#FFF200;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{-1} \\
\end{array} \right]
, \\
\left[ \begin{array} {rr|r}
+1 & +1 & \style{background-color:#FFF200;padding:5px}{+1} \\
-1 & 0 & \style{background-color:#FFF200;padding:5px}{0} \\
0 & -1 & \style{background-color:#FFF200;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{+1} \\
\end{array} \right]
, \\
\left[ \begin{array} {rr|r}
+1 & +1 & \style{background-color:#FFF200;padding:5px}{+1} \\
-1 & 0 & \style{background-color:#FFF200;padding:5px}{0} \\
0 & -1 & \style{background-color:#FFF200;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{-1} \\
\end{array} \right]
, \\
}[/math]
So let's just work through one tuning with the first [math]\displaystyle{ K }[/math]. Note that we've also augmented [math]\displaystyle{ G }[/math]. This augmentation is necessary for the computation but will be thrown away once we have our result.
Applying the constraint to get an equality:
[math]\displaystyle{
\scriptsize
\begin{array} {c}
G \\
\left[ \begin{array} {rr|r}
g_{1,1} & g_{1,2} & \style{background-color:#FFF200;padding:5px}{g_{1,\text{aug}}} \\
g_{2,1} & g_{2,2} & \style{background-color:#FFF200;padding:5px}{g_{2,\text{aug}}} \\
g_{3,1} & g_{3,2} & \style{background-color:#FFF200;padding:5px}{g_{3,\text{aug}}} \\
\hline
\style{background-color:#FFF200;padding:5px}{g_{\text{aug},1}} & \style{background-color:#FFF200;padding:5px}{g_{\text{aug},2}} & \style{background-color:#FFF200;padding:5px}{g_{\text{aug},\text{aug}}} \\
\end{array} \right]
\end{array}
\begin{array} {c}
\text{equiv. of} \; MS_{\text{p}} \\
\left[ \begin{array} {rrr|r}
\frac{1}{\log_2(2)} & \frac{2}{\log_2(3)} & \frac{3}{\log_2(5)} & \style{background-color:#FFF200;padding:5px}{0} \\
0 & \frac{-3}{\log_2(3)} & \frac{-5}{\log_2(5)} & \style{background-color:#FFF200;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{1} & \style{background-color:#FFF200;padding:5px}{1} & \style{background-color:#FFF200;padding:5px}{1} & \style{background-color:#FFF200;padding:5px}{-1}
\end{array} \right]
\end{array}
\begin{array} {c}
K \\
\left[ \begin{array} {rr|r}
+1 & +1 & \style{background-color:#FFF200;padding:5px}{+1} \\
+1 & 0 & \style{background-color:#FFF200;padding:5px}{0} \\
0 & +1 & \style{background-color:#FFF200;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{+1} \\
\end{array} \right]
\end{array}
=
\begin{array} {c}
\text{equiv. of} \; S_{\text{p}} \\
\left[ \begin{array} {rrr|r}
\frac{1}{\log_2(2)} & 0 & 0 & \style{background-color:#FFF200;padding:5px}{0} \\
0 & \frac{1}{\log_2(3)} & 0 & \style{background-color:#FFF200;padding:5px}{0} \\
0 & 0 & \frac{1}{\log_2(5)} & \style{background-color:#FFF200;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{1} \\
\end{array} \right]
\end{array}
\begin{array} {c}
K \\
\left[ \begin{array} {rr|r}
+1 & +1 & \style{background-color:#FFF200;padding:5px}{+1} \\
+1 & 0 & \style{background-color:#FFF200;padding:5px}{0} \\
0 & +1 & \style{background-color:#FFF200;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{+1} \\
\end{array} \right]
\end{array}
}[/math]
Multiply:
[math]\displaystyle{
\begin{array} {c}
G \\
\left[ \begin{array} {rr|r}
g_{1,1} & g_{1,2} & \style{background-color:#FFF200;padding:5px}{g_{1,\text{aug}}} \\
g_{2,1} & g_{2,2} & \style{background-color:#FFF200;padding:5px}{g_{2,\text{aug}}} \\
g_{3,1} & g_{3,2} & \style{background-color:#FFF200;padding:5px}{g_{3,\text{aug}}} \\
\hline
\style{background-color:#FFF200;padding:5px}{g_{\text{aug},1}} & \style{background-color:#FFF200;padding:5px}{g_{\text{aug},2}} & \style{background-color:#FFF200;padding:5px}{g_{\text{aug},\text{aug}}} \\
\end{array} \right]
\end{array}
\begin{array} {c}
\text{equiv. of} \; MS_{\text{p}}K \\
\left[ \begin{array} {rr|r}
2.262 & 2.292 & \style{background-color:#FFF200;padding:5px}{1} \\
{-1.892} & {-2.153} & \style{background-color:#FFF200;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{2} & \style{background-color:#FFF200;padding:5px}{2} & \style{background-color:#FFF200;padding:5px}{0} \\
\end{array} \right]
\end{array}
=
\begin{array} {c}
\text{equiv. of} \; S_{\text{p}}K \\
\left[ \begin{array} {rr|r}
\frac{1}{\log_2(2)} & \frac{1}{\log_2(2)} & \style{background-color:#FFF200;padding:5px}{1} \\
\frac{1}{\log_2(3)} & 0 & \style{background-color:#FFF200;padding:5px}{0} \\
0 & \frac{1}{\log_2(5)} & \style{background-color:#FFF200;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{1} \\
\end{array} \right]
\end{array}
}[/math]
(Again, compare this with the minimax-S case. Same but augmented.) And now solve for [math]\displaystyle{ G }[/math]:
[math]\displaystyle{
\begin{array} {c}
G \\
\left[ \begin{array} {rr|r}
g_{1,1} & g_{1,2} & \style{background-color:#FFF200;padding:5px}{g_{1,\text{aug}}} \\
g_{2,1} & g_{2,2} & \style{background-color:#FFF200;padding:5px}{g_{2,\text{aug}}} \\
g_{3,1} & g_{3,2} & \style{background-color:#FFF200;padding:5px}{g_{3,\text{aug}}} \\
\hline
\style{background-color:#FFF200;padding:5px}{g_{\text{aug},1}} & \style{background-color:#FFF200;padding:5px}{g_{\text{aug},2}} & \style{background-color:#FFF200;padding:5px}{g_{\text{aug},\text{aug}}} \\
\end{array} \right]
\end{array}
=
\begin{array} {c}
\text{equiv. of} \; S_{\text{p}}K \\
\left[ \begin{array} {rr|r}
\frac{1}{\log_2(2)} & \frac{1}{\log_2(2)} & \style{background-color:#FFF200;padding:5px}{1} \\
\frac{1}{\log_2(3)} & 0 & \style{background-color:#FFF200;padding:5px}{0} \\
0 & \frac{1}{\log_2(5)} & \style{background-color:#FFF200;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{1} \\
\end{array} \right]
\end{array}
\begin{array} {c}
(\text{equiv. of} \; MS_{\text{p}}K)^{-1} \\
\left[ \begin{array} {rrr}
0 & 3.837 & 4.131 \\
0 & -3.837 & -3.632 \\
1 & 0.116 & -1.021 \\
\end{array} \right]
\end{array}
=
\begin{array} {c}
\\
\left[ \begin{array} {rr|r}
1 & 0.116 & \style{background-color:#FFF200;padding:5px}{-0.521} \\
0 & 2.421 & \style{background-color:#FFF200;padding:5px}{2.607} \\
0 & -1.652 & \style{background-color:#FFF200;padding:5px}{-1.564} \\
\hline
\style{background-color:#FFF200;padding:5px}{1} & \style{background-color:#FFF200;padding:5px}{0.116} & \style{background-color:#FFF200;padding:5px}{-1.021} \\
\end{array} \right]
\end{array}
}[/math]
From that we can find [math]\displaystyle{ 𝒈 = 𝒋G }[/math]. But we need an augmented [math]\displaystyle{ 𝒋 }[/math] to do this. This will work:
[math]\displaystyle{
\left[ \begin{array} {rrr|r}
1200 & 1200 & 1200 & \style{background-color:#FFF200;padding:5px}{0} \\
\end{array} \right]
}[/math]
So that gives us [math]\displaystyle{ g_1 = 1200.000 }[/math], [math]\displaystyle{ g_2 = 138.930 }[/math], and [math]\displaystyle{ g_{\text{aug}} = -25.633 }[/math]. The last term is junk. As stated previously, it's only a side-effect of the computation process and isn't part of the useful result. Instead we only care about [math]\displaystyle{ g_1 }[/math] and [math]\displaystyle{ g_2 }[/math], giving us the tuning {1200.000 138.930].
For this example we won't bother detailing all 8 candidate tunings. Too many. But we will at least note that not every tuning works out with an unchanged octave like this. And that this is not one of the better tunings; this one does about 26 ¢(S) damage, while half of the tunings are around only 3 ¢(S).
The best tuning we find from this set is {1193.828 161.900], and so that's our minimax-lils-S tuning of porcupine. We could compute this in the RTT Library in Wolfram Language with the following line of code:
In: optimizeGeneratorTuningMap["[⟨1 2 3] ⟨0 -3 -5]]", "minimax-lils-S"]
Out: {1193.828 161.900]
Minimax-lols-S
This example specifically picks up from the setup laid out here: Dave Keenan & Douglas Blumeyer's guide to RTT/Alternative complexities#Log-odd-limit-squared2.
So for minimax-lols-S (AKA held-octave minimax-lils-S) we basically keep the same [math]\displaystyle{ MS_{\text{p}} }[/math] as before. But now (as discussed here) we have to further augment it with the mapped held-interval, [1 0 0⟩ (i.e. what the octave maps to in this temperament, including its augmented row, so that we can match it with its just size in the constrained linear system of equations to enforce it being held unchanged):
[math]\displaystyle{
\begin{array}{c}
\text{equiv. of} \; MS_{\text{p}} \\
\left[ \begin{array} {rrr|r|r}
\frac{1}{\log_2(2)} & \frac{2}{\log_2(3)} & \frac{3}{\log_2(5)} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#00AEEF;padding:5px}{1} \\
0 & \frac{-3}{\log_2(3)} & \frac{-5}{\log_2(5)} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#00AEEF;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{1} & \style{background-color:#FFF200;padding:5px}{1} & \style{background-color:#FFF200;padding:5px}{1} & \style{background-color:#FFF200;padding:5px}{-1} & \style{background-color:#00AEEF;padding:5px}{0} \\
\end{array} \right]
\end{array}
}[/math]
And as for our equivalent of [math]\displaystyle{ S_{\text{p}} }[/math], that's just going to be [math]\displaystyle{ L^{-1} }[/math] augmented first with the placeholder for the size dimension for the lil, and secondly with a placeholder for the just tuning of the held-interval which will appear in the augmented [math]\displaystyle{ 𝒋 }[/math] later, which will be matched up with its mapped form to ensure it is held unchanged.
[math]\displaystyle{
\left[ \begin{array} {rrr|r|r}
\frac{1}{\log_2(2)} & 0 & 0 & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#00AEEF;padding:5px}{0} \\
0 & \frac{1}{\log_2(3)} & 0 & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#00AEEF;padding:5px}{0} \\
0 & 0 & \frac{1}{\log_2(5)} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#00AEEF;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{1} & \style{background-color:#00AEEF;padding:5px}{0} \\
\hline
\style{background-color:#00AEEF;padding:5px}{0} & \style{background-color:#00AEEF;padding:5px}{0} & \style{background-color:#00AEEF;padding:5px}{0} & \style{background-color:#00AEEF;padding:5px}{0} & \style{background-color:#00AEEF;padding:5px}{1} \\
\end{array} \right]
}[/math]
Our list of [math]\displaystyle{ K }[/math]'s here is the same as the list for minimax-lils-S, but now they've all got one of their rows dedicated to holding the octave unchanged. For example the first one was:
[math]\displaystyle{
\left[ \begin{array} {rr|r}
+1 & +1 & \style{background-color:#FFF200;padding:5px}{+1} \\
+1 & 0 & \style{background-color:#FFF200;padding:5px}{0} \\
0 & +1 & \style{background-color:#FFF200;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{+1} \\
\end{array} \right]
}[/math]
But now it's:
[math]\displaystyle{
\left[ \begin{array} {rr|r}
+1 & +1 & \style{background-color:#8DC73E;padding:5px}{0} \\
+1 & 0 & \style{background-color:#8DC73E;padding:5px}{0} \\
0 & +1 & \style{background-color:#8DC73E;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#8DC73E;padding:5px}{0} \\
\hline
\style{background-color:#00AEEF;padding:5px}{0} & \style{background-color:#00AEEF;padding:5px}{0} & \style{background-color:#00AEEF;padding:5px}{1}
\end{array} \right]
}[/math]
(To explain the green highlighting: those cells are pertinent to both augmentations. The yellow part of the green indicates that the lil-augmentation put a new column there at all. The blue indicates that now that column has been replaced with a column for holding an interval unchanged. The held-octave issue did not actually add a new column here, only a new row.)
So let's just work through one tuning with the first [math]\displaystyle{ K }[/math]. Note that [math]\displaystyle{ 𝒈 }[/math] is augmented as it was for the minimax-lils-S computation. Applying the constraint to get an equality:
[math]\displaystyle{
\scriptsize
\begin{array} {c}
G \\
\left[ \begin{array} {rr|r}
g_{1,1} & g_{1,2} & \style{background-color:#FFF200;padding:5px}{g_{1,\text{aug}}} \\
g_{2,1} & g_{2,2} & \style{background-color:#FFF200;padding:5px}{g_{2,\text{aug}}} \\
g_{3,1} & g_{3,2} & \style{background-color:#FFF200;padding:5px}{g_{3,\text{aug}}} \\
\hline
\style{background-color:#FFF200;padding:5px}{g_{\text{aug},1}} & \style{background-color:#FFF200;padding:5px}{g_{\text{aug},2}} & \style{background-color:#FFF200;padding:5px}{g_{\text{aug},\text{aug}}} \\
\hline
\style{background-color:#00AEEF;padding:5px}{g_{\text{held},1}} & \style{background-color:#00AEEF;padding:5px}{g_{\text{held},2}} & \style{background-color:#8DC73E;padding:5px}{g_{\text{held},\text{aug}}} \\
\end{array} \right]
\end{array}
\begin{array}{c}
\text{equiv. of} \; MS_{\text{p}} \\
\left[ \begin{array} {rrr|r|r}
\frac{1}{\log_2(2)} & \frac{2}{\log_2(3)} & \frac{3}{\log_2(5)} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#00AEEF;padding:5px}{1} \\
0 & \frac{-3}{\log_2(3)} & \frac{-5}{\log_2(5)} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#00AEEF;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{1} & \style{background-color:#FFF200;padding:5px}{1} & \style{background-color:#FFF200;padding:5px}{1} & \style{background-color:#FFF200;padding:5px}{-1} & \style{background-color:#00AEEF;padding:5px}{0} \\
\end{array} \right]
\end{array}
\begin{array} {c}
K \\
\left[ \begin{array} {rr|r}
+1 & +1 & \style{background-color:#8DC73E;padding:5px}{0} \\
+1 & 0 & \style{background-color:#8DC73E;padding:5px}{0} \\
0 & +1 & \style{background-color:#8DC73E;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#8DC73E;padding:5px}{0} \\
\hline
\style{background-color:#00AEEF;padding:5px}{0} & \style{background-color:#00AEEF;padding:5px}{0} & \style{background-color:#00AEEF;padding:5px}{1}
\end{array} \right]
\end{array}
=
\begin{array} {c}
\text{equiv. of} \; S_{\text{p}} \\
\left[ \begin{array} {rrr|r|r}
\frac{1}{\log_2(2)} & 0 & 0 & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#00AEEF;padding:5px}{0} \\
0 & \frac{1}{\log_2(3)} & 0 & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#00AEEF;padding:5px}{0} \\
0 & 0 & \frac{1}{\log_2(5)} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#00AEEF;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{1} & \style{background-color:#00AEEF;padding:5px}{0} \\
\hline
\style{background-color:#00AEEF;padding:5px}{0} & \style{background-color:#00AEEF;padding:5px}{0} & \style{background-color:#00AEEF;padding:5px}{0} & \style{background-color:#00AEEF;padding:5px}{0} & \style{background-color:#00AEEF;padding:5px}{1} \\
\end{array} \right]
\end{array}
\begin{array} {c}
K \\
\left[ \begin{array} {rr|r}
+1 & +1 & \style{background-color:#8DC73E;padding:5px}{0} \\
+1 & 0 & \style{background-color:#8DC73E;padding:5px}{0} \\
0 & +1 & \style{background-color:#8DC73E;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#8DC73E;padding:5px}{0} \\
\hline
\style{background-color:#00AEEF;padding:5px}{0} & \style{background-color:#00AEEF;padding:5px}{0} & \style{background-color:#00AEEF;padding:5px}{1}
\end{array} \right]
\end{array}
}[/math]
Multiply:
[math]\displaystyle{
\begin{array} {c}
G \\
\left[ \begin{array} {rr|r}
g_{1,1} & g_{1,2} & \style{background-color:#FFF200;padding:5px}{g_{1,\text{aug}}} \\
g_{2,1} & g_{2,2} & \style{background-color:#FFF200;padding:5px}{g_{2,\text{aug}}} \\
g_{3,1} & g_{3,2} & \style{background-color:#FFF200;padding:5px}{g_{3,\text{aug}}} \\
\hline
\style{background-color:#FFF200;padding:5px}{g_{\text{aug},1}} & \style{background-color:#FFF200;padding:5px}{g_{\text{aug},2}} & \style{background-color:#FFF200;padding:5px}{g_{\text{aug},\text{aug}}} \\
\hline
\style{background-color:#00AEEF;padding:5px}{g_{\text{held},1}} & \style{background-color:#00AEEF;padding:5px}{g_{\text{held},2}} & \style{background-color:#8DC73E;padding:5px}{g_{\text{held},\text{aug}}} \\
\end{array} \right]
\end{array}
\begin{array} {c}
\text{equiv. of} \; MS_{\text{p}}K \\
\left[ \begin{array} {rr|r}
2.262 & 2.292 & \style{background-color:#FFF200;padding:5px}{1} \\
{-1.892} & {-2.153} & \style{background-color:#FFF200;padding:5px}{0} \\
\hline
\style{background-color:#8DC73E;padding:5px}{2} & \style{background-color:#8DC73E;padding:5px}{2} & \style{background-color:#8DC73E;padding:5px}{0} \\
\end{array} \right]
\end{array}
=
\begin{array} {c}
\text{equiv. of} \; S_{\text{p}}K \\
\left[ \begin{array} {rr|r}
\frac{1}{\log_2(2)} & \frac{1}{\log_2(2)} & \style{background-color:#8DC73E;padding:5px}{0} \\
\frac{1}{\log_2(3)} & 0 & \style{background-color:#8DC73E;padding:5px}{0} \\
0 & \frac{1}{\log_2(5)} & \style{background-color:#8DC73E;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#8DC73E;padding:5px}{0} \\
\hline
\style{background-color:#00AEEF;padding:5px}{0} & \style{background-color:#00AEEF;padding:5px}{0} & \style{background-color:#00AEEF;padding:5px}{1} \\
\end{array} \right]
\end{array}
}[/math]
Solve for [math]\displaystyle{ G }[/math]:
[math]\displaystyle{
\begin{array} {c}
G \\
\left[ \begin{array} {rr|r}
g_{1,1} & g_{1,2} & \style{background-color:#FFF200;padding:5px}{g_{1,\text{aug}}} \\
g_{2,1} & g_{2,2} & \style{background-color:#FFF200;padding:5px}{g_{2,\text{aug}}} \\
g_{3,1} & g_{3,2} & \style{background-color:#FFF200;padding:5px}{g_{3,\text{aug}}} \\
\hline
\style{background-color:#FFF200;padding:5px}{g_{\text{aug},1}} & \style{background-color:#FFF200;padding:5px}{g_{\text{aug},2}} & \style{background-color:#FFF200;padding:5px}{g_{\text{aug},\text{aug}}} \\
\hline
\style{background-color:#00AEEF;padding:5px}{g_{\text{held},1}} & \style{background-color:#00AEEF;padding:5px}{g_{\text{held},2}} & \style{background-color:#8DC73E;padding:5px}{g_{\text{held},\text{aug}}} \\
\end{array} \right]
\end{array}
=
\begin{array} {c}
\text{equiv. of} \; S_{\text{p}}K \\
\left[ \begin{array} {rr|r}
\frac{1}{\log_2(2)} & \frac{1}{\log_2(2)} & \style{background-color:#8DC73E;padding:5px}{0} \\
\frac{1}{\log_2(3)} & 0 & \style{background-color:#8DC73E;padding:5px}{0} \\
0 & \frac{1}{\log_2(5)} & \style{background-color:#8DC73E;padding:5px}{0} \\
\hline
\style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#8DC73E;padding:5px}{0} \\
\hline
\style{background-color:#00AEEF;padding:5px}{0} & \style{background-color:#00AEEF;padding:5px}{0} & \style{background-color:#00AEEF;padding:5px}{1} \\
\end{array} \right]
\end{array}
\begin{array} {c}
(\text{equiv. of} \; MS_{\text{p}}K)^{-1} \\
\left[ \begin{array} {rrr}
0 & 3.838 & 4.132 \\
0 & -3.838 & -3.632 \\
1 & 0.116 & -1.021 \\
\end{array} \right]
\end{array}
=
\begin{array} {c}
\\
\left[ \begin{array} {rr|r}
0 & 0 & \style{background-color:#FFF200;padding:5px}{0.500} \\
0 & 2.421 & \style{background-color:#FFF200;padding:5px}{2.607} \\
0 & -1.653 & \style{background-color:#FFF200;padding:5px}{-1.564} \\
\hline
\style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#FFF200;padding:5px}{0} \\
\hline
\style{background-color:#00AEEF;padding:5px}{1} & \style{background-color:#00AEEF;padding:5px}{0.116} & \style{background-color:#8DC73E;padding:5px}{-1.021} \\
\end{array} \right]
\end{array}
}[/math]
From that we can find [math]\displaystyle{ 𝒈 = 𝒋G }[/math]. But we need to have augmented [math]\displaystyle{ 𝒋 }[/math] accordingly. It needs to be augmented both for the lils and for the held-octave. Specifically, for the held-octave, we need to add its just tuning in cents. So that's 1200. It works out to:
[math]\displaystyle{
\left[ \begin{array} {rrr|r|r}
1200 & 1200 & 1200 & \style{background-color:#FFF200;padding:5px}{0} & \style{background-color:#00AEEF;padding:5px}{1200} \\
\end{array} \right]
}[/math]
So we find [math]\displaystyle{ g_1 = 1200 }[/math], [math]\displaystyle{ g_2 = 138.930 }[/math], and [math]\displaystyle{ g_{\text{aug}} = -25.633 }[/math]. As stated previously, the result for [math]\displaystyle{ g_{\text{aug}} }[/math] is just a side-effect of the computation process and isn't part of the useful result. Instead we only care about [math]\displaystyle{ g_1 }[/math] and [math]\displaystyle{ g_2 }[/math], giving us the tuning {1200.000 138.930]. (Yes, that's the same tuning as we found for minimax-lils-S; it happens that the octave was already pure for that one, and otherwise nothing about the tuning scheme changed.)
For this example we won't bother detailing all 8 candidate tunings. Too many. But we will at least note that not every tuning works out with a held octave like this. And that this is not one of the better tunings; this one does about 26 ¢(S) damage, while half of the tunings are around only 3 ¢(S).
The best augmented tuning we find from this set is [1200 162.737 -3.102], and so that's our held-octave minimax-lols-S tuning of porcupine. Well, when you throw away that [math]\displaystyle{ g_{\text{aug}} }[/math] final entry anyway, to get {1200 162.737].
We could compute this in the RTT Library in Wolfram Language with the following line of code:
In: optimizeGeneratorTuningMap["[⟨1 2 3] ⟨0 -3 -5]]", "held-octave minimax-lols-S"]
Out: {1200 162.737]