brunch

You can make anything
by writing

C.S.Lewis

[선형대수] #3 간단한 벡터 연산

들어가는 글: 오늘은 한글날(공휴일)입니다. 내친김에 좀더 정리를 해보도록 하겠습니다. 저도 이제 선형대수 공부를 시작하는 단계이기 때문에 잘못된 것이 있으면 comment 달아주시면 고치도록 하겠습니다. 


1. 벡터로 머할 수 있나? 


앞서 벡터는 다양한 현상을 표현할 수 있는 도구로 인식했습니다. 


1) (1kg, 2kg) 을 (1000g, 2000g)으로 변환해주는 (함수)로서의 벡터  

2) (5,0) :  5mph 로 수평으로 달리는 것을 표현해주는 (세기와 방향)으로 서의 벡터  

3) 2차원 공간에서 (100,200)으로 (좌표)를 나타내는 벡터 

4) 어떤 사람 (속성)을 표현하는 벡터. 예) (키, 몸무게, 성별, 나이) = (180, 70, M, 35) 


2화까지는 벡터 그 자체에 대해서 얘기했습니다. 사실 선형대수에서 벡터를 가지고 수많은 보조정리(Lemma), 이론등이 존재하지만 그것은 나중에 배우도록 하고 오늘은 아주 원초적으로 접근해보겠습니다. 


벡터로 머할 수 있나? 


2. 사칙 연산을 해보자 


초등학교에서 수(number)라는 것을 배우면 그 다음에 연산에 대해서도 배웁니다. 아주 자연스러운 것입니다. 수로 세상을 표현했으면 그것으로 무언가 할 수 있어야 가치가 생기기 때문이죠. 


1) 덧셈 : 1+1 = 2 

2) 뺄셈 : 2-1 = 1 

3) 곱셈: 2*3 = 6 

4) 나눗셈: 10 / 2 = 5 


그런데 선형대수, 좀더 정확히는 선형 세상(linear space)에서는 위의 것중 나눗셈에서는 별도로 정의하지 않았습니다. 덧셈, 뺄셈 그리고 곱셈이 정의되어 있고 곱셈의 경우도 (상수배 = 사실 이것은 덧셈이나 뺄셈으로도 치환할 수 있지만 ㅎ) , 내적(inner product) , 외적(outer product), 도트곱(dot product) 등이 가능합니다. 저도 아직 내적/외적/도트곱에 대해서는 잘 구별하지 못합니다 --; 


연산이라는 것에 대해 조금더 알아보겠습니다. 

저는 얼마전 함수형 프로그래밍을 공부하면서(제 직업이 프로그래머니까요 ㅎ) 연산자(operator)에 대한 의미에 대해 새롭게 알게 되었습니다. 


연산자로 연산을 수행하면 결과로 피연산자가 나온다는 것이었습니다. 

이게 무슨 말이지? 쉽게 설명해서 1이라는 숫자에 1이라는 숫자를 덧셈( + = 이게 연산자입니다) 하면 숫자가 나온다는 것입니다. 이게 왜 중요할까요? 


벡터는 다른 말로 (함수)라고 했지요? 즉, 벡터를 연산하고 나면 그 결과로 (함수)가 나온다는 말과 같습니다. 이런 생각은 나중에 다른 개념을 이해할 때 도움이 되니 기억해두세요. 


우리가 +, -, *, / 와 같이 무심하게 사용했던 것도 좀더 뜯어보면 그 안에 새로운 정보들이 숨어 있음을 알 수 있는 사건이었습니다. 


3. 벡터의 덧셈과 뺄셈


** 오해하시면 안되는게 좌표인 벡터가 따로 있고, 속성의 벡터가 따로 있는 것이 아니고 다 같은 벡터입니다. 이해하기 쉽게 하기 위하여 좌표를 예를 들어 설명하는 것입니다 ** 


여기는 아주 쉽습니다. 이미 정규 교육과정에서 다 기계적으로 배웠던 내용입니다. 


v1 = (3,4) 

v2 = (1,1) 


