A = [1, 2, 3; 4, 5. 6]
B = [3, 0, 1; -1, 2, -2]
로 주어진 두 2x3 행렬 A, B 에 대하여
2A, 3B. 2A + 3B. 2A - 3B,
A의 첫째 행, B의 둘째 행, A의 첫째 행과 B의 둘째 행의 3배의 합,
A의 첫째 행 첫째 열 요소, B의 둘째 행 셋째 열 요소,
A의 첫째 행 첫째 열 요소의 5배와 B의 둘째 행 셋째 열 요소의 차
를 각각 구하는 방법을 여러 가지 도구
Mathematica, Maxima, Octave, Scipy
들을 각각 이용하여 알아본다.
,
* Mathematica 를 이용하여 행렬 계산하기 (스칼라배, 합, 차 등)
* Maxima 를 이용하여 행렬 계산하기 (스칼라배, 합, 차 등)
* Octave 를 이용하여 행렬 계산하기 (스칼라배, 합, 차 등)
** Octave 소스
B = [3, 0, 1; -1, 2, -2]
2*A, 3*B, 2*A + 3*B, 2*A - 3*B
A(1,:), 3*B(2,:), A(1,:)+3*B(2,:)
5*A(1,1), B(2,3), 5*A(1,1)-B(2,3)
** Octave 명령 창에서 행렬 A, B 생성하기
** Octave 명령 창에서 기본적인 행렬 계산 (스칼라배, 합, 차 등)
* Python 2.7 & Scipy를 이용하여 행렬 계산하기 (스칼라배, 합, 차 등)
** 파이썬 소스
import scipy as sp
from scipy import *
A = mat( "[1, 2, 3; 4, 5, 6]" )
B = mat( "[3, 0, 1; -1, 2, 3]" )
A; B
2*A; 3*B; 2*A + 3*B; 2*A - 3*B
A[0]; 3*B[1]; A[0] + 3*B[1]
5*A[0,0]; B[1, 2]; 5*A[0,0] - B[1, 2
** 위의 소스를 파일로 저장시키지 않고, Python 인터프리터 실행 창에서 한 줄씩 입력한다.
* Lua 5.1.4 & LuaMatrix 0.2.9 를 이용하여 행렬 계산하기 (스칼라배, 합, 차 등)
(참고1: LuaMatrix 는 http://lua-users.org/wiki/LuaMatrix 에서 구할 수 있음)
(참고2: http://numlua.luaforge.net/ 에서 numlua 패키지를 받아서 설치해도 된다.)
** Lua 소스
-- // Using the matrix class given at http://lua-users.org/wiki/LuaMatrix
-- // Execute: lua TestMatrix-01.lua
local matrix = require "lua_matrix"
function printMatrix(msg, a)
if type(a) == "number" then
print( msg .. a )
return
end
if type(msg) == "string" and #(msg) > 0 then
print( msg .. "[ ")
end
print( a:tostring() .. " ]" )
end
function matrix.getRow(a, k)
local n = #a[1]
return matrix.subm(a, k, 1, k, n)
end
function matrix.row(a, k)
local n = #a[1]
return matrix.subm(a, k, 1, k, n)
end
function matrix.col(a, k)
local n = #a
return matrix.subm(a, 1, k, n, k)
end
local A, B, C, D
-- instantiate of matrices
A = matrix:new({{1, 2, 3}, {4, 5, 6}})
printMatrix( "A = ", A )
B = matrix:new({{3, 0, 1}, {1, 2, -2}})
printMatrix( "B = ", B )
printMatrix( "B + B = ", B + B )
printMatrix( "B - B = ", B - B )
printMatrix( "B:transpose() * B = ", B:transpose() * B )
printMatrix( "3 * B = ", 3 * B )
printMatrix( "0.1 * B = ", 0.1 * B )
local x, y = matrix.size(B)
print( "matrix.size(B) = ".. x .. "x" .. y)
C = matrix.copy( 2*B )
printMatrix( "C = ", C )
C = (3*B):copy()
printMatrix( "C = ", C )
printMatrix( "2*A = ", 2*A )
printMatrix( "3*B = ", 3*B )
printMatrix( "2*A + 3*B = ", 2*A + 3*B )
printMatrix( "2*A - 3*B = ", 2*A - 3*B )
print( "B:getelement(2,3) = ".. B:getelement(2,3))
print( "More simply, B[2][3] = ".. B[2][3])
print( "5*A:getelement(1,1) - B:getelement(2,3) = ".. (5*A:getelement(1,1) - B:getelement(2,3)))
print( "More simply, Simply, *A[1][1] - B[2][3] = ".. (5*A[1][1] - B[2][3]))
printMatrix( "matrix.subm(A, 1, 1, 1, 3) = ", matrix.subm(A, 1, 1, 1, 3))
printMatrix( "matrix.subm(B, 2, 1, 2, 3) = ", matrix.subm(B, 2, 1, 2, 3))
printMatrix( "matrix.row(B, 2) = ", matrix.row(B, 2))
printMatrix( "3*matrix.getRow(B, 2) = ", 3*matrix.getRow(B, 2))
printMatrix( "More simply, 3*matrix.row(B, 2) = ", 3*matrix.row(B, 2))
printMatrix( "matrix.col(B, 2) = ", matrix.col(B, 2))
printMatrix( "B/2 = ", B/2 )
printMatrix( "1/2*B = ", 1/2*B )
--[[
Execute Result:
A = [
1 2 3
4 5 6 ]
B = [
3 0 1
1 2 -2 ]
B + B = [
6 0 2
2 4 -4 ]
B - B = [
0 0 0
0 0 0 ]
B:transpose() * B = [
10 2 1
2 4 -4
1 -4 5 ]
3 * B = [
9 0 3
3 6 -6 ]
0.1 * B = [
0.3 0 0.1
0.1 0.2 -0.2 ]
matrix.size(B) = 2x3
C = [
6 0 2
2 4 -4 ]
C = [
9 0 3
3 6 -6 ]
2*A = [
2 4 6
8 10 12 ]
3*B = [
9 0 3
3 6 -6 ]
2*A + 3*B = [
11 4 9
11 16 6 ]
2*A - 3*B = [
-7 4 3
5 4 18 ]
B:getelement(2,3) = -2
More simply, B[2][3] = -2
5*A:getelement(1,1) - B:getelement(2,3) = 7
More simply, Simply, *A[1][1] - B[2][3] = 7
matrix.subm(A, 1, 1, 1, 3) = [
1 2 3 ]
matrix.subm(B, 2, 1, 2, 3) = [
1 2 -2 ]
matrix.row(B, 2) = [
1 2 -2 ]
3*matrix.getRow(B, 2) = [
3 6 -6 ]
More simply, 3*matrix.row(B, 2) = [
3 6 -6 ]
matrix.col(B, 2) = [
0
2 ]
B/2 = [
1.5 0 0.5
0.5 1 -1 ]
1/2*B = [
1.5 0 0.5
0.5 1 -1 ]
--]]
'학습 > 수학' 카테고리의 다른 글
여러 가지 도구를 이용한 행렬 계산 / LU 분해(decomposition) (0) | 2011.09.18 |
---|---|
여러 가지 도구를 이용한 행렬 계산 / 행렬 곱셈, 전치행렬, 행렬식, 역행렬 등 (0) | 2011.09.17 |
매개방정식으로 곡면 그리기 / 구면(sphere) (0) | 2011.09.17 |
매개방정식으로 곡면 그리기 / 토러스(torus) (1) | 2011.09.17 |
회전 곡면 z = sin(r) over r 그리기 (0) | 2011.09.16 |