Hodge dual: Difference between revisions

Sintel (talk | contribs)
Computation: clarify, also replace ceil(k/2) with k-th triangular number (gives the same result)
No edit summary
 
(5 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{wikipedia|Hodge star operator}}
{{wikipedia|Hodge star operator}}


In [[exterior algebra]] applied to [[regular temperament theory]], the '''Hodge dual''', or '''Hodge star''' is an operation that converts the [[Plücker coordinates]] of a temperament into the corresponding coordinates of the [[comma basis]], and vice versa.
In [[exterior algebra]] applied to [[regular temperament theory]], the '''Hodge dual''', or '''Hodge star''' is an operation that converts the [[Plücker coordinates]] (or [[wedgie]]) of a temperament into the corresponding coordinates of the [[comma basis]] (a kind of "comma wedgie"), and vice versa.


== Definition ==
== Definition ==
Line 40: Line 40:
Let's work through the example step-by-step with matrix <math>M = \begin{bmatrix} 1 & 1 & 0 \\ 0 & 1 & 4 \end{bmatrix}</math>, the mapping matrix of 5-limit [[meantone]].
Let's work through the example step-by-step with matrix <math>M = \begin{bmatrix} 1 & 1 & 0 \\ 0 & 1 & 4 \end{bmatrix}</math>, the mapping matrix of 5-limit [[meantone]].


We will write the standard basis vectors as <math>\{ e_1, \, e_2, \, e_3 \}</math>, which correspond the the primes 2, 3 and 5 respectively.
We will write the standard basis vectors as <math>\{ e_1, \, e_2, \, e_3 \}</math>, which correspond to the primes 2, 3 and 5 respectively.
We already know that the kernel of this mapping should be [[81/80]], so we can write the kernel as:
We already know that the kernel of this mapping should be [[81/80]], so we can write the kernel as:
:<math>
:<math>
Line 84: Line 84:
</math>
</math>


So we find <math>\star(v_1 \wedge v_2) = 4e_1 - 4e_2 + e_3</math>, which matches with what we expect from above, up to sign.
So we find <math>\star(v_1 \wedge v_2) = 4e_1 - 4e_2 + e_3</math> (which is the monzo for the descending syntonic comma), which matches with what we expect from above, up to sign.
The Hodge dual \( \star(v_1 \wedge v_2) \) directly gives the generator of <math> \ker M </math>.
The Hodge dual \( \star(v_1 \wedge v_2) \) directly gives the generator of <math> \ker M </math>.


Line 94: Line 94:
# Let '''C''' be the ''k''-combinations of the numbers 1 through ''n'' in lexicographic order. '''C''' will have the same length as '''V''' and '''M'''.
# Let '''C''' be the ''k''-combinations of the numbers 1 through ''n'' in lexicographic order. '''C''' will have the same length as '''V''' and '''M'''.
# For each combination <math>C_i</math>, compute <math>S_i = \sum C_i - \frac{k (k+1)}{2}</math>.
# For each combination <math>C_i</math>, compute <math>S_i = \sum C_i - \frac{k (k+1)}{2}</math>.
# Multiply the ''i''-th element of '''V''' by <math>(-1)^{S_i}</math>
# Multiply the ''i''-th element of '''V''' by <math>(-1)^{S_i}</math>.
# Reverse the elements of '''V'''.
# Reverse the elements of '''V'''.


To find an unknown '''V''' from a known '''M''', first reverse '''M''' and then adjust the signs.
To find an unknown '''V''' from a known '''M''', first reverse '''M''' and then adjust the signs.
Python implementation of the above algorithm:
{{Databox| Code |
<syntaxhighlight lang="python">
import itertools
import math
def hodge_dual(n, k, v):
    N = math.comb(n, k)
    if len(v) != N:
        raise ValueError(f"Length of v must be {N}")
    # Generate lex-ordered k-indices (tuples)
    indices_list = list(itertools.combinations(range(1, n + 1), k))
    # k-th triangular number
    T0 = k * (k + 1) // 2
    w = [0] * N
    for i, I in enumerate(indices_list):
        total = sum(I)
        exponent = total - T0
        s = 1 if exponent % 2 == 0 else -1
        j = N - 1 - i  # Position in dual vector (reverse lex order)
        w[j] = s * v[i]
    return w
if __name__ == "__main__":
    n = 3
    k = 2
    # Output: [4, -4, 1]
    print(hodge_dual(n, k, [1, 4, 4]))
</syntaxhighlight>
}}


== Applications ==
== Applications ==
Line 107: Line 145:
</math>
</math>


The Hodge dual is <math>\star K = [6, -7, -2, -25, -20, 15]</math>, which are the Plücker coordinates (a.k.a. [[wedgie]]) for [[miracle]].
The Hodge dual is <math>\star K = [6, -7, -2, -25, -20, 15]</math>, which are the Plücker coordinates for [[miracle]].


== See also ==
== See also ==