Comma basis
| This is a beginner page. It is written to allow new readers to learn about the basics of the topic easily. The corresponding expert page for this topic is Dual list. |
A comma basis is a list of linearly independent commas that characterizes a temperament.
For example, septimal meantone tempers out 225/224, 126/125, and 81/80, but from any two of these commas can be derived the third ((225/224)*(126/125)=(81/80), for example). This means that if two of these three commas are ever made to vanish (mapped to 0 ¢), then the third one necessarily is also made to vanish. Thus, we only need to pick two of the three commas; the third is implied. So we may write meantone's comma basis as (81/80, 225/224). This can be written in matrix form using the monzos of the commas as columns: [[-4 4 -1 0⟩, [-5 2 2 -1⟩], or equivalently as a list of monzos. Besides, it is often presented in terms of ratios for convenience. Various normal forms have been developed as identifiers of temperaments.
Mathematically, it is a basis for the nullspace (sometimes also called the "kernel") of a temperament. It consists of n linearly independent vectors, where n is the nullity, each one representing one of the commas that is tempered out. The nullspace forms a subgroup of the domain of the mapping, and every linear combination of basis vectors (for example, (81/80)^n * (225/224)^m) is also tempered out.
With respect to the mapping
The comma basis is considered the dual of the temperament's mapping matrix, similar to how a val is considered dual to a monzo. Temperaments may be identified by either their mapping or comma basis.
Functions for finding the nullspace of a matrix are readily available in many math libraries. All you need to do to get a comma basis for a mapping is to find the nullspace. To learn about finding the nullspace by hand, see Dave Keenan & Douglas Blumeyer's guide to RTT/Exploring temperaments #Nullspace.
To reverse the nullspace operation, that is, to find a mapping from a comma basis, you can also use the nullspace operation; the relationship between a matrix and its nullspace essentially works both ways.
When applied to convert between wedgies and "multimonzos" (the wedgie version of a comma basis), the equivalent operation is the Hodge star.
Some math libraries, such as Sage, provide functions for both directions; in Sage, to go from a mapping to a comma basis, use left_kernel(), and to go from a comma basis to a mapping, use right_kernel(). In other math libraries, such as Wolfram Language, the nullspace operation NullSpace[] is primarily designed to work for mappings, and so if you want correct results, you must transform the basis for the nullspace into a mapping-like form, perform the nullspace operation, and then undo the initial transformation.
This transformation that relates the two directions of nullspace operations is called the transpose. It works by reflecting a matrix's values across its main diagonal, i.e. either the diagonal running from the top-left corner toward the bottom-right, or the diagonal running from the bottom-right corner toward the top-left.
However, transposing a comma basis, using a mapping-style nullspace function, then transposing again, will return a mapping in a strange form, with all of its zeros in the top-right corner, rather than the bottom-left as is preferred. The solution for this problem is to use the anti-transpose instead of the transpose. This is the same you reflect the matrix's entries across its anti-diagonal (starting from either the top-right or bottom-left corner).
You can remember this because most mappings and comma bases have zeroes in the bottom-left corner, and you want to keep them there; some kind of transpose is necessary to convert the constituent comma vectors columns of the comma basis into rows as if they were constituent generator maps (rows) of a mapping, but a normal transpose of the comma basis would flip its zeroes into the top-right corner instead.