개발_이야기

Lua Matrix 구현

조규현15 2015. 6. 19. 08:56
반응형

까페에 글을 연재하고 있기 때문에 별도의 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