v1 + v2 = ? 는 무엇일까요? 짜잔.. 결과는 (4,5) = (3+1, 4+1) 이 됩니다. 다 아시죠? 

아까 연산자는 그 결과로 피연산자를 낸다고 했기 때문에 (4,5)도 벡터가 됩니다. 

그럴때 "벡터는 덧셈 연산에 대해 닫혀 있다(closed)"라고 표현합니다. 사실 뺄셈도 마찬가지입니다. 해보시면 됩니다. 


여기까지는 쉽습니다. (코딩 더 매트릭스, 96p)에는 도트곱에 관한 충격적인 예제가 나옵니다. 

저는 도저히 벡터를 이렇게 상상할 수는 없었어요. 


4. 도트곱 예제 (저에겐 문화적 충격 +.+) 


Example 3.9.5 를 인용합니다. 


정의역 D는 식품들의 집합이고 맥주를 만드는데 사용하는 4가지 재료라고 합니다. 

D = {hops, malt, water, yeast} 


백터 cost는 각 식품을 단위량당 어떤 가격에 매핑합니다. (벡터는 함수라니까요~) 

cost = {hops : $2.50 per ounce, malt : $1.50 per pound , water : $0.006 per gallon, yeast: $0.45 per gram} 


백터 quantity는 각 식품을 양에 매핑합니다. 예를 들어 6갤런의 스타우트를 만들 수 있는 양입니다. 

quantity = {hops: 6 ounces, malt: 14 pounds, water: 7 gallons, yeast: 11 grams} 


이제 6갤런의 스타우트를 만들 때 소요되는 비용은 어떻게 구할 수 있을까요? 

저는 여기에 벡터의 도트곱을 사용해서 표현할 줄은 몰랐습니다. 


당연히 cost · quantity를 하면 계산이 됩니다. 결과만 보면 당연한 얘기 아니야? 이렇게 생각할 수도 있지만 (단위당 비용)을 벡터로 만들고 (제품에 필요한 원료량)을 벡터로 만들어서 그것의 총 비용을 (도트곱)로 표현할 수 있다는 것이 신기했습니다. 


cost  · quantity = 2.5 * 6 + 1.5 * 14 + 0.006 *7 + 0.45 *11 = $40.992 랍니다. 

사실 계산 결과는 그다지 중요한 것이 아니죠. 내가 원하는 어떤 현상을 두 벡터와 도트곱으로 계산했다는 것이 신기했습니다. 단지 수학시간에 문제로서만 존재하는 벡터가 아닌 실생활의 백터 말이죠. 


5. 선형세계가 전부인가? 


맥주 6갤런을 만드는 실제 예제로 돌아가봅시다. 앞서 도트곱으로 구했던 것을 실제 (생산 현장)에도 쓸 수 있을까요? 조금만 생각해보세요. 


예를 들어 공장에서 제품 생산을 하게 되면 (초반에는 버리는 자재)들이 존재합니다. 그러한 것을 (초기화)라고 하지요. 그리고 들어가는 원료도 선형적으로 딱딱 맞춰서 들어가는 것이 아닙니다. 원료는 운반을 통해서 공장으로 들어오는데 평균적으로 몇 % 정도는 불량이 발생할 수도 있습니다. 


따라서 현실 세계가 단순한 벡터의 도트곱으로 이뤄지는 것은 아니죠. 그리고 앞서 말씀드렸지만 선형대수는 말대로 선형 세상을 반영하는 수학입니다. 만약 '네트워크 효과(network effect)'와 같이 기하급수적으로 발생하는 현상을 표현할 수 없습니다. 


그럼에도 불구하고 선형세상에 대해서는 배울 것이 많기 때문에 좀더 전진해보겠습니다. 


Next: 

다음에는 GF(2)라고 불리우는 갈루아 필드(Galois Field)에 대해서 알아보겠습니다. 

이름은 간지가 나지만 그리 복잡한 것은 아닙니다. 


재밌게 읽어주셨으면 좋겠네요. 

감사합니다. 


2018.10.9@ 하루에 두편을 ㄷㄷ 

매거진의 이전글 [선형대수] #2 선형대수와 벡터 개념
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari