까페에 글을 연재하고 있기 때문에 별도의 Lua 카테고리를 만들지 않았다.
Matrix = {row,col,m}
Matrix.New = function(row , col , data)
local Instance = {}
Instance.row = row -- set a row
Instance.col = col -- set a col
Instance.m = {} -- set a MatrixData
for i=1, row do
Instance.m[i] = {} -- create a new row
for j=1, col do
Instance.m[i][j] = data[(i-1)*col+j] -- create a new col
end
end
-- Definition Method
function Instance:Print()
for i=1, self.row do
for j=1, self.col do
io.write(self.m[i][j],"\t")
end
io.write("\n")
end
end
function Instance:Inverse()
-- 2차 정각행렬일 경우만 고려한다
if self.col == self.row then
local a = self.m[1][1]
local b = self.m[1][2]
local c = self.m[2][1]
local d = self.m[2][2]
local det = a*d-b*c
if det == 0 then -- 에러 처리
print("E2")
return
end
self.m[1][1] = d/det
self.m[1][2] = -b/det
self.m[2][1] = -c/det
self.m[2][2] = a/det
else
print("sorry, this mat isn't n' square mat.")
return
end
end
function Instance:Multiply(D)
Data = {}
Index = 0
-- if self.col == D.row then -- Check the Possible
for i=1, self.row do
for j=1, D.col do
Index = Index + 1 -- Increase the Index
Data[Index] = 0
for k=1, self.col do
Data[Index] = Data[Index] + self.m[i][k] * D.m[k][j]
end
end
end
R = Matrix.New(self.row, D.col, Data)
-- Return New Matrix R
return R
end
return Instance
end
local mat = Matrix.New(
3,2,{1,4,
2,5,
3,6})
mat:Print()
local mat2 = Matrix.New(
2,3,{7,8,9,
10,11,12})
mat2:Print()
local mat3 = mat:Multiply(mat2)
mat3:Print()
이것으로 무엇을 할까?
바로 일차연립방정식을 풀 수 있다.
local mat = Matrix.New(
2,2,{2,-3,
-2,4})
mat:Inverse()
mat:Print()
local mat2 = Matrix.New(
2,1,{5,
-4})
mat2:Print()
local mat3 = mat:Multiply(mat2)
mat3:Print()
'개발_이야기' 카테고리의 다른 글
jsp 페이지 얻기 & 파싱하기 (0) | 2015.11.06 |
---|---|
IIS와 Tomcat 연동 (0) | 2015.06.23 |
3d graphic library (0) | 2015.05.20 |
간단한 CPU 벤치마크 (0) | 2015.03.08 |
LWM 개발! (0) | 2015.03.01 |