42 lines
1.0 KiB
Lua
42 lines
1.0 KiB
Lua
local matrix = require "matrix" -- https://github.com/davidm/lua-matrix
|
|
|
|
local function cramer(mat, vec)
|
|
-- Check if matrix is quadratic
|
|
assert(#mat == #mat[1], "Matrix is not square!")
|
|
-- Check if vector has the same size of the matrix
|
|
assert(#mat == #vec, "Vector has not the same size of the matrix!")
|
|
|
|
local size = #mat
|
|
local main_det = matrix.det(mat)
|
|
|
|
local aux_mats = {}
|
|
local dets = {}
|
|
local result = {}
|
|
for i = 1, size do
|
|
-- Construct the auxiliary matrixes
|
|
aux_mats[i] = matrix.copy(mat)
|
|
for j = 1, size do
|
|
aux_mats[i][j][i] = vec[j]
|
|
end
|
|
|
|
-- Calculate the auxiliary determinants
|
|
dets[i] = matrix.det(aux_mats[i])
|
|
|
|
-- Calculate results
|
|
result[i] = dets[i]/main_det
|
|
end
|
|
|
|
return result
|
|
end
|
|
|
|
-----------------------------------------------
|
|
|
|
local A = {{ 2, -1, 5, 1},
|
|
{ 3, 2, 2, -6},
|
|
{ 1, 3, 3, -1},
|
|
{ 5, -2, -3, 3}}
|
|
local b = {-3, -32, -47, 49}
|
|
|
|
local result = cramer(A, b)
|
|
print("Result: " .. table.concat(result, ", "))
|