'외적의 최대와 최소'에 해당되는 글 1건

  1. 2015.12.20 R (7) 벡터의 곱 - [2] 외적 (outer product, cross product, vector product, tensor product) (4)

지난번 포스팅에서 벡터의 곱 첫번째로 내적 (inner product, dot product, scalar product, projection product)에 대해서 알아보았습니다.


이번에는 벡터의 곱 두번째로 외적 (outer product, cross product, vector product, tensor product)에 대해서 알아보도록 하겠습니다.  외적을 나타내는 똑같은 말이 여러개 있는데요, 아래에 외적 설명한 내용을 보다보면 자연스레 이해가 되실것 같습니다.



[ 2 종류의 벡터 곱 (2 types of vector multiplication) ]





아래에는 내적과 외적을 비교한 표입니다. 처음 보면 잘 이해가 안갈 수도 있는데요, 아래의 내용을 한번 쭉 보시고 마지막에 요약 정리할 때 참고하시면 도움이 될 듯 합니다. 큰 차이점 하나만 들자면, 내적(inner product)은 계산 결과로 스칼라(scalar)가 되지만, 외적(outer product)은 계산 결과가 두 벡터 a와 b에 수직이 되는 벡터(vector)가 된다는 점입니다. 



[ 내적와 외적 비교 ]

(comparison between inner product and outer product)




이제 외적(outer product)에 대해서 차근차근 설명해 보겠습니다.



(1) 외적의 표기 (notation and symbol of outer product)


두 벡터 a, b의 외적은 a x b 라고 쓰고 "a cross b"라고 읽습니다.  외적을 교차곱 (cross product)이라고도 부르는 이유가 여기에 있습니다.  (참고로, 내적은 a·b 로 표기하고 a dot b 라고 읽으며 dot product 이라고도 함)





(2) 외적의 정의 (definition of outer product) 


두 벡터 a와 b에 모두 수직이 되는 벡터로서, v와 수직이 되는 두 벡터 a와 b는 공간 속의 평면 위에 있는 한 평행사변형의 두 변을 이루게 되며, 그 벡터의 길이(힘의 크기) |v|는 평행사변형의 면적과 같습니다.







(3) 외적 계산을 쉽게 기억하는 방법 (easy way to memorize outer product calculation method)


내적 대비 외적 계산하는 방법이 많이 어려워보일 수 있는데요, 아래처럼 벡터 a와 b의 component를 두번씩 세로로 써 놓고 두번재째 행부터 순차적으로 대각선으로 곱하고 빼나가면 v1, v2, v3를 구할 수 있습니다.





(4) 벡터 외적 R 사용자 정의 함수 (R user-defined function of outer product)


벡터 외적을 구하는 R 패키지, 함수가 분명 있을 것 같은데요, 제가 아직 못찾았습니다.  그래서 위에 소개한 공식대로 아래에 사용자 정의함수 프로그래밍 한거 소개합니다.  혹시라도 외적 구하는 R 패키지랑 함수 알고 계신분은 댓글로 공유해주시면 감사하겠습니다. 



> ##---------
> # (2) cross product of vector with 3 components : user defined function
> # a * b = |a|*|b|*sin(theta)*n
> 
> cross_prod_fun_v3 <- function(a, b) {
+   if(length(a)!=3 | length(b) !=3) stop('number of vector component is not 3')
+   c_x <- a[2]*b[3] - a[3]*b[2]
+   c_y <- a[3]*b[1] - a[1]*b[3]
+   c_z <- a[1]*b[2] - a[2]*b[1]
+   cross_prd <- c(c_x, c_y, c_z)
+   return(cross_prd)
+ }
> 
> a <- c(2, 3, 4)
> b <- c(5, 6, 7)
> 
> cross_prod_fun_v3(a=a, b=b)
[1] -3  6 -3

 



R의 %*%, crossprod() 함수는 외적이 아니라 내적을 계산한 결과를 내보내주므로 헷갈리지 않도록 해야겠습니다.  아래에 a=(2, 3, 4)와 b=(5, 6, 7) 벡터를 가지고 %*%, crossprod() 함수를 적용해봤더니 내적으로 계산해서 스칼라(scalar)가 나온것을 알 수 있습니다. (not vector, but scalar)



