Perfect balance: Difference between revisions
| Line 24: | Line 24: | ||
It is easy to construct perfectly balanced scales that are not a subset of any EDO, by superimposing two scales within EDOs transposed by an irrational amount. There also exists a continuum of perfectly balanced scales that have no such decomposition. | It is easy to construct perfectly balanced scales that are not a subset of any EDO, by superimposing two scales within EDOs transposed by an irrational amount. There also exists a continuum of perfectly balanced scales that have no such decomposition. | ||
Milne at al. showed that an efficient convex optimization procedure exists that, given an arbitrary scale, computes the closest perfectly balanced scale according to a simple squared-difference metric. For example, a perfectly balanced approximation to Ptolemy's diatonic scale [1, 9/8, 5/4, 4/3, 3/2, 5/3, 15/8] displaces by the following cent values: [0, +8.61, +20.00, +23.60, +20.03, +9.97, +0.72]. The resulting scale is given by the following [[Scala]] file: | Milne at al. showed that an efficient convex optimization procedure exists that, given an arbitrary scale, computes the closest perfectly balanced scale according to a simple squared-difference metric. Briefly, this is accomplished by the following steps: place the scale on a circle in 2D space about the origin, translate the points by a vector (''u'', ''v''), project the points back onto the original circle by dividing by the norm, then compute the squared balance <math>\left(\sum \mathbf{x}\right)^2 + \left(\sum \mathbf{y}\right)^2</math> where <math>\mathbf{x}</math> and <math>\mathbf{y}</math> are vectors of the ''x''- and ''y''-coordinates. Use any standard unconstrained optimization procedure to find ''u'' and ''v'' so that the squared balance is minimized. It's not clear from sources whether the minimum (guaranteed to be global due to convexity) is perfectly balanced, but it seems to be in practice. | ||
For example, a perfectly balanced approximation to Ptolemy's diatonic scale [1, 9/8, 5/4, 4/3, 3/2, 5/3, 15/8] displaces by the following cent values: [0, +8.61, +20.00, +23.60, +20.03, +9.97, +0.72]. The resulting scale is given by the following [[Scala]] file: | |||
<pre> | <pre> | ||