Module:Temperament data: Difference between revisions
CompactStar (talk | contribs) No edit summary |
CompactStar (talk | contribs) No edit summary |
||
| Line 1: | Line 1: | ||
local rat = require('Module:Rational') | local rat = require('Module:Rational') | ||
local p = {} | local p = {} | ||
local function gcd(a,b) | local function gcd(a,b) | ||
if type(a) == "number" and type(b) == "number" and | if type(a) == "number" and type(b) == "number" and | ||
| Line 66: | Line 66: | ||
local function matinv(a) | local function matinv(a) | ||
dbl_identity = {} | local dbl_identity = {} | ||
for i = 1, #a do | for i = 1, #a do | ||
dbl_identity[i] = {} | dbl_identity[i] = {} | ||
| Line 78: | Line 78: | ||
end | end | ||
xn = scalarmatmul(a, 0.000001) | local xn = scalarmatmul(a, 0.000001) | ||
for i = 1, 30 do | for i = 1, 30 do | ||
| Line 96: | Line 96: | ||
return result | return result | ||
end | end | ||
local function antitranspose(a) | |||
local result = {} | |||
for i = 1, #a[1] do | |||
result[i] = {} | |||
for j = 1, #a do | |||
result[i][j] = a[#a - j + 1][#a[1] - i + 1] | |||
end | |||
end | |||
return result | |||
end | |||
local function pseudoinv(a) | local function pseudoinv(a) | ||
| Line 101: | Line 113: | ||
end | end | ||
local function nullspace(mapping) | |||
local identity = {} | |||
for i = 1, #mapping[1] do | |||
identity[i] = {} | |||
for j = 1, #mapping[1] do | |||
if i == j then | |||
identity[i][j] = 1 | |||
else | |||
identity[i][j] = 0 | |||
end | |||
end | |||
end | |||
-- local w = {{0},{1},{0}} | |||
-- for i = 1, #mapping[1] do | |||
-- w[i] = {10} | |||
-- end | |||
return matsub(identity, matmul(pseudoinv(mapping), mapping)) | |||
end | |||
function | local function mapping_from_basis(comma_basis) | ||
return antitranspose(nullspace(antitranspose(comma_basis))) | |||
end | |||
local function get_te_tuning_mpa(subgroup, mapping, preimage) | |||
local w = {} | local w = {} | ||
for i = 1, #subgroup do | for i = 1, #subgroup do | ||
| Line 127: | Line 157: | ||
local vw = matmul(mapping, w) | local vw = matmul(mapping, w) | ||
local g = matmul(jw, pseudoinv(vw)) | local g = matmul(jw, pseudoinv(vw)) | ||
local result = {} | |||
return g | |||
end | end | ||
return p | return p | ||