Polar Coordinate
atan2(y,x) 함수의 인자는 왜 2개일까?
삼각함수의 역함수는 흔히 함수 앞에 arc가 붙게 됩니다.
즉, 특정 각에 대한 특정 비를 사용하는 함수들은, 특정 비율에 대해 특정 각을 나타내는 함수가 되는것이지요.
그 중 아크탄젠트의 경우, 각도에 대한 x와 y의 비율을 가졌기 때문에
역함수가 되며 그 존재가 중요해졌습니다. 벡터공간에서 x와 y 성분을 통해 각도를 구할 수 있게 되었죠.
하지만 문제가 있습니다. 비율이라는 것은 서로 각각 음수와 양수가 포함되기 때문에, 음수 및 음수 혹은 양수 및 양수에서 같은 부호를, 음수 및 양수 혹은 양수 및 음수에서 같은 부호를 반환하게 됩니다.
이렇게 손실되는 정보가 있기 때문에
선행 계산된 값이 아닌 순수한 값 두개를 인자로 받아 내부에서 처리합니다.
내부에서 처리하게 된다면
- if x>0
- if x<0 && y≥0
- if x<0 && y<0
- if x = 0 && y ≥0
- if x = 0 && y <0
… 이렇게 조건을 타 처리할 수 있겠죠.
수학에서 이야기하는 선형성의 조건
선형성. Linear하다 라고 말할 수 있습니다.
저희는 항상 Linear를 입에 달고 살지만, 정작 이 Linear한 것의 의미를 잘 몰랐다고 생각합니다.
선형적인 것은 보통 나타내면 직선처럼 보이며,
- 일반적으로 생각했을 때, 예측이 가능하고
- 프로그래밍 적으로 생각했을 때, interpolate와 extrapolate가 자유롭게 가능한 무언가
- 수학적으로 생각하였을 때, 미분값이 상수인 것
이라고 생각했습니다.
즉 두 점을 잇는 선분을 상상하며 정보가 주어지면 위치를 예상할 수 있다는 것이죠.
이걸 수학자들은 두가지 특성으로 분리했습니다.
- 가산성(Additivity) : f(x+y)=f(x)+f(y)
- 더해질때마다 추가적인 무언가가 있으면 안된다 예를 들어 상수 c가 있다면 y=ax+c , 가산성을 만족하지 않습니다
- 1차 동차성(Homogeneity) : af(x)=f(ax)
함수, 사상, 변환의 차이
- 함수(Function)의 경우는 집합과 집합의 대응관계
- 사상(Mapping)은 체계를 보존하며 서로 대응하는 관계 (벡터공간→벡터공간)
- 시스템을 유지하기 때문에 연산을 여전히 쓸 수 있습니다
- 변환(Transformation)
- 벡터에 대한 사상
- 벡터는 선형성을 가지고 있기 때문에, 선형변환(Linear Transformation)이라고 할 수 있습니다.
함수 \(f(x,y)=(ax+by, cx+dy)\)는 선형성?
두가지 특성, 가산성과 1차 동차성에 대하여 손으로 풀어보았습니다.
적고보니 읽기 힘드니 제대로 수식을 짜봅시다
가산성(Additivity)
f(x,y)=(ax+by,cx+dy)에 대하여 f(x1,y1)+f(x2,y2)=(ax1+by1,cx1+dy1)+(ax2+by2,cx2+dy2)=(ax1+ax2+by1+by2,cx1+cx2+dy1+dy2) f(x1+x2,y1+y2)=a(x1+x2)+b(y1+y2),c(x1+x2)+d(y1+y2)=(ax1+ax2+by1+by2,cx1+cx2+dy1+dy2) ∴f(x1,y1)+f(x2,y2)=f(x1+x2,y1+y2)1차 동차성(Homogeneity)
zf(x,y)=z(ax+by,cx+dy)=(zax+zby,zcx+zdy)f(zx,zy)=(zax+zby,zcx+zdy) ∴f(x1,y1)+f(x2,y2)=f(x1+x2,y1+y2)기본적으로 여기서 x1,x2,y1,y2는 모두 체에 속해있다고 가정했습니다.
따라서 덧셈의 교환법칙, 곱셈의 교환법칙, 덧셈과 곱셈의 분배법칙 등을 만족하기때문에,
가산성과 1차 동차성에 대하여 두 값이 동일하기 때문에 선형성을 만족하는 것을 알 수 있습니다.
행렬이란 무엇인가?
수를 1차원적으로 나열한 체계를 벡터라고 하였다면, 수, 문자, 함수등을 네모꼴 괄호 안에 배열하여 2차원 놓은 것이 행렬입니다.
선형변환(Linear Transformation)를 좀 더 편하게 하기 위하여 단순화 시킨 도구라고합니다.
행(row)과 열(column)을 가지고 있으며 다음과 같이 표기합니다.
[acbd]또한 행이 하나이거나, 열이 하나인 경우를 볼 수 있는데, 모습이 마치 벡터와 같습니다.
그리고 이걸 수학적으로 행이 하나인 행렬은 행벡터(row vector) [ab]
열이 하나인 행렬은 열벡터(column vector) [ab]
라고 합니다.
행렬의 곱셈 연산정리
행렬의 곱셈은 선형변환에 사용할 수 있게 해주는 수학적 도구라고 하였는데,
정확히 어떻게 동작하는지 본다면 그 의미를 알 수 있을 것 같습니다.
일단 기본적으로 스칼라와 행렬의 곱은 단순하게도 모든 원소에 대해 스칼라배 해주는 것과 같습니다. 마치 벡터에서의 스칼라배와 마찬가지로 말이죠.
A=[acbd]kA=[kakckbkd]그리고 메인인 행렬과 행렬의 곱셈을 알아봅시다.
간단하게 행렬의 곱은, 행과 열끼리 곱연산한 결과의 합을 저장합니다.
행렬 A와 B의 곱은 AB로 쓰고, 다음과 같이 정의합니다.
”AB(i,j)는, A의 i 번째 행이 이루는 행벡터와 B의 j번째 열이 이루는 열벡터의 내적이다”
무슨소리냐고요?
이것은 처리를 시각적으로 보여준 것입니다.
자 이제 더 자세하게 알아봅시다.
행렬 곱셈 연산이 가지는 성질 정리
행렬의 곱연산이 가지는 성질이라. 일단은 제일 만만한 행이 하나거나, 열이 하나인 행벡터와 열백터를 두고 생각해 봅시다.
Av=[acbd][xy]=[ax+bycx+dy]=u Av=acebdf[xy]=ax+bycx+dyex+fy=u어떤 행렬에 열벡터를 곱하였더니 새로운 열벡터가 나왔습니다.
이 과정은 m개의 행과 n개의 열을 가진 행렬 A를 n차원 벡터에 작용시켜 m차원 벡터를 만드는 것 아닐까요?
그렇습니다. 행렬은 함수와 같습니다.
어떤 입력값을 통해 출력값을 대응하는데, 이 출력값 역시 동일한 체계를 가지고 있습니다.
즉 행렬의 곱셈은 사상(mapping)입니다. 사상이란 말은 저에게 조금 낯설다보니, u의 경우 각 성분이 기존 성분 x,y의 선형결합이므로 선형변환(Linear Transformation) 이라 말해도 되겠군요
자 여기서 잠시, 그러면 m과 n이 동일하다면 동일한 차원의 벡터가 나오겠죠?
이걸 조금 더 분석해봅시다.
Av=[acbd][xy]=[ax+bycx+dy]=u라면
{x↦ax+byy↦cx+dy 입니다. 아, ↦는 mapsto, 대응관계를 나타냅니다.
그렇다면 여기서 항상 같은 꼴이 나올려면 어떡해야할까요?
{x↦1x+0yy↦0x+1y 라면 {x↦xy↦y 가 될 수 있겠죠?
∴a=1,b=0,c=0,d=1 Av=[1001][xy]=[1x+0y0x+1y]=[xy]=u Av=100010001xyz=1x+0y+0z0x+1y+0z0x+0y+1z=xyz=u이렇게 열의 수 = 행의 수 = k인 행렬에서 a00,a11,a22...akk 의 값만 1인 행렬을
항등행렬(identity matrix) 혹은 단위행렬 이라고 합니다. 기호로는 I를 사용합니다.
그렇다면 이 대각선에만 값을 가지는 행렬에 1이 아닌 숫자를 가지게 된다면, 벡터의 각 성분에만 배율을 줄 수 있지 않을까요?
아무튼 그렇습니다.
회전 변환을 행렬로 표현
아까 설명했던 선형변환을 다시 생각해봅시다.
Av=[acbd][xy]=[ax+bycx+dy]=u그러면 이건 이렇게 변환된다고 볼 수 있습니다.
{x↦ax+byy↦cx+dy그리고 저번주차의 과제물, 회전변환에서 식을 인용하자면
(x,y)=x⋅e1+y⋅e2v′=x⋅(cosθ,sinθ)+y⋅(−sinθ,cosθ)v′=(x⋅cosθ−y⋅sinθ,x⋅sinθ+y⋅cosθ)과 같이 됩니다.
이걸 이제 임의의 변환용 행렬 A에 대하여 v′을 결과로써 표현한다면
Av=[acbd][xy]=[x⋅cosθ−y⋅sinθx⋅sinθ+y⋅cosθ]=v′ ∴A=[cosθsinθ−sinθcosθ]짜잔. 회전변환을 행렬로써 만들어 둘 수 있게 됩니다.
이렇게 선형변환을 이루는 것이 행렬곱셈이라고 생각합니다.
이제 다시 성질을 정리해보죠.
교환법칙 : 비가환적(Not communicative)
AB=[acbd]⋅[egfh]=[a⋅e+b⋅gc⋅e+d⋅ga⋅f+b⋅hc⋅f+d⋅h] BA=[egfh]⋅[acbd]=[a⋅e+c⋅fa⋅g+c⋅hb⋅e+d⋅fb⋅g+d⋅h]연산 순서의 변경은 치명적으로 작동합니다.
결합법칙 : 성립
일단 전제조건을 걸어야 할 것 같습니다.
A의 열의 개수 = B의 행의 개수 = α
B의 열의 개수 = A의 행의 개수 = β
(AB)C=([acbd]⋅[egfh])⋅[ikjl]=[ae+bgce+dgaf+bhcf+dh]⋅[ikjl]=[((ae+bg)i+(af+bh)k((ce+dg)i+(cf+dh)k)((ae+bg)j+(af+bh)l)((ce+dg)j+(cf+dh)l)]=[aei+bgi+afk+bhkcei+dgi+cfk+dhkaej+bgj+afl+bhlcej+dgj+cfl+dhl] A(BC)=[acbd]⋅([egfh]⋅[ikjl])=[acbd]⋅[ei+fkgi+hkej+flgj+hl]=[a(ei+fk)+b(gi+hk)c(ei+fk)+d(gi+hk)a(ej+fl)+b(gj+hl)c(ej+fl)+d(gj+hl)]=[aei+afk+bgi+bhkcei+cfk+dgi+dhkaej+afl+bgj+bhlcej+cfl+dgj+dhl]두 식은 내려가게 된다면 곱셈의 결합법칙 및 덧셈의 교환법칙에 의해 같다는걸 알 수 있습니다.
∴ 행렬의 곱셈에서는 결합법칙이 성립합니다.
분배법칙 : 성립
수식쓰다가 오타나면 죽을 것 같습니다.
어짜피 행렬은 모든 원소에 행해지는 연산이 동일하다고 볼 수 있습니다.
대충 3개의 행렬의 곱을 코드로 표현하면 이런 꼴 아닐까요?
1
2
3
4
5
6
7
8
| //Mat = A*B*C
for(var h = 0; h < beta ;++h)
{
for(var k = 0; k < alpha; ++k)
{
Mat[i,j] += (A[i,k] * B[k,h] * C[h,j])
}
}
|
그러면 하나의 연산을 기준으로 이번에는 한번 프로그래머스럽게(?) 해보자구요.
일단 행렬의 덧셈연산은 같은행,같은 열끼리 더한것과 같다고 하였습니다. 즉 B+C=[(bij+cij)] 라고 가정합니다.
그리고 아까의 가정도 여전히 놔둡시다.
A 의 열의 개수 = B의 행의 개수 = α
또한 AB=X 라 가정할때, X의 원소 xij 는 다음과 같이 수학적으로? 정의할 수 있습니다
xij=k=1∑αaikbkj=(ai1b1j+..aiαbαj)그러므로 이에 따라 분배법칙을 다시 정리해보죠
A(B+C)(i,j)=k=1∑αaik(bkj+ckj)=k=1∑α(aikbkj+aikckj)=k=1∑αaikbkj+k=1∑αaikckj=AB(i,j)+AC(i,j)∴ 행렬의 곱셈에서는 분배법칙도 성립합니다.
전치연산
전치(Transpose)는 행과 열을 뒤바꾼 것입니다.
Transpose의 T를 따와 A의 전치행렬을 AT라고 표현합니다.
행과 열을 뒤바꾼 것이기에 (AT)T=A입니다.
A=[adbecf],AT=abcdef과 같이 표현할 수 있습니다.
행벡터 및 열벡터에 대해서도 전치연산을 할 수 있는데, 이때 나오는 결과는 행렬이 바뀌였기때문에 행벡터 ↦열벡터 , 열벡터 ↦행벡터 입니다.
아까 설명했던 대각선 값과 하여 재미있는게 생각났습니다.
원본과 전치연산을 행한 사본을 곱하면 어떻게될까요?
A=[adbecf],AT=abcdefAAT=[aa+bb+ccad+be+cfad+be+cfdd+ee+ff]무려 대각선을 기준으로 대칭인 행렬이 됩니다.
이런 행렬은 대칭행렬(symmetric matrix)라고 부른다더군요.
이걸 언제쓰는지는 저도 모르겠습니다.
극좌표계 활용 및 표현
r=sin(a⋅θ)극 좌표계에서 sin(θ)를 통해 원을 그릴 수 있습니다.
그리고 그 주기를 조절한다면 겹쳐진 원을 만들 수 있죠. 그래서 한번 만들어 보았습니다.
앗! 정리되지 않은 미사용 소스가 일부 들어있을 수 있습니다
https://gist.github.com/ashuatz/fde778e98f9dba9fac0e91fe54c1e03d
y=ax+b는 왜 선형성을 만족하지 않을까?
선형변환을 시각적으로 본다면, 변하지 않는 사실이 두가지가 있습니다.
기저벡터를 기준으로 그리드를 그렸을 때, 그리드는 평행하다는 사실과,
원점은 움직이지 않는다 입니다.
즉 무언가를 할 때 마다 원점이 바뀌게 된다면, 이는 선형적이지 않다고 볼 수 있는게 아닐까요?
혹은 입력의 반대를 넣어서 과거로 돌아갈 수 없다면, 이는 선형적이지 않다고 생각하는게 아닐까요?
같은 크기의 반대부호를 가지는 스칼라배를 통해 원점으로 돌아갈 수 없다면, 예측도, 보간도, 보외도 아무것도 할 수 없게되니 선형적이지 않죠. 일종의 하나의 상태로만 흐를 수 있는 일방통행이 되기 때문이라고 생각합니다.