> # cautions: crossprod() function of R produces dot product, not cross product
> a <- c(2, 3, 4)
> b <- c(5, 6, 7)
> 
> a %*% b # dot product
     [,1]
[1,]   56
> 

> crossprod(a, b) # is the same with dot product [,1] [1,] 56 >

> t(a) %*% b # is the same with dot product
     [,1]
[1,]   56

 




(5) 오른손 법칙 (Right-handed triple), 오른손 직교좌표계 (Right-handed Cartesian coordinate system)


a와 b 두 벡터의 외적이 벡터 a와 b에 직교 (right angle)하는 외적 v 벡터의 방향을 알 수 있는 방법으로 오른손 좌표계(Right-handed Cartesian coordinate system)을 사용합니다.  오른손의 엄지가 벡터 a, 오른손의 검지가 벡터 b, 그리고 오른손의 중지를 엄지와 검지랑은 수직이 되게 폈을 때가 외적 벡터 v 가 되겠습니다.  아래 그림을 참고하시지요. (제 손 사진이예요. ㅎㅎ)



오른손 법칙은 오른손 나사를 연상해도 되는데요, 벡터 a를 벡터 b의 방향으로 각도 θ만큼 회전시켰을 때 오른손 나사가 나아가는 방향과 같은 방향이 외적 v의 방향이 되겠습니다. 

 

왼손 좌표계도 있는데요, 오른손 좌표계와는 중지의 방향이 반대가 된다는 점만 다릅니다.




(6) 길이와 싸인함수를 이용한 외적 구하기 (outer product calculation with length and sine function)


내적(inner product)을 계산할 때는 길이(length)와 코사인(cosine)을 사용해서 구하는데요, 외적(outer product)은 벡터의 길이(length)와 싸인(sine) 함수를 이용해서 구할 수 있습니다.  (증명은 생략합니다)





(7) 두 벡터로 이루어진 평형사변형의 넓이 계산 (calculation of the area of the parallelogram spanned by vector a and b


두 벡터 a와 b의 외적은 두 벡터로 이루어진 평행사변형의 넓이와 같다고 하였습니다.  두 벡터 a와 b로 이루어진 평행사변형의 넓이를 구해보면 (6)번에서 제시한 두 벡터의 외적 공식과 일치함을 알 수 있습니다.  두 벡터로 이루어진 평행사변형의 넓이를 구하고 싶으면 두 벡터의 외적을 구하면 되겠습니다.







(8) 외적의 성질 (properties of outer product)


외적은 내적과 같은 성질도 있고 다른 성질도 있습니다.  임의의 실수와의 곱은 순서에 상관없이 모두 동일하다는 점과 분배법칙(distributive law)을 만족한다는 점은 내적과 외적이 동일합니다.  반면에 내적은 교환법칙(commutative law)이 성립하지만, 외적은 교환법칙을 성립하지 않는다(anti-commutative) 점에서 차이가 있습니다.  그리고 외적은 결합법칙도 일반적으로 성립하지 않는다(not associative)는 점 때문에 괄호를 생략하면 안됩니다. 내적은 결과가 scalar 이지만 외적은 결과가 vector이므로 서로 다른 성질을 가지게 되는 것입니다.  






(9) 외적의 최대, 최소 (max, min of outer product)


(6)번에서 외적을 구하는 공식이 v = |a|*|b|*sin(θ)n 이라고 하였는데요, 이 공식에서 두 벡터가 수직(angle between a and b = 90 degree)일 때 외적이 최대(outer product is max), 두 벡터가 평행일 때(angle between a and b = 0 degree) 외적이 최소(outer product is min)임을 유추할 수 있습니다.



많은 도움 되었기를 바랍니다.


행렬, 벡터 관련 포스팅은 아래 링크를 걸어놓았습니다.

 

행렬 기본 이해

특수한 형태의 행렬

가우스 소거법을 활용한 역행렬 계산

행렬의 기본 연산 (+, -, *, /, ^, %*%, colMeans(), rowMeans(), colSums(), rowSums()) 

벡터의 기본 이해와 연산 (vector: addition, subtraction, multiplication by scalar)

벡터의 곱 (1) 내적 (inner product, dot product, scalar product, projection product)

 

이번 포스팅이 도움이 되었다면 아래의 공감 ♡ 꾸욱~ 눌러주세요. ^^



Posted by R Friend R_Friend