Module:Temperament data: Difference between revisions

From Xenharmonic Wiki
Jump to navigation Jump to search
CompactStar (talk | contribs)
No edit summary
CompactStar (talk | contribs)
No edit summary
Line 24: Line 24:
result[i] = {}
result[i] = {}
for j = 1, #(b[1]) do
for j = 1, #(b[1]) do
result[i][j] =  cadd(a[i][j], b[i][j])
result[i][j] = cadd(a[i][j], b[i][j])
end
end
return result
end
 
local function matsub(a, b)
local result = {}
for i = 1, #a do
result[i] = {}
for j = 1, #(b[1]) do
result[i][j] = csub(a[i][j], b[i][j])
end
end
end
end
Line 39: Line 50:
result[i][j] = cadd(result[i][j], cmul(a[i][k], b[k][j]))
result[i][j] = cadd(result[i][j], cmul(a[i][k], b[k][j]))
end
end
end
end
return result
end
local function scalarmatmul(a, b)
local result = {}
for i = 1, #a  do
result[i] = {}
for j = 1, #(a[1]) do
result[i][j] = cmul(a[i][j], b)
end
end
end
end
Line 45: Line 68:


local function matinv(a)
local function matinv(a)
xk = {}
for i = 1, #a do
xk[i] = {}
for j = 1, #(a[1]) do
xk[i][j] = {math.random(), math.random()}
end
end
for i = 1, 15 do
xk = matsub(scalarmatmul({2,0}, xk), matmul(xk, axk))
end
return xk
end
end


return p
return p

Revision as of 03:14, 14 October 2023

Module documentation[view] [edit] [history] [purge]
This module should not be invoked directly; use its corresponding template instead: Template:Temperament data.
Module:Temperament data is a draft module. It is incomplete and may not be in active development. If possible, editors are encouraged to help with its development. In the meantime, editors should avoid using this module across the Xenharmonic Wiki, except for testing.
Introspection summary for Module:Temperament data 
Functions provided (0)
Line Function Params
Lua modules required (1)
Variable Module Functions used
rat Module:Rational dependency not used

No function descriptions were provided. The Lua code may have further information.


local rat = require('Module:Rational')
local p = {}

-- Complex number functions (1st element = real and 2nd element = imaginary)
local function cadd(a, b)
	return {(a[1] + b[1]), (a[2] + b[2])}
end

local function csub(a, b)
	return {(a[1] - b[1]), (a[2] - b[2])}
end

local function cmul(a, b)
	return {(a[1] * b[1] - a[2] * b[2]), (a[1] * b[2] + a[2] * b[1])}
end

local function cdiv(a, b)
	return {(a[1] * b[1] + a[2] * b[2])/(b[1]*b[1] + b[2]*b[2]), (a[2] * b[1] - a[1] * b[2])/(b[1]*b[1] + b[2]*b[2])}
end

local function matadd(a, b)
	local result = {}
	for i = 1, #a  do
		result[i] = {}
		for j = 1, #(b[1]) do
			result[i][j] = cadd(a[i][j], b[i][j])
		end
	end
	return result
end

local function matsub(a, b)
	local result = {}
	for i = 1, #a  do
		result[i] = {}
		for j = 1, #(b[1]) do
			result[i][j] = csub(a[i][j], b[i][j])
		end
	end
	return result
end

local function matmul(a, b)
	local result = {}
	for i = 1, #a  do
		result[i] = {}
		for j = 1, #(b[1]) do
			result[i][j] = {0, 0}
			for k = 1, #(a[1]) do
				result[i][j] = cadd(result[i][j], cmul(a[i][k], b[k][j]))
			end
		end
	end
	return result
end


local function scalarmatmul(a, b)
	local result = {}
	for i = 1, #a  do
		result[i] = {}
		for j = 1, #(a[1]) do
			result[i][j] = cmul(a[i][j], b)
		end
	end
	return result
end

local function matinv(a)
	xk = {}
	for i = 1, #a do
		xk[i] = {}
		for j = 1, #(a[1]) do
			xk[i][j] = {math.random(), math.random()}
		end
	end
	for i = 1, 15 do
		xk = matsub(scalarmatmul({2,0}, xk), matmul(xk, axk))
	end
	return xk
end

return p