피보나치 수열을 선형대수로 풀어보자

 
피보나치 수열 해체에 멱급수가 끝인 줄 알았건만... 또 새로운 insight로 선형대수로도 풀어볼 수 있게 됐네요..
1. 계차의 등비수열로 풀기
2. 특성방정식으로 풀기
3. 멱급수로 풀기

 
 

1. 선형대수로 풀 수 있다고?

우리는 이미 앞에서 피보나치 수열의 일반항도 구했고, 여러 방법으로 구해보기도 하였습니다.
이 과정을 선형대수로도 할 수 있다는 것이 이 포스팅의 골자가 되겠네요.
 
 

2. 어떻게 풀건데?

2-1. 피보나치 수열을 선형대수적으로 나타내기

일단 수열 FnFn을 선형대수적으로 정의해봅시다.
Fn=Fn1+Fn2
[FnFn1]=[1110]CompanionMatrix[Fn1Fn2]
이렇게 표현 가능합니다. 여기서 잘 보면 FnFn1 사이에 생기는 행렬을 Companion matrix(동반 행렬)이라고 하는데, 어떻게 저렇게 표현되는지는 사실 간단합니다.
일단 그냥 FnFnFn1을 성분으로 갖는 열벡터로 정의합시다.(선형대수에서 벡터의 의미는 열이나 행 하나로 정의된 행렬을 뜻합니다)
Fn=[FnFn1]
이 될 것이고, 여기서 Fn=Fn1+Fn2라는 피보나치 수열의 정의를 이용하면
Fn=[Fn1+Fn2Fn1]
덧셈의 항등원인 0까지 넣어주면
Fn=[Fn1+Fn2Fn1+0]
좀 더 보기 편하게 곱셈의 항등원 1도 표시해주죠
Fn=[1Fn1+1Fn21Fn1+0Fn2]
행렬의 곱셈공식을 생각해서 분리해보면
Fn=[1110][Fn1Fn2]
여기서
Fn=[FnFn1]
이므로
[FnFn1]=[1110][Fn1Fn2]
이렇게 유도가 됩니다. 그리고 이를 벡터로 표기하면
Fn=[1110]Fn1
이렇게도 표현할 수 있겠죠?
 

2-2. 피보나치 수열을 변환하기

자, 그럼 아주 재밌게도 FnFn1 사이에는 companion matrix의 곱만큼 차이가 납니다.
가령, Fn1을 표현해보아도
Fn1=[1110]Fn2
일 것이고, 이를 위 식에 대입을 하면
Fn=[1110]Fn1
Fn1=[1110]Fn2
Fn=[1110][1110]Fn2
Fn=[1110]2Fn2
가 되겠고, 이제 조금 표기의 편의성을 위해 companion matrix를 A라고 놓으면
Fn=A2Fn2
라고 표기할 수 있겠습니다. 자, 다시 돌아가서 FnFn1 사이에는 companion matrix의 곱만큼 차이가 난다고 했습니다.
그렇다면 이를 이용하면 FnF1으로 표현도 가능하겠네요?
그렇다면 companion matrix A는 n-1번 곱해지면 되겠습니다.
Fn=An1F1
열벡터를 풀어서 행렬로 보게 된다면
[FnFn1]=An1[F1F0]
여기서 F1=1,F0=0이므로,
[FnFn1]=An1[10]
이렇게 깔끔하게 정리가 되겠네요!
여기까지는 아주 순조롭습니다! 여기까지는...
 
자, 여기서 어려움에 봉착합니다.
행렬의 곱은 일반 적인 대수적 곱이랑은 다르다고 했습니다.
그렇다면 곱으로 연결되어있는 행렬, 즉 행렬의 거듭제곱은 쉬울까요? 각 요소에다가 각자 다 거듭제곱을 붙여주면 되는걸까요?
아뇨.. 일반적으로는 매우 어렵습니다. 대수의 거듭제곱처럼 쉬웠으면 얼마나 좋을까요..
그렇다고 거듭제곱으로 압축표기된 행렬을 쫙 풀어놓고 하나하나 곱하고 있자니 그것도 조금 메롱합니다..
물론 앞의 몇번을 반복하고 수학적 귀납법으로 이런 규칙이 있다!하고 찾은 뒤 적용해주어도 괜찮지만, 우리는 뭔가 좀 더 신박한 방법을 찾아보려 합니다.
그렇다면 행렬을 일반 대수처럼, '행렬의 거듭제곱 = 요소의 거듭제곱'으로 나타낼 수 있는 행렬이 있을까요?
 
예, 행렬의 곱셈에 대해 조금만 생각해보면, '대각행렬'은 자기 자신이 속한 행과 열 중에서 자기 자신을 제외한 다른 요소들이 전부 0이므로 행렬의 곱셈을 수행하여도 자기 자신의 거듭제곱만 결과로 나타나게 됩니다! 즉,
[1002]2=[1002][1002]=[1004]=[120022]
오! 결국 행렬의 거듭제곱을 요소의 거듭제곱으로 표현할 수 있는 방법을 찾았습니다!
그럼 행렬을 대각행렬로 바꿔주면 되겠네요!? 근데.. 어떻게 해야하죠...?
 
여기서 나오는 개념이 바로 '대각화'입니다.
연역적으로 너무나도 당연하게 한 행렬을 대각행렬로 바꿔주는 작업이죠.
그런데, 딱 봐도 뭔가 그럴싸해보이는 작업이 맨입으로 가능할까요? 아니겠죠...
그래서 대각화에 앞서서 바로 '고유값 분해(eigen decomposition)'가 필요합니다.
갑자기 뭔가 난이도가 엄청 뛴 느낌입니다.
 

2-3. 대각화를 위한 고유값 분해

간단하게 고유값 분해를 설명하자면, '어떤 행렬을 어떤 벡터에 곱한 값이 그 어떤 벡터의 상수배 만큼과 같은 그 어떤 벡터와 상수 찾기'라고 생각하시면 됩니다.
좀 더 설명해보자면, 행렬의 곱은 기본적으로 어떤 공간에서의 좌표변환 역할을 합니다.
그러나 이 행렬의 변환을 거쳐도 변하지 않는 그런 벡터를 찾는 것이 고유벡터(아이젠 벡터, eigen vector)를 찾는 과정입니다.
그리고 물론 이 벡터는 변환을 거쳐서 특정 상수배만큼 길이가 길어지거나 짧아질텐데, 바로 그런 상수를 찾는 것이 고유값(아이젠 벨류, eigen value)을 찾는 과정입니다.
그리고 이둘이 한번에 이루어지기때문에 고유값분해라고 명명지어진 것이죠.
그럼 실제로 한번 어떻게 이루어지는지 봐 볼까요?
아, 참고로 고유값 분해는 정방행렬에서만 적용된답니다. 이를 확장한게 특이값 분해(singular value decomposition)죠.
 
자, 일단 '어떤 행렬과 곱한 열벡터' 즉, '행렬변환을 한 열벡터'라는 식을 세워봅시다.
지금 쓰는 A 행렬은 위에서의 companion matrix였던 A행렬과 다른 행렬입니다.
Av
그리고, '상수배만큼 변한 열벡터'도 식으로 세워보죠
λv
이젠 이 둘을 합쳐 동치로 놓습니다. 뜻은 아까 말했듯 'A 행렬 변환을 거친 벡터 = 특정 상수배 만큼 변한 벡터'입니다. 결국 벡터의 방향은 바뀌지 않고 크기만 바뀐셈이죠
Av=λv
그리고 이걸 풀기위해 이항하여 =0으로 바꿔줍니다.
Avλv=0
공통된 벡터를 묶어줍니다. 행렬에서는 곱하는 방향이 중요하기 때분에(교환법칙 성립 x) 같은 방향으로 묶어줍니다.
(Aλ)v=0
근데 여기서 문제가 생깁니다. A는 행렬이고, λ는 스칼라거든요..
그럼 어떻게 처리해줘야할까요? 행렬을 스칼라로? 스칼라를 행렬로?
 
네, 스칼라 값을 행렬로 변환해줘야합니다.
왜냐하면 지금 저희는 어떤 변환을 하더라도 변하지 않는 벡터를 찾는 중이니까요, 어떤 변환을 하는 행렬을 찾아야죠
그러면 λ를 어떻게 행렬로 변환 할 것이냐...
일단 행렬의 뺄셈을 하려면 행렬의 크기가 맞아야겠죠?
그럼 이 스칼라 값에 어떤 행렬을 곱해주면 될텐데.. 어떤 행렬을 곱해줄까요..? 그냥 A행렬과 크기만 맞는 행렬이면 다 되는 걸까요?
 
물론 아니겠죠..! 스칼라 값을 어떤 행렬 공간에서 동일하게 작용하는 행렬로 확장하려면 단위행렬을 곱해줘야 합니다.
좀 더 정확하게 말하자면 [단위행렬은 '모든 벡터를 자기 자신으로 보존'하는 유일한 선형변환]이기 때문입니다.
어떻게 보자면 곱셈의 항등원과 같은 뜻입니다.
자, 이렇게 알아냈으니 다시 식을 써보죠
(AλI)v=0
네, 이게 바로 고유값 분해의 식입니다.
 
그리고 여기서 잘 보자면, 결국 (AλI)가 0이거나, v가 0이어야지만이 이 식이 성립함을 알 수 있습니다.
그런데, 저희는 처음 시작부터 고유 벡터 v가 있다! 하고 가정을 하고 출발했으니까 v는 0이 되면 안됩니다. 결국, (AλI)가 0이 되어야 하는데... 이게 0이 되는걸 어떻게 찾을 수 있을까요?
행렬을 단 하나의 스칼라 값으로 바꾸는 방법은 여러가지가 있지만, 그 중에서도 행렬식(determinant)이 가장 대표적입니다.
 

그냥 간단하게 스칼라 값으로 바꾼다고 했지만, 사실 고등학교정도의 행렬을 배웠던 사람이라면 행렬식은 좀 익숙할 겁니다.
바로 역행렬을 만들때 필요한 친구이기 때문인데요, 고등학교에서는 역행렬을 만들 때, (abcd)1=1adbc(dbca)로 배웠을 거에요.
그리고 사실 adbc가 행렬식(determinant)이죠.
그리고 여기서 '행렬식이 0이면, 역행렬이 없다' = '역행렬이 존재하려면 행렬식이 0이면 안된다'는 결론이 나옵니다.
결국 이 문제에서도 (AλI)가 역행렬이 있으면 안되기 때문에 det(AλI)(행렬식 연산을 det라고 줄여서 표기합니다)가 0인 것을 찾는 겁니다.
여담으로 (AλI)가 역행렬이 된다면,
(AλI)1(AλI)v=(AλI)10
v=0
즉, 고유벡터가 영벡터가 되어버리므로 결국 저희가 세웠던 가정이 맞지 않게되어버립니다.

 
행렬식은 이미 아시다시피 2차는 아주 간단하게 (abcd) 행렬에서 adbc입니다.
3차부터 복잡해지지만, 일단 저희는 지금 피보나치 수열을 구하는 수준에서 2차까지 알아보겠습니다.
 
자 그럼 다시 돌아와서, 우리는 지금 companion matrix를 대각화 하고 싶고, 그래서 방법을 찾다보니 우선 고유값 분해를 해야한다는 걸 알았습니다.
그러면 companion matrix를 고유값 분해합시다.
(AλI)v=0
여기서 A는 현재 companion matrix의 A입니다.
det(AλI)=0이면 된다고 했습니다.
일단, 실제값으로 바꿔보죠
det([1110]λ[1001])=0
det([1110][λ00λ])=0
det([1λ11λ])=0
 
여기서 행렬식 연산을 해줍니다. adbc
(1λ)(λ)1=0
λ2λ1=0
풀어주면 되겠죠? 근의 공식에 넣어서 풀어주면 됩니다. 여기까지 오면서 정말 많이 풀었으니까(다른 포스팅에서 피보나치 수열 풀던 가락..) 여기서는 그냥 바로 뿅 가겠습니다.
λ=1+52or152
λ1=1+52,λ2=152
이렇게 놓을 수 있겠네요!
고유값(eigen value) 찾았습니다!
 
그럼이제 고유벡터를 찾아야겠죠?
고유벡터의 요소를 ab라고 놓으면,
v=[ab]
λ값이 두개였으니까 하나만 살펴보죠
(Aλ1I)v1=0 이므로,
[1λ111λ1][ab]=0 이겠네요.
풀면,
{(1λ1)a+b=0aλ1b=0
결국, a=λ1b이고
v1=[λ1bb]
여기서 고유벡터는 방향만 나타내주면 되는 성분이니 그냥 가장 간단하게 b에다가 1 대입하면
v1=[λ11]
요렇게 정리가 됩니다. λ2에 대해서 정리해도 똑같죠!
고유벡터(eigen vector) 찾았습니다!

위에서 왜 연립방정식 안푸냐... 하시는 분들도 계실텐데.. 두번째 식 a=λ1b을 첫번째 식에 대입해서 풀어보시면 그냥 의미없이 b0=0이런 결과를 얻으실 겁니다...

 
자, 그리고 이제 이 고유벡터를 column으로 stack한 새로운 행렬 P를 정의해보죠.(열벡터를 쌓아서 행렬 만들기는 흔한 조작중에 하나입니다)
P=[v1v2]=[λ1λ211]
자, 이제 대각화를 할 준비를 마쳤습니다.
어휴.. 쓰다보니까 진짜 엄청 기네요! 잘 따라와주세요!(사실 보통은 따로따로 파편적으로 공부하지만 이렇게 한번에 쭉 보는것도 도움이 된답니다!)
 

2-4. 드디어 대각화

자, 우리의 염원이던 '행렬의 거듭제곱 = 요소의 거듭제곱 그러나 답은 바뀌지 않는'을 찾기위한 여정의 막바지 입니다.
일단 우리는 companion matrix인 A를 알고있고, 고유벡터를 쌓아서 만든 P라는 matrix를 알고있습니다.
일단 이 두개. 곱해보죠.
AP=A[v1v2]
자, 혹시 여기서 설명이 조금 헛갈리시면 행렬곱셈 개념정리를 한번 참조해주시기 바랍니다.
matrix와 column끼리 곱한 column을 모아도 행렬의 곱셈이 성립한다고 했습니다.
그렇다면 여기서 이렇게 식을 변형할 수 있겠네요?
AP=[Av1Av2]
근데 위에서 우리는 고유값 분해를 했습니다.
고유값 분해식은
Av=λv
이거였죠.
어? 얘를 또 변형 가능해보입니다?
AP=[Av1Av2]=[λ1v1λ2v2]
 
자, 여기서 아까 [단위행렬은 '모든 벡터를 자기 자신으로 보존'하는 유일한 선형변환]이라고 했습니다.
즉, 이 단위행렬에 어떤 벡터하나가 곱해졌을 때 자기 자신이 나온다는 말이죠.
그럼 이 단위행렬이 스칼라배가 되면, 당연히 어떤 벡터도 방향은 그대로이고 스칼라배가 된 벡터가 나오겠죠?
자, 근데 여기서 벡터가 쌓인 행렬이 곱해지면 어떻게 될까요?
 
가령
[v1v2][1001]=[v1v2]
이건 자명하죠? 결국 [단위행렬은 '모든 벡터를 자기 자신으로 보존'하는 유일한 선형변환]이 맞네요
그렇다면 일정 스칼라배 한건?
[v1v2][5005]=[5v15v2]
오, 역시 벡터의 배수배가 되는군요? 그럼 좀 더 나아가서 단위행렬이 아니라, 대각선으로 다른 값을 주면 각 벡터마다 곱해지는 배수가 달라지겠네요?
[v1v2][2005]=[2v15v2]
오~ 그럼 다시 돌아가서
AP=[λ1v1λ2v2]
이친구를 다시 보면...
오!
AP=[v1v2][λ100λ2]
이렇게 변환이 되겠군요!
그리고 우리는 이 결과로부터 아주 재밌는 결과도 같이 얻었습니다! 네! 결국 대각선인 행렬을 찾아냈어요!
 
이 대각선 행렬을 D라고 해볼께요!
그럼 수식은
AP=A[v1v2]=[Av1Av2]=[λ1v1λ2v2]=[v1v2][λ100λ2]=PD
AP=PD가 되겠죠!
여기서 P의 역행렬을 좌우변 모두 곱해주면!
A=PDP1
와! 결국 companion matrix를 연역적 방법으로 대각행렬로 변환하는데 성공하였습니다!!!
 
그리고 이 변형에는 아주 재밌는 특성이 있는데요
A2=(PDP1)(PDP1)이 되잖아요? 근데 P1P는 상쇄되니까
A2=PDDP1=PD2P1이 되면서, 결국 대각행렬만 제곱이 되는 꼴이 된답니다!
그럼 대각행렬의 거듭제곱은 뭐다? 요소의 거듭제곱으로 나타낼 수 있다!
와! 해결!
그럼 우리 companion matrix의 거듭제곱 문제가 해결되었어요!
 

2-5. 대각행렬로 다시나타내기

아까 
[FnFn1]=An1[10]
요렇게 깔끔하게 정리된 식을 얻었으나, 결국 companion matrix의 거듭제곱에 막혔던 것을 이번에 우리는 쉽게 파고들 수 있습니다.
An1=PDn1P1
[FnFn1]=PDn1P1[10]
이제 진짜로 식을 풀어봅시다
 
 

3. 결론

여기서 P1
P1=1λ1λ2[1λ21λ1]
[FnFn1]=P[λ1λ211]Dn1[λn1100λn12]P11λ1λ2[1λ21λ1][10]
[FnFn1]=1λ1λ2[λ1λ211][λn1100λn12][1λ21λ1][10]
[FnFn1]=1λ1λ2[λn1λn2λn11λn12][1λ21λ1][10]
[FnFn1]=1λ1λ2[λn1λn2λn11λn12][11]
[FnFn1]=1λ1λ2[λn1λn2λn11λn12]
그리고 여기서 우리는 Fn 성분만 필요하므로 (개념적으로는 1번 요소만 꺼내서 쓰면 될 것이고, 수식적으로는 양변에 [1 0]을 곱해주면 될 것이다)
Fn=1λ1λ2(λn1λn2)
여기서, λ1=1+52,λ2=152이므로
 
Fn=15((1+52)n(152)n)
 
와! 선형대수로 피보나치 수열 풀기 성공!

선형대수[Linear Algebra]: 행렬곱셈(Matrix multiplication)의 개념 정리

 

1. 서론

선형대수를 하면서 사실 제일 큰게 수를 다루는 '감각'이 아닌가 싶다.

'엄밀하게 왜이래?'를 따지는 것도 중요하지만, 사실은 약간 '어~ 이게 이러니까 이렇게 되네? 오 쫌 재밌네?'하면서 받아들이고 사용하다보면 나중에 크게 이해되는 때가 오기도 한다.(그리고 그건 어떤 내부적이든 외부적이든 깨달음의 순간이 왔을 때 익숙했었어야지만이 깨달을 수 있다는 부분이기도 하다..)

그리고 선형대수는 아주 재밌게도, 직관적으로 '어 이거 되는거 아냐?'했을 때 되는 경우가 굉장히 많다. 사실 그래서 선대 수학자들이 '이게 왜 돼!?!?'하면서 연구를 더욱 더 심도있게 진행시키지 않았을까~ 하는 생각도 든다.

그래서 결론은 다른 고급(?)선형대수를 들어가기 전에, 가장 기본적인 행렬 곱셈의 개념부터 한번 정리하고 가면 좋겠다고 생각을 했다.

우리가 흔하게 아는 고등학교 때 배웠던 요소별로 채워넣는 행렬곱셈 말고도 행렬을 가로로(열로) 세로로(행으로) 찢어서 계산도 가능하다는 아주 재밌는 사실이 있기 때문이다.

 

2. 행렬의 곱셈방식은 몇가지?

그렇다면 행렬의 곱셈방식은 몇가지나 있을까?

물론 '방식'이 여러가지 인거지, '답'은 하나다.

결론부터 말하자면 곱셈방식은 사실 네가지다.

행렬을 행과 열로 찢어서 조합할 수 있다고 하면, 꽤나 많은 경우의 수가 나오겠지만

행렬곱셈을 수행하면 그 대원칙인 rowcolumn가 수행되고, 따라서 (n x m) * (m x k) = (n x k)의 행렬이 나온다는 것만 알고 있으면 경우의 수는 사실 아래의 네가지로 귀결된다.

행(row) * 열(column), 행렬(matrix) * 열(column), 행(row) * 행렬(matrix), 열(column) * 행(row)

두 행렬을 모두 행과 열로 찢어서 곱해 볼 수 있는 두가지 방식이 있을 것이고

또 다른 하나는 한 행렬 전체를 다른 행렬을 찢어서 곱해볼 수 있을 것이다.

그렇다면 남은 건 하나. '진짜 되는가?'이다.

사실 '개념'적으로 저렇게 나눠 놓은거지, 사실 실제 계산을 하면 결국 rowcolumn이 수행되기때문에 결과는 항상 모두 같을 수 밖에 없다. 다만 저런 개념을 알고 있으면 행렬 곱셈을 조작할 때 좀더 자유롭게 조작이 가능해진다는 장점?

 

3. 간단한 행렬로 진짜 되는지 보기

A=[1234]

B=[1213]

두 행렬을 가지고 AB=C를 해 볼 예정입니다.

 

3-1. row * column

가장 기본적인 행렬 곱셈 방식이죠.

C=[a11b11+a12b21a11b12+a12b22a21b11+a22b21a21b12+a22b22]

=[11+2112+2331+4132+43]

=[38718]

 

3-2. matrix * column

여기서부터 재밌어집니다. matrix*column은 결과를 column으로 내보내고, 그렇기 때문에 결과에서 column으로 stack됩니다.

C=[A[11]A[23]]

=[[1234][11][1234][23]]

=[38718]

 

3-3. row * matrix

row * matrix는 결과를 row로 내보내고, 결과적으로 row로 stack됩니다.

C=[[12]B[34]B]

=[[12][1213][34][1213]]

=[38718]

 

3-4. column * row

두 행렬을 일반적인 행렬 곱셈 방식인 row*column이 아닌 반대로 column*row로 찢어서 계산합니다.

위의 행렬을 기준으로 보면 column*row로 계산하게되면 (2, 1) x (1, 2)가 되므로 (2, 2)의 확장이 일어나는 것과 마찬가지 결과가 생깁니다.

찢어서 계산했을 때 matrix가 2x2로 확장되므로, 결과값을 더해줍니다.

C=[13][12]+[24][13]

=[1236]+[26412]

=[38718]

 

4. 결론

이것으로 결국 어떤 방식으로 곱하든 결과는 같다는 걸 알았습니다.

반대로, 결과가 같다면 여러 방법으로 행렬의 곱셈을 조작해 볼 수 있습니다.

사이클로이드의 면적구하기(면적분)

말머리-


사이클로이드를 아주 뽕을 뽑아 먹어보자구요!

1탄 사이클로이드 선적분

에 이어 2탄 사이클로이드의 면적을 구해봅시다.


수식세우기-


직사각형의 면적은 어떻게 구하죠? 그렇죠 가로 곱하기 세로입니다.

곡선의 면적은요? 애매하죠?

여기서 정말 미세하게 나눠서 직사각형의 면적을 구한다음에 다 합치면? 곡선의 아래 면적이 되겠죠?

자, 가봅시다



각 위치에서 높이는 고정인데, 그 밑변만 아주아주 작게 잘라서 직사각형 구하고 다 합치면 되겠죠? 식으로 써 봅시다



직사각형 구하고

ydx



다 합칩니다

ydx



이렇게 쓸 수 있겠네요?



1탄에서 사이클로이드 매개변수로 어떻게 표현한다고 했죠?



x=r(tsint)
y=r(1cost)



저번처럼 미분하면~



dx=r(1cost)dt

dy=rsintdt



그대로 대입해서 매개변수로 나타내 봅시다.



2π0ydx

2π0r(1cost)r(1cost)dt
r22π0(1cost)2dt

r22π0(12cost+cos2t)dt
r22π0(12cost+cos2t+12)dt
r22π0(322cost+cos2t2)dt

r232t]2π0cos t,cos 2t함수는 0에서 2π까지 적분하면 ±0

3πr2


결론-


즉, 사이클로이드의 넓이는 원 넓이의 세배!

직선 두개로 뢸로 삼각형(Reuleaux triangle) 4등분 하기[그러나 이제 적분이 없는]

[나야 기하학]

말머리-

어제 뢸로 삼각형을 해체했다는 기쁨도 잠시... 어제 포스팅 쓰면서 적분 변환하느라 아주 길고 긴 latex을 작성했던 것이 떠올랐다.

근데 적분 말고, 전에 원을 나눌때도 기하학으로 하면 더 편했던 것 처럼 기하학으로는 안될까..?

싶었는데... 고민해보니 되긴하네!? 해서 시작한 포스팅이네요

하다보니 항이 많고, 원 변수를 모두 포함해서 계산하자면 아주 복잡해지는데 이를 적당히 간단한 변수로 치환치환 해가며 정리하면 금새 수식이 정리되는게, 정말 복잡한 적분 없이 바로 결과식에 도달하는게 재미지네요!

 

수식세우기-

1] 도형 나누기

이전 포스팅인 >>적분으로 뢸로삼각형 4등분하기<<를 기본으로 보시면 좋습니다.

기본 뼈대는 같습니다. 뢸로삼각형 넓이의 14을 구하는 거지요.

그러나 기하학을 곁들여서 생각해보면 이번에는 뢸로삼각형을 아래와 같이 나눠볼 수 있을 것 같네요!

예 색칠을 좀 해봤습니다!

저 자주색 영역이(빗금까지 포함해서) 부채꼴입니다. 뢸로 삼각형의 정의가 한 꼭지점을 원점으로하여 다른 두 꼭지점을 연결하는 원의 일부분을 그리는 것이었으니 당연히 한 꼭지점을 원점으로하는 자주색 영역은 부채꼴이 됩니다.

다만 여기서는 임의의 각 θ만큼의 부채꼴인거죠.

자 그러면 이제 뢸로삼각형의 영역의 14의 넓이를 저 도형들로 살펴보죠!

먼저 자주색 부채꼴 넓이에서 빨간색 삼각형 넓이를 빼고 파란색 삼각형 넓이를 더하고 주황색 활꼴의 절반 넓이를 더하면 뢸로 삼각형의 1/4이 되겠네요!

 

똑같이 뢸로삼각형의 내부 정삼각형의 밑변을 y=0에 두고, 그 높이를 a라고 칭하겠습니다.

그리고 a높이에서 x위치는 이전 포스팅과 동일하게 원의 방정식으로 놓겠습니다.

그러면,

++=14

으로 볼 수 있고, 이거를 좀 더 있어보이게 표현해보면 아래와 같습니다.

ASectorASectorTriangle+AUpperTriangle+12ASegment=14AReuleauxTriangle

자, 이제 각각의 넓이를 구하러 출동해보시죠

 

2] 각각의 넓이 구하기

차례대로 하나씩 넓이를 구해보죠

일단 자주색 부채꼴입니다.

임의의 각 θ로 계산하면 부채꼴의 넓이는

ASector=12d2θ

이렇게 되겠죠?

다음은 빨간 삼각형입니다.

삼각형의 넓이는 밑변*높이*절반 입니다. 여기서 밑변은 폭의 절반이지만, 높이는 일반각 θ로 정의되기때문에 밑변에 tanθ를 곱한 것으로 알 수 있죠. 따라서

ASectorTriangle=1212d12dtanθ

이 됩니다.

파란 삼각형을 보죠

빨간 삼각형과 비슷하게 밑변*높이*절반을 가져가려하나, 밑변에 해당하는 길이가 변수 a에 의해서 계속 변화합니다. 따라서 밑변은 변수 a에 의해 길이가 결정되는데, 이 법칙을 나타낸게 원의 방정식을 정리한 함수죠. 자세한 내용은 이전 포스팅에 있으니 여기서는 빠르게 수식을 세워보도록 하겠습니다.

그리고 이 파란 삼각형에서도 높이는 밑변에 tan값을 곱한 값이 되는데, 여기서 일반각은 평행한 두 직선 사이 엇각의 관계가 되므로(정확히는 내엇각(alternate interior angle)) 똑같이 θ가 됩니다.

수식으로 세워보면

AUpperTriangle=12(d2a2d2)(d2a2d2)tanθ

이 됩니다.

대망의 활꼴의 절반인 주황색이 나왔습니다. 

전체 활꼴의 넓이는 아래와 같고

ASegment=12d2π334d2

이것의 절반이 주황색의 넓이죠?

전체 수식에서 나중에 1/2을 해줄테니 수식은 여기까지 세우는 걸로 하죠

마지막 뢸로 삼각형의 넓이 입니다.

AReuleauxTriangle=32d2π332d2

부채꼴넓이*3-정삼각형넓이*2 해주면 나옵니다.

이제 각각의 넓이를 다 구했으니 다 합칠까요?

아뇨... 각각만 봐도 너무 복잡한데 지금 다 합쳐버리면 길이가 너무 길어져요...

그러니 동일하게 각각 다 수식을 정리해서 마지막에 합쳐보죠!

 

3] 수식 정리하기

ad=s 로 놓겠습니다. 그럼 a=ds도 성립하겠죠?

그리고 sin함수의 정의는 임의의 각 θ에 대해 그 직각삼각형의 로 정의됩니다. 따라서
sinθ=ad 가 되겠네요. 그리고 ad=s니까, 삼단논법으로 sinθ=s입니다.

sin을 정의했으니 다른 삼각함수들도 정의해보죠. 삼각함수들은 하나가 정해지면 다른것들로도 다 변환이 된답니다.
cosθ=1sin2θ=1s2
tanθ=sinθcosθ=s1s2

자, 이제 간단하게 할 준비는 다 끝났습니다. 수식정리하러가죠

부채꼴은 다음과 같이 정리될겁니다. sinθ=sθ=arcsin s겠죠?

ASector=12d2θ
ASector=12d2arcsin s

빨간삼각형

ASectorTriangle=1212d12dtanθ
ASectorTriangle=d2s81s2

파란삼각형

AUpperTriangle=12(d2a2d2)(d2a2d2)tanθ
AUpperTriangle=d22(1s212)2s1s2

요렇게 정리가 되겠네요!

활꼴뢸로 삼각형도 각각 절반, 사등분 해준 결과를 먼저 써서 정리하죠

12ASegment=d24(π332)
14AReuleauxTriangle=d28(π3)

이 두개는 상수항이므로 먼저 계산을 통해 정리해보도록 하겠습니다.

ASectorASectorTriangle+AUpperTriangle+12ASegment=14AReuleauxTriangle

이게 전체식이구요, 상수항을 이항해서

ASectorASectorTriangle+AUpperTriangle=14AReuleauxTriangle12ASegment

요렇게 놓은뒤에 위에서 정리한 식을 넣고 다시 정리하면

ASectorASectorTriangle+AUpperTriangle=d2π24

요렇게 상수항이 깔끔해집니다.

이제 나머지 식들을 대입해보죠

12d2arcsin sd2s81s2+d22(1s212)2s1s2=d2π24

길어졌죠? 일단 공통되는 변수를 양변 나눠줘서 일단 최대한 간단하게 해봅시다.

d22로 양변 나누면(=2d2로 양변 곱하면)

arcsin ss41s2+(1s212)2s1s2=π12

훨씬 간단해졌죠?

그래도 루트가 있으니까 뭔가 보기 불편합니다. 더 줄여보죠. u=1s2 이렇게 루트를 치환해보겠습니다.

arcsin ss4u+(u12)2su=π12

보기 훨씬 편하죠?

이제 세번째 항의 제곱을 풀어봅시다. 아주 수식이 간단하니 그 옆에 있는 곱셈으로 연결된 부분까지 같이 곱해주죠. 이렇게 간단하게 놓은 상황에서 풀면 간단하지만, 처음부터 풀어버리려면 아주 복잡했겠죠?

arcsin ss4u+(sus+s4u)=π12

보면 s4u가 덧셈 뺄셈으로 있네요? 소거해주면

arcsin s+sus=π12

와우 엄청 간단한 식이 나왔네요

이제 줄이고 줄인 식이니까, 다시 치환한 변수들을 원래 변수들로 돌려주죠.

일단 u를 다시 s로,

arcsin s+s1s2s=π12

그리고 s를 다시 a와 d로 바꿔줍니다.

arcsinad+ad1(ad)2ad=π12

그러면!!

바로 적분으로 풀었던 식과 완전 동일한 식이 짜잔 하고 나타난답니다.

 

결론-

조금 번거롭지만 복잡한 적분 없이도 풀 수 있었던 것이었습니다!

직선 두개로 뢸로 삼각형(Reuleaux triangle) 4등분 하기

[바라크루드(Baraclude) 4등분(4분할)하기]

 

말머리-

여러분은 뢸로 삼각형(Reuleaux triangle)이라는 걸 아시나요?

출처: wikipedia.org

요렇게 생긴 삼각형이랍니다.
정삼각형의 각 꼭지점에서 그 변을 반지름으로하는 호를 그렸을 때 만들어지는 도형이죠!
그리고 이 도형의 특징은! 바로 등폭도형(curve of constant width)이라는거죠!
그 뜻은 이 도형의 어느 양 끝을 기준으로 삼아도 폭이 일정하다는 말입니다.(그도그럴게 정삼각형의 한 변을 기준으로 각각 호를 그렸으니 너무나도 당연한 결과죠!)
그리고 여기서 폭은 정삼각형의 한 변의 길이가 됩니다.
그러나 오늘은 이 뢸로 삼각형을 소개하는 것 뿐만이 아니라, 이 뢸로삼각형을 같은 넓이로 4등분해 볼건데요!
왜 요런짓을 하는지는 나중에 마무리부분에서 보기로 하고 일단 4등분 고고싱 해보죠
고고싱~
 

수식세우기-

1] 전체 넓이 구하기

일단 4등분을 하려면 과거 >>직선 두개로 원 삼등분하기<<처럼 전체 넓이를 기준으로 계산을 하는 것이 편합니다.
따라서 이 뢸로 삼각형의 전체 넓이 S를 구해보겠습니다.
언뜻 '아니 곡선으로 이루어진 도형의 넓이를 어떻게 구해?' 싶지만, 의외로 부채꼴의 조합이므로 계산이 어렵지 않아요!
[전체넓이 = 한 부채꼴의 넓이*3 - 삼각형의 넓이*2] 로 구할 수 있답니다!
여기서 부채꼴의 반지름 r은 등폭도형이므로 폭 d와 같습니다.(폭 d는 정삼각형 한 변의 길이와도 같죠)
또한 부채꼴의 각도는 60도이므로(정삼각형의 한 각과 같습니다) 라디안으로 쓰면 π3
한 부채꼴의 넓이: 12r2θ=12d2π3
정삼각형의 넓이: 34d2
그렇다면 부채꼴 넓이 *3-정삼각형 넓이는
S=12d2π3334d22
S=12d2(π3)
자, 그러면 이 전체넓이의 14을 부분넓이 구하는 식에서 찾으면 되겠죠?
S4=18d2(π3)
 

2] 부분넓이 구하기

자, 이제 '어느 높이에서 이 뢸로 삼각형의 넓이는 이만큼입니다~'하고 알려주는 부분넓이 공식이 필요한데... 아무래도 호(arc)이다 보니 계산이 녹록치 않아보이죠?
일단 계산이 쉽게 좌표 세팅부터 해주겠습니다.

자, 먼저 정삼각형의 밑변을 x축에 접하게두고, y축의 중심에 놓습니다.
이렇게두면 정삼각형은 y축으로 이등분이 되는 꼴이 되겠죠, 그리고 좌우 대칭일 겁니다
이걸로 일단 4등분을 할 때 세로로 2등분은 해결이 되었습니다. 무조건 세로로 2등분하면 넓이는 절반이 되겠죠
그렇다면 가로로 2등분 점을 찾아야 한다는 결과에 도달합니다.
그러면 세로로 2등분, 가로로 어느정도 높이에서 2등분하면 전체 넓이의 14이 되는 넓이가 나올겁니다. 이 높이를 찾으면 되겠네요.
폭이 d라고 했으니, 오른쪽 빨간색 호의 중심은 왼쪽아래 빨간점이 되겠고 좌표는 (d2, 0)
그러면 이 부채꼴의 원래 원의 방정식은
(x+d2)2+y2=d2이 될겁니다.
그럼 이 식을 정리해서, x좌표에 대한 식으로 변형한 다음 0부터 어떤 지점 a까지 적분하면 이 뢸로삼각형의 부채꼴의 일부의 넓이를 구할 수 있겠네요! 이 넓이를 T라고 해보죠(a부터 32d까지 구할 수도 있으나, 밑끝이나 위끝에 0이 들어가야 적분식이 깔끔해지는 경향이 있어 그냥 0부터 적분하겠습니다.)
자, 근데 하나 문제가 있죠. 이거는 0부터 적분해가는 식인데, 저희가 놓은 좌표대로면 아래쪽 활꼴(주황색)의 넓이가 반영이 안됩니다.
근데, 뭐 이 활꼴의 넓이는 너무 쉬우니까 바로 계산해보죠
활꼴의 넓이 = 부채꼴의 넓이-삼각형의 넓이
Asector=12d2π3
Atriangle=34d2
Asegment=12d2π334d2
Asegment=12d2(π332)
근데 여기서 절반의 넓이만 포함되어야하므로
12Asegment=14d2(π332)
그러면
14S=12Asegment+T(0부터 a까지 부채꼴의 일부의 넓이 적분)
이면 높이 a를 구할 수 있겠군요!
영역으로 보자면, 오른쪽 위에 해당하는 1사분면만 적분이 되어야 하구요
일단 찾은 원의 방정식을 정리해봅시다.
(x+d2)2+y2=d2
(x+d2)2=d2y2
x+d2=±d2y2
x=d2y2d2
로 정리가 되었습니다.
여기서 마지막줄로 정리할 때 제곱근의 양수만 취한 것은 오른쪽 영역만 표현하는 함수를 얻기 위함이며, y값이 음수와 양수를 모두 포함하더라도 적분 자체에서 0부터 a까지 적분할 예정이므로 y값의 영역이 정해지기에 문제가 없습니다!
그러면 적분을 해봅시다
T=a0(d2y2d2)dy
T=a0d2y2dya0d2dy
T=a0d2y2dy[d2y]a0
T=a0d2y2dyd2a
자, 적분의 뒤쪽영역은 아주 쉽게 적분이 되었으나, 앞쪽은 쉽지 않아보이네요?
원을 적분할 때 가장 많이 쓰이는 트릭이 치환 적분에서 y를 r * sin t로 놓는 것입니다. 똑같이 적용해보죠
y=dsinθ
dy=dcosθdθ
T1=a0d2(dsinθ)2dcosθdθ
T1=a0d1(sinθ)2dcosθdθ
T1=a0d21(sinθ)2cosθdθ
1sin2θ는 항등식에 따라 cos2θ와 같으니
T1=a0d2(cosθ)2cosθdθ
T1=a0d2cosθcosθdθ
T1=a0d2cos2θdθ
여기서 삼각함수의 제곱은 적분불가하므로 더 쉬운 형태로 바꿔주겠습니다.
cos 2배각을 이용하면
cos2θ=1+cos2θ2 이므로
T1=a0d21+cos2θ2dθ
T1=d22a0(1+cos2θ)dθ
자, 여기서 변수치환 했으니 당연히 아래끝 위끝도 변경해줘야합니다.
여기서 y가 0일땐, θ도 0이므로 아래끝은 동일하게 0이고,
위끝이 a인 경우엔,
a=dsinθ
ad=sinθ
arcsinad=θ
로 정리되므로, 위끝 아래끝 바꿔서 최종식을 써보면
T1=d22arcsinad0(1+cos2θ)dθ가 되겠네요
T1=d22(arcsinad01dθ+arcsinad0cos2θ)dθ
T1=d22([θ]arcsinad0+arcsinad0cos2θ)dθ
T1=d22(arcsinad+arcsinad0cos2θ)dθ
T1=d22(arcsinad+[12sin2θ]arcsinad0)
여기서 sin 2t는 2sin t cos t와 같으므로
T1=d22(arcsinad+[sinθcosθ]arcsinad0)
T1=d22(arcsinad+sin(arcsinad)cos(arcsinad))
여기서 arcsin은 sin의 역함수이므로 f(f1(x))=x를 이용하여 sin(arcsinad)=ad
cos(arcsin)의 경우
θ=arcsinad
sinθ=ad
sin2θ+cos2θ=1
cosθ=1sin2θ
cosθ=1(ad)2 로 정리되므로
T1=d22(arcsinad+ad1(ad)2)
이 되며
결국 총 식은
T=d22(arcsinad+ad1(ad)2)d2a
자, 이제 다 왔습니다.
14S=12Asegment+T
18d2(π3)=14d2(π332)+d22(arcsinad+ad1(ad)2)d2a
식이 복잡하니 정리해보죠.
일단 2d2으로 양변 곱해줍니다.
14(π3)=12(π332)+(arcsinad+ad1(ad)2)ad
풀어서 상수항 정리하면,
π12=arcsin(ad)+ad1(ad)2ad
이 식에서 a를 찾아주면 영점에서 얼만큼 위로 올라가서 가로선을 그어야 4등분이 되는지가 나오며, 이를 32da를 하면 삼각형의 위쪽 꼭지점(주황색)으로부터의 거리를 구할 수 있습니다.
참고로 이 방정식은 초월방정식이라 사람이 일반해를 구할수는 없고, 계산기의 도움을 빌려야합니다.
이번에는 wolframalpha도 두손두발 들고 뻗어버렸기에, chatgpt를 이용하여 계산하면
gpt의 불확실한 결과(매번 결과가 달라지는)로 인해 다시 수식정리해서 wolframalpha로 계산하면
a=0.268309283804244d
로 결과가 나오고, 32da이 식에 넣어 계산하면
0.597716119980195d
라는 결과가 나오게 됩니다.
 

3] 수식적 결론

결국 폭의 0.5977위치에서(삼각형의 꼭지점에서부터 0.5977d 위치에서) 가로로 한번, 이후 세로로 중앙을 한번 자르면 정확하게 이 뢸로삼각형을 4등분 할 수 있습니다.(전체 폭의 60%쯤 되는 위치네요. 위와같은 형태에선 정확한 절반보다 조금 아래라고 생각하시면 될 것 같습니다.)
 

마무리-

이 뢸로삼각형은 의외로 활용도가 꽤 있습니다. 벽을 네모나게 뚫는 드릴도 이 뢸로삼각형을 응용하고 있으며, 무엇보다 폭이 어디에서재도 같다는 성질은 아주 요긴하게 쓰일 수 있습니다.
가령 약을 만들때도, 이 뢸로 삼각형의 모양대로 타정하면 약이 어떤 슬라이드를 지나갈때 막힘없이 원과 비슷하게 흘러갈 수 있겠죠
그래서 실제로 시판되는 약중에서도 이 뢸로삼각형의 모양인 약들이 꽤 있습니다.
그중에 대표적인게 바라크루드(Baraclude)인데요, 실제로 약의 정보를 보면 가로 세로 높이가 같은 뢸로삼각형임을 알 수 있습니다.
0.5mg 제형의 경우 8.4mm의 폭을 가지는데, 이걸 계산한 결과에 대입하면
삼각형의 한 꼭지점에서부터 5mm떨어진 지점에서 가로로한번 세로로한번 자르면 된다는 결론이 나오죠.

[수학/패러독스] 아리스토텔레스의 바퀴 역설(Aristotle's wheel paradox)

말머리-

안녕하세요 여러분!

오랜만에 글감을 들고 찾아왔습니다.

오늘 소개드릴 내용은 바로 '바퀴 역설' 혹은 'Wheel paradox'라는 건데요

도대체 뭐가 '역설'일까요?

소개시켜드리겠습니다!

출처: wikipedia

위 이미지가 보이시나요?

이미지에는 큰 바퀴(파란색)과 그 안에 고정된 작은 바퀴(빨간색)이 있습니다.

이 두 바퀴는 따로 떼서 굴려보면 딱 그 바퀴의 원주(원 둘레)만큼 굴러가며 딱 한바퀴를 돌 겁니다.

그! 런! 데!

이 두 바퀴를 정 가운데 딱 붙여서 굴리는 순! 간!

큰 바퀴가 한바퀴 굴러갈 때, 그 거리만큼 작은 바퀴도 딱 한바퀴 도는 일이 발생하는 것이죠!

두 바퀴가 동시에 굴러갈 때, 큰 바퀴가 굴러간 거리 만큼 작은 바퀴도 같은 거리를 이동하는 겁니다!

아니 어떻게 이런일이!?

분명 떼어 놓으면 한바퀴 도는 거리가 다른데, 붙이면 같아진다!?

그래서 이것이 바로 역설(paradox), 패러독스입니다.

참고로 기원전 학자인 아리스토텔레스(Aristotle)의 이름이 붙은 만큼 엄청 오래된 역설이라는 거죠!

[더불어 제논의 역설도 고대 그리스에서 나온 걸 보면 역시 철학의 시대가 아니었나 싶네요]

그럼 도대체 이런 문제가 발생하는 이유는 뭘까요? 원인부터 살펴봅시다.

 

원인-

자, 이 문제를 해결하려면 원인을 일단 잘 살펴봐야겠죠?

1) 사이클로이드로 생각해보기

자 일단 사이클로이드가 궁금하시다면 >>여기<<에서 관련 내용을 한번 살펴보시기 바랍니다.

간단하게 말해 원에서 점 하나 찍고 그 원의 궤적을 보는게 사이클로이드입니다.

그렇다면 큰원에 점을 찍고, 작은 원에 점을 찍고 그 궤적을 본다면?

출처: 위키피디아

요런 자취가 나올겁니다. 자취는 점선으로 나타나있어요.

잘 보면 파란 자취와 빨간 자취가 다르죠?

그러니까 뭔가 운동이 다를 거라는 걸 암시하죠

보면 파란색 점선이 위아래로 더 많이 움직이고, 빨간색 점선은 위아래로 덜 움직이는데, 결국 총 이동한 거리는 같다고 한다면 당연히 빨간색이 좀 더 '효율적'으로 움직인 거니 수평방향으로 더 많이 움직였다는 사실을 도출해 낼 수 있습니다.

그러나 뭔가 조금 찝찝하죠?

 

2) 다각형으로 생각해보기

원은 다른말로 '무한각형'이라고도 합니다.

실제로 삼각형>사각형>오각형>... 이런식으로 각형을 늘려나가다보면 점점 원에 가까워지는 모습을 볼 수 있는데요

그렇다면 원에서의 문제이니까 각형을 줄여봅시다!

무한에서 줄이고 줄여서~~~ 사각형으로 가보죠!

자, 이런 네모바퀴가 굴러가는걸로 생각해봅시다.

이 네모바퀴는 총 네번을 굴러 가면 한바퀴를 돌 겁니다.

근데, 자세히보면, 큰 네모는 딱 붙어서 도는데, 작은 네모는 공간이 떨어져있네요?

요 초록 선 만큼요

아... 이제 감이 올 것 같습니다.

이 안에 있는 바퀴는 공간을 점프해서 이동하는 거였군요!?

그래서 큰 바퀴가 딱 한바퀴 도는동안 같은 거리를 이동할 수 있었던 거네요!

여기서 오각형>육각형 등 각수를 계속 늘려가면 이 초록선은 점점 짧아지겠지만, 더욱 많아지겠고, 사라지지는 않겠군요!

그렇다면 원은!? 아주 미세하게 이 초록선들이 거의 점으로 분포되어 보이지 않는 걸겁니다!

아하! 해결했습니다! 너무 미세해서 보이지 않지만 있다!

그럼 원은 '점프'라기보다는 아주아주 미세하게 '미끄러진다'라고도 볼 수 있겠네요?

(그러나 실제는 너무너무 작아서 얘가 점프를 하는지 미끄러지는지는 알기 어렵겠죠?)

자, 그럼 왠지 이 길이를 구하고 싶어지지 않나요?

수식으로 한번 풀어보죠!

 

이 애매한 거리를 수식으로 풀어보기!-

자자, 이제 수식으로 풀어보려고 하니까 일단 한가지 생각해보죠

어떤 n각형이 한 변에서 다른 변으로 돌때 돌아가는 각도는 그 n각형의 외각과 같습니다.

가령 삼각형은 120도를 돌아가 다음 변으로 돌아가겠고, 위에서 봤듯이 사각형은 90도를 돌면 다음 변으로 돌아갑니다.

마찬가지로 오각형은 72도를 돌면 다음 변으로 돌아가겠네요!

어.. 각형이 작아질수록 다음 변까지 돌아가는 각도가 작군요!

이를 수식으로 써보면 θ=360n일겁니다.

좀 더 보기 편하게 60분법 각도를 호도법(radian)으로 바꿔주면, θ=2πn이 되겠네요.

자 그럼 도형에 열심히 보조선을 그어봅시다!

자, 여기 보라색선은 큰 바퀴의 반지름(이 될 예정인)입니다. (이를 a라고 하죠)

빨간색 바퀴의 안에 그려진 빨간색 선 또한 작은 바퀴의 반지름일 것입니다. (이를 b라고 해보겠습니다)

그리고 주황색 선은 큰 바퀴의 반지름-작은 바퀴의 반지름이죠 ( a-b 겠네요)

왜 저 주황색 선을 만들었냐면~ 초록색 선의 길이를 알고 싶기 때문이죠!

그리고 n각형의 바퀴는 한 변만큼 돌아갈 때 θ만큼의 각도로 돌아간다고 이미 정의를 했고, 주황색 선도 마찬가지로 θ만큼 돌겠죠

자, 각도와 변이 나오면 뭘 할 수 있다? 바로 삼각함수로 다른 변을 구할 수 있다!

일단 θ와 주황색 선 만으로는 바로 초록색 선의 길이를 구할 수 없으니 뭐든지 반을 똥강내봅시다.

일단 초록색 선의 반을 구하고 싶다면, 주황색 선 * θ의 절반을 하면 될 겁니다 수식으로 써보죠

근데 자꾸 무슨색 선~하니까 좀 헛갈리네요! 다시정의하죠

초록샌 선은 결국 우리가 구하고 싶은 선이니까 x라고 합시다

주황색 선은 a-b

돌아가는 각도 = 주황색 선의 각도 = θ

자, 전체 x길의 반은 (a-b)에다가 θ 절반의 sin값을 곱해주면 나오게 되겠네요

x2=(ab)sin(θ2)

자, 근데 저희는 θ를 아까 2πn이라고 했으니

x2=(ab)sin(2π2n)

x2=(ab)sin(πn)

자, 왼쪽에 자꾸 2로 나누어져 있으니까 이제 양변에 2를 곱해서 전체 x길이에 대한 수식으로 바꿔보죠

x=2(ab)sin(πn)

아, 근데 우리는 초록선 '단 하나'만 구했네요? 초록선은 바퀴가 n번 돌아 한바퀴 돌때까지 n개가 생기니까...

수식 복잡하게 하지말고 다시 정리하죠 nx=L이라고 새로 정의해봅시다. 초록선 n개가 모인걸 대문자 L로 놓을께요

L=2(ab)sin(πn)n

자 이제 어떤 n각형에 대해서 작은 바퀴가 점프하는 거리를 구하는 식이 완성되었습니다.

근데 아까 원은 무슨각형이다? 무한각형!

그럼 n이? 무한대!

근데 여기서 그냥 무한대 사용하면 수식이 '아니 뭐가 뭐지?'싶어지니 정리를 조금 해봅시다!

정말 재밌는 수식이 있는데요

limxsinxx

는 뭐게요?

답은 1이랍니다! 그러므로!

L=2(ab)sin(πn)nL=2(ab)sin(πn)nπn1πn

L=2(ab)sin(πn)πnnπn

L=2(ab)sin(πn)πnπ

자, 항등식을 이용한 식변형을 했구요

이제 limxsinxx 요 꼴이 나왔으니 바로 극한을 걸어봅시다.

L=limx2(ab)sin(πn)πnπ

L=2(ab)π

L=2π(ab)

원에서 가칭 '점프하는 구간'의 길이를 구했습니다!

그리고 정말 신기하게도 큰 원의 원주길이(2πa)에서 작은 원의 원주길이(2πb)를 뺀만큼이 점프하는 구간이라는 답이 나왔네요!

 

결론-

결국, 안쪽의 원은 아주 조금씩 모종의 방법으로 이동하며 큰 원이 움직이는 만큼을 따라가고 있었던 것이었습니다 여러분!!

사이클로이드 길이 구하기(선적분)

 

1. 사이클로이드?

사이클로이드라는 곡선을 아는가?

원에서 한 점을 찍고, 원이 한바퀴 구르는 동안 그 점의 궤적을 따라서 그리면 아주 독특한 곡선이 하나 만들어지는데 이를 사이클로이드라고 한다.

https://www.desmos.com/calculator/v3ouxovbkf?lang=ko

 

Cycloid

 

www.desmos.com

위 사이트에 접속하여 왼쪽 위의 a 부분을 잡고 슬라이드 해보면 원이 굴러가면서 만드는 자취란 것을 알 수 있다.

참고로 위 그래프에서 cycloid는 파란선이다.

사이클로이드는 최속강하이론(다른말로 공이 가장 빨리 내려오는 곡선)에 활용 되기도 하는데, 이 특이하고 신기한 성질은 다음에 알아보도록하고..

 

2. 사이클로이드 곡선 길이 구하기!

이 독특한 곡선의 길이를 구할 수 없을까?

원은 2πr이지 않은가?

한번 구해보자!

 

2-1. 선적분

길이를 구하는 적분을 '선적분'이라고도 하는데, 원리는 간단하다.

아주 미소한 양의 증분 x와 y을 피타고라스 정리 써서 직선 거리를 구해내고, 이를 쭉~ 끝까지 적분해내는것이다.

그럼 결국 미소하게 변하는 x와 y를 따라서 어떤 아주아주아주 미세한 직선이 만들어질테고, 이 아주 미소한 직선을 다시 모았으니 곡선의 길이가 되겠다.

그러면 이 아주 미소한 x와 y는 어떻게 구하냐면.. 특정 식을 x에 대해서 미분하고 y에 대해서 미분하면 아주 미소한 x의 증분과 y의 증분이 나올 것이고, 이를 피타고라스 정리로 모으면 아주 미소한 직선이 하나 구해질 것이다. 식으로 쓰면

(dx)2+(dy)2

그리고 이것을 모으면 되는데,

(dx)2+(dy)2

아뿔싸! 적분은 '아주 미소한 어떤 것'을 '모은다'로 정의 되기 때문에, 과 'd어쩌구'가 세트로 나와야한다.

따라서, 우리는 가장 간단하게 'x에 대해서 모을거야' 라고 정의를 해주기 위해 dx를 원 식에서 뽑아내면

(dxdx)2+(dydx)2dx

1+(dydx)2dx

짜잔, 적분식 완성이다.

심지어 이 식이 매개변수로 나타나는 식이라면, 매개변수를 통한 미분으로도 정의할 수 있다.

여기서는 '미소한 x와 미소한 y를 미소한 매개변수로 나타냈을 때, 얘를 모을께!'니까

(dxdt)2+(dydt)2dt

로 정의할 수 있겠다.

2-2. 매개변수 표현법

자, 이제 선의 길이를 구할 수있는 '도구'는 찾아내고 정의를 마쳤는데... 정작 이 사이클로이드의 한 점을 어떻게 x와 y로 표현할 수 있을 것인가!?

가장 쉬운 방법은 원이 어떤 각도 t만큼 돌아갔을 때 그 각도에 대해서 x와 y가 정의가 되므로 이를 이용하여 매개변수로 나타낼 수 있겠다!

 

출처: 나무위키


자, 가장 쉬운 y부터 보자, y는 원이 t만큼 돌아갔을 때(위 그림에서 θ), 반지름 r에 대해서 rrcost만큼 움직인 것을 알 수 있겠는가?(위 그림에서 원이 θ만큼 돌아갔을 때 ¯CI¯CK가 y의 위치임을 알 수 있다. 이를 ¯CI=r, ¯CK=rcosθ로 치환하면 바로 식이 나온다)

 

그럼 x는? 원이 t만큼 돌아갔을 때 원의 중심이 x축으로 이동한 거리는, 그 호의 길이와 같다. 왜냐고? 바닥에 원 둘레를 딱 붙이고 돌아갔을테니까!(위 그림에서 ¯OI=PI)

그러면 원의 중심rt(위 그림에서 PI=¯OI)만큼 움직였을 테고, 여기서 x는 rsint(위 그림에서 ¯PK)만큼 원의 중심보다 뒤에 있을 테니 rtrsint가 되겠다.


다시 쓰면

x=rtrsint=r(tsint)
y=rrcost=r(1cost)

자, 이렇게 x와 y좌표를 나타낼 수 있는 관계식도 찾았다! 그렇다면 이제 바로 선적분 들어가보자

 

2-3. 매개변수로 표현된 선적분 풀기!

dx=r(1cost)dtdxdt=r(1cost)
dy=rsintdtdydt=rsint

(dxdt)2+(dydt)2dt
(r(1cost))2+(rsint)2dt

근데 t가 0에서부터 2π 즉, 한바퀴 굴러갈때 거리를 잴거니까 적분의 위끝, 아래끝은 각각 0과 2π다.

2π0r2((1cost)2+(sint)2)dt
2π0r((1cost)2+(sint)2)dt
r2π0((1cost)2+(sint)2)dt

r2π012cost+(cost)2+(sint)2dt

r2π012cost+1dtcos2x+sin2x=1
r2π022costdt
r2π02(1cost)dt

r2π02(1(12(sint2)2)dtcos(t2+t2)=cos2t2sin2t2=12sin2t2

r2π02(2(sint2)2)dt

r2π04(sint2)2dt

r2π02(sint2)2dt
2r2π0(sint2)2dt
2r2π0sint2dt

2r(2cost2]2π0
2r(2(11))
8r

3. 결론

즉, 사이클로이드의 길이반지름의 8배, 지름의 4배 되겠다!

멱급수 전개(Power series expansion)으로 피보나치 수열 풀기

 

결국 피보나치 수열 풀다가 멱급수까지 왔네요...

1. 계차의 등비수열로 풀기

2. 특성방정식으로 풀기

 

1. 멱급수로 피보나치 수열 풀기?

전 포스팅에서 왜 특성방정식으로 풀 수 있지?하면서 파보다가, 어느 Quora글에서 "멱급수로 풀다보면 자연스럽게 나와~"라는 걸 보고 멱급수로 풀어보았네요. 얼추 비슷한 형태가 나오기는 하지만 엄밀하게 멱급수에서 도출 가능한 생성함수는 특성방정식으로 유도하는 것과는 -부호의 차이가 있습니다. 이를 감안하면 사실상 멱급수에서 도출하는 생성함수가 1.번으로 풀때 사용되는 근과 계수의 관계에서의 변환(an+2=x2)에서도 사용되고, 2.번으로 풀때 놓게 되는 an=xn과도 연관이 생기니 어떻게보자면 근원을 잘 판 것 같습니다.

 

2. 어떻게 풀건데?

2-1. 일단 멱급수가 뭔데?

멱급수는 영어로 Power series, 혹은 한자로 冪級數라고 쓰입니다.

네이버 지식백과의 설명을 보자면

일반적으로 ań(xa)ń인 꼴로 나타낼 수 있는 급수를 말한다. 정급수(整級數)라고도 한다. a0,a1,,ań이 상수, x가 변수인 다항식 a0+a1x+a2x2++ańxń을 무한히 연장한 식

      a0+a1x+a2x2++ańxń+

을 말한다. (후략)
[네이버 지식백과] 멱급수 [power series, 冪級數] (두산백과 두피디아, 두산백과)

라네요. 결국 특정 상수와 변수를 무한히 더한 급수를 말합니다.

그리고 이 멱급수는 등비급수의 성질을 띄기 때문에 공비라고 볼 수 있는 x의 값에 따라 수렴/발산이 정해지게 되는데, 이번에 저희는 이 멱급수의 특성을 가지고 상수항을 만들어내는 생성함수를 찾아낼 것이기 때문에 사실상 변수의 상태가 크게 중요하지 않게됩니다. 그래서 저희는 여기서 Formal power series(굳이 한국어로 번역하자면 형식적 멱급수?)를 사용할 것입니다. Formal의 뜻은 말그대로 '형식적'이라는 말로 공비 x의 범위를 따지지 않을 것이야요~ 하는 말입니다.

2-2. 시작은 어떻게 할건데?

자, 일단 처음 식을 놓는 것 부터가 아주 중요할 것 같네요. 천릿길도 한걸음부터!

일단 생성함수를 정의해보죠. 아까 보았던 멱급수를 그대로 대입해 줄 겁니다.

생성함수라고 해서 별거 없습니다. 그냥 '어떤 수를 생성하는 규칙을 가진 함수'라고 보면 됩니다.

Generating function(생성함수)의 이름을 따서 g(x)라고 정의해봅시다!

그리고 피보나치 수열을 멱급수의 상수로 놓아봅시다.(피보나치 수열=Fn, Fn=Fn1+Fn2)

g(x)=0Fnxn

g(x)=F0x0+F1x1+F2x2+F3x3+...

이런 식이 나올겁니다. 시작이 반입니다. 이미 반 했습니다!

여기서 x0=1, x1=x이고, 피보나치 수열의 특성상 F0=1, F1=1이므로 식을 다시 정리해보면,

g(x)=1+x+2Fnxn
g(x)=1+x+2(Fn1+Fn2)xn  Fn=Fn1+Fn2
g(x)=1+x+2Fn1xn+2Fn2xn
g(x)=1+x+x2Fn1xn1+x22Fn2xn2
g(x)=1+x+x1Fnxn+x20Fnxn

로 정리됩니다. 여기서 0Fnxn은 정의에 따라 g(x)와 같고,

피보나치 수열의 정의를 따라 F0x0=1 이므로

0Fnxn=1Fnxn+1
0Fnxn1=1Fnxn
g(x)1=1Fnxn

입니다. 따라서 식을 g(x)로 정리하면,

g(x)=1+x+x1Fnxn+x20Fnxn
g(x)=1+x+x(g(x)1)+x2g(x)
g(x)=1+x+xg(x)x+x2g(x)
g(x)=1+xg(x)+x2g(x)
g(x)xg(x)x2g(x)=1
(1xx2)g(x)=1
g(x)=11xx2

이로써 생성함수식이 나왔습니다. 미지의 x값이 들어가면 어떤 숫자를 내보내 주는 함수입니다. 근데 여기서 어떤 x값이 들어가야 어떤수가 생성이 되는지 알 수 없기 때문에 바로 x의 값을 알아내러 출동하죠!

2-3. x 값 찾으러 출발!

2차 식이니까 x의 값도 2개가 나올 것입니다.

다만, 여기서 재밌는 점은 생성함수의 꼴이 2차 다항함수의 꼴이라는 점 입니다.

결국 분수의 꼴로 나타내어졌지만, 2차 다항함수의 선형결합으로 이루어진 것이 피보나치 수열의 생성함수이고 이를 토대로 특성방정식을 사용할 수 있는게 아닌가 생각이 듭니다.

여튼 각설하고, 다시 x의 해를 구하러 가봅시다!

2차 다항식의 분수꼴은 뭔가 해를 구하기 껄쩍지근하니, 부분분수로 쪼개봅시다.

부분분수로 쪼개려면 분모가 곱셈으로 연결되어있어야하는데, 까짓것 이차 다항식이니까 임의의 해를 놓고 인수분해해버리죠 뭐

g(x)=11xx2

g(x)=(1x2+x1)

여기서 임의의 해를 r1,r2라 하겠습니다.

그리고 이 식에 근과 계수와의 공식(Vieta's formulas)을 적용하면 r1r2=ca=11=1이 되고, 여기서 r1r2의 관계식이 도출됩니다. r1=1r2

자, 그러면 분모를 인수분해하시오

g(x)=(1(xr1)(xr2))

부분분수로 짜갤때는 일정한 계수가 짜개진 분수 앞에 하나씩 붙습니다. 이 계수를 A,B라고 하죠.

흔히 아는 부분분수 공식 1AB=1BA(1A1B)과 완전히 같은 공식이에요. 앞에 붙는 1BA를 계수처럼 놓았을 뿐입니다.

g(x)=(Axr1+Bxr2)
(1(xr1)(xr2))=(Axr1+Bxr2)
1(xr1)(xr2)=Axr1+Bxr2
1=A(xr2)+B(xr1)

이 때, x=r1이면,

1=A(r1r2)+B(r1r1)A=1r1r2

또한, x=r2이면,

1=A(r2r2)+B(r2r1)B=1r2r1

A=B임을 알 수 있습니다.

그리고 실제 x를 풀어보자면 이 두 근을 각각 r1, r2로 놓았기 때문에

x2+x1a=1, b=1, c=1

근의 공식에서

x=b±b24ac2a
x=1±1+42a=1, b=1, c=1
x=1+52 or 152
r1=152, r2=1+52

이며, A 값도 직접 찾아보자면,

A=1r1r2=1152(1+52)=15

입니다.

본격적으로 수식을 정리하기 전, 미지수와 그 관계들을 모두 찾아보았는데요, 다시한번 정리해보겠습니다.

x=r1 or r2

r1r2=1r1=1r2r2=1r2

A=1r1r2

A=B

r1=152, r2=1+52

A=15

자, 본격적으로 식을 풀어봅시다!

2-4. 본격적으로 멱급수 해체!

다시 정리했던 식으로 돌아가 봅시다.

g(x)=(Axr1+Bxr2)
g(x)=Axr1Bxr2
g(x)=Ar1x+Br2x
g(x)=1r1A1xr1+1r2B1xr2
g(x)=Ar111xr1+Br211xr2
g(x)=Ar111+r2x+Br211+r1xr1=1r2, r2=1r2

여기서 무한 등비 급수 공식인 0arn=a1r을 적용하면,
g(x)=Ar10(r2x)n+Br20(r1x)n
g(x)=Ar10(r2)nxn+Br20(r1)nxn
g(x)=0(Ar1(r2)n+Br2(r1)n)xn
g(x)=0(A(r2)n+1+B(r1)n+1)xnr1=1r2, r2=1r2
0Fnxn=0(A(r2)n+1+B(r1)n+1)xn

여기서 양변 무한등비급수를 제거해주면

Fn=A(r2)n+1+B(r1)n+1

피보나치 수열의 항만 나오게 되었습니다. 그리고 결국 이 식이 피보나치 상수를 만들어내는 생성함수인 격인데요, 결국 특정 상수를 만들어내는 생성함수 = 일반항이겠죠?

본격적으로 수를 대입하기전에 이 식을 좀 더 간단히 만들어보겠습니다.

Fn=A(r2)n+1A(r1)n+1B=A
Fn=A((r2)n+1(r1)n+1)

 

3. 답은?

이제 대망의 실제 값 대입만 남았습니다.

원 식은,

Fn=A((r2)n+1(r1)n+1)

실제 값은,

r1=152, r2=1+52

A=15

이었죠? 대입해줍시다.

Fn=15((1+52)n+1(152)n+1)

짜잔, 피보나치 수열의 일반항이 풀렸습니다.

참고로 여기서는 수열의 첫 항이 1이 아니라 0이므로 일반항에서 지수항이 n이 아니라 n+1인 점을 주목해주세요

진짜 맞는지 직접 값을 대입해봅시다.

F1=15((1+52)0(152)0)=0 (실제 피보나치 수열에는 없는 부분이지만 1, 1, 2, 3, 5... 식으로 앞의 두 수를 더해서 다음 수가 나오는 것으로 생각해보면 초항 앞은 0임을 생각해 볼 수 있습니다.)

F0=15((1+52)1(152)1)=1

F1=15((1+52)2(152)2)=15(1+25+5(125+5)4)=15(1+25+51+2554)=15(454)=1

네 첫 두항은 1, 1 이고, F2부터는 3차식이기때문에 계산이 까다롭지만, wolfram alpha를 돌려보면 제대로 2, 3, 5... 나오는 것을 확인할 수 있습니다.

제대로 구했네요!

실제로 이전 포스팅인 점화식에서의 특성방정식에서 도출한 결과와 같습니다!(참고로 특성방정식에서 도출한 초항은 n이 1입니다.)

점화식에서의 특성방정식(characteristic equation)

 

포스팅 개요

과거 피보나치 수열의 일반항 구하는 포스팅(>>피보나치 수열의 일반항과 비율의 극한(황금비)<<)을 작성하였다.

사실 작성하던 중에는 크게 못느꼈는데, 다른 사람에게 설명을 하던 중 특성방정식을 잠깐 빌려와서 근과 계수와의 관계로 풀어내는 과정에서 '왜 an+2=an+1+anx2=x+1 인가?'에 대해서 너무나도 당연하게 받아들였다는 것을 깨닫고 추가로 더 공부해본 결과 이를 '특성방정식'이라고 한다는 것을 알게되고, 이에 포스팅을 작성한다.

 

점화식에서의 특성방정식(characteristic equation)

점화식을 풀 때 우리는 특성방정식(characteristic equation)을 이용해서 해결을 하게 된다.
(과거 고등학교 수학에서 나왔던 점화식의 해결법(계차의 등비수열로 해결)도 어떻게보면 특성방정식의 활용이다.)

그런데 '왜 특성방정식을 사용해서 점화식을 푸는가?'에 대해서 궁금하진 않은가? 그냥 된다니까 하기에는 조금 껄쩍지근하다.

한줄로 정의해보자면
'점화식 자체로는 뭔가를 찾기 힘드니까 본질이 같은 다른 것으로 바꾸어서 해를 찾자'이다.

여기서 좀 더 자세히 따져보자면
'본질이 같은'은 '같은 선형성을 가지는'이란 의미이고
'다른 것'은 '기저(basis)'를 뜻한다.
(갑자기 대수학에서 벡터공간에서 쓰는 '기저'라는 단어가? 싶기도 하겠지만, 사실 모든 '함수'는 벡터공간 안에서 구현이 가능하다는 점을 보면 이해할 수 있을 것이다.)

진짜 결국 그냥 '쉽게 구할 수 있는 걸로 변형하자!'이거다..

보통은 점화식 뿐만 아니라 미분방정식, 선형대수에 모두 사용가능하기 때문에 '특성방정식'이라고 검색하면 사실 점화식보다는 미분방정식이나 선형대수 관련한 벡터공간 관련 내용 더 나아가 고유값/고유벡터 등이 나오게 된다.(사실 고유값분해를 대충이라도 이해할 수 있다면 특성방정식이 뭐하는 놈인지는 쉽게 이해가 간다)

그러나 일단은 이렇게 복잡한 내용 이전에 여기서는 아주 간단하게 점화식에 대해서만 설명해보기로 한다.

이제부터 이해해야 하는 키워드는

1. 점화식의 구분
 *선형성
 *선형의 또다른 의미
2. 특성방정식이란
이다.

차례대로 알아보자


1. 선형성(linearity)이란 무엇인가?

선형성을 만족시키기 위해서는 두 가지 조건인 가산성(Additivity)동차(제차)성(Homogeneity)을 만족해야한다.

-가산성(Additivity)은 f(a)+f(b)=f(a+b)를 만족하는 함수를 말한다.
다른말로는 중첩의 원리(principle of superposition)라고도 한다.

-동차(제차)성(Homogeneity)이란 f(ax)=af(x)를 만족하는 함수를 동차성이 있다고 한다.(일부 서적의 번역으로는 제차성이라고한다)
쉽게말해 입력이 조정된 비율만큼 동일하게 결과도 조정된 값이 나온다는 것이다.
선형성과 마찬가지로 상수항이 없는 함수에 대하여 성립하며, 상수항(혹은 이에 준하는 상수를 출력하는 함수)이 있는 경우 동차성에 위배된다.

간단하게 선형성과 동차성에 대해 쉽게 알 수 있는 예제가 있다.

y=ax+b는 선형인가?

가산성을 먼저 살펴보자
f(x1)+f(x2)=f(x1+x2)이면 가산성이 있는 함수이다.
a(x1+x2)+2b a(x1+x2)+b
가산성에 위배된다.

동차성은 어떤지 보자
f(k x1) = kf(x1)
akx1+b k(ax1+b)
동차성에 위배된다.

결국 y=ax+b는 선형이 아니다.


근데 신기한건 엄밀한 선형이 아닌데도 '선형'이라는 단어를 붙이는 경우가 있다는 것이다.
아니 또 이것은 무엇인가?
선형이 아닌데 선형이라고?

아까 선형성의 정의에서 '가산성'을 보았다. 여기서 파생되어서 덧셈으로 연결되는 함수들을 보고 '함수들이 선형 결합을 한다'라고 말한다.

그리고 이게 줄어들어서 '선형'이 된 것이다.

그래서 다항함수는? 선형 함수이다. 만약 상수항이 없다면 엄밀한 '선형'함수이고, 상수항이 있다면 선형(결합을 한)함수이다.

따라서 특정 계수의 곱을 통한 덧셈으로 정의되는 일반적인 점화식의 경우 선형이다.

그러면 이렇게 선형이라는 말을 막쓰면, '엄밀한 선형'인지 '일반적 선형'인지는 또 어떻게 알 것인가?

그래서 선형이란 말 뒤에 '동차' 혹은 '비동차'라는 말을 써준다.

이렇게 되면 '선형 동차 점화식' 혹은 '선형 비동차 점화식'이라는 말이 생겨날 수 있는데, 결국 이 단어로 구분이 완벽하게 되는 것이다.

선형 동차 점화식: 모든 항이 선형 결합을 한 상태이며, 상수항(혹은 그에 준하는 상수를 출력하는 함수)이 없는 점화식
선형 비동차 점화식: 모든 항이 선형 결합을 한 상태이며, 상수항(혹은 그에 준하는 상수를 출력하는 함수)이 있는 점화식

자 이제 점화식의 종류에 대해서 알아보았다.
사실 '비'자가 붙으면 뭐든 어려워진다. 선형함수보다 비선형함수가 어렵고, 동차보다는 비동차가 어렵다.
현재 이 포스팅은 '쉽게!' 알아보려는게 목적이므로 앞으로는 '선형 동차'에 대해서만 써보려고한다.
이제 '특성방정식'이란게 뭔지 알아보러가자.

 


2. 특성방정식이란?

선형 동차 점화식은 결국 선형성을 띈다.
그리고 이것은 점화식의 어떠한 해 a, b에 대하여 이 둘에 특정 계수를 곱한 선형결합역시도 점화식을 만족시킨다는 것이다.
결국 어떠한 해를 찾고 이 해에 곱해지는 계수를 찾으면 점화식을 풀어낼 수 있다(일반항을 구할 수 있다)는 것이다.

그럼 일단 이 '어떠한 해'를 찾아야하는데, 이게 그냥 점화식만 뚫어져라 쳐다보면 툭 답이 나오는 것도 아니고.. 참 힘들다.
그래서 이 어떠한 해를 찾기위해 우리는 주어진 점화식을 변형할 것이다.
어떻게?
'같지만 다르게!'
같은 선형결합을 가지지만, 이 점화식을 다른 각도로 볼 수 있는 새로운 '틀'(=기저)을 찾아서 바꿔주면 될 것이다.
결국 이 '틀'은 진짜 오만가지 것이 다 되지만, 제일 간단하며 우리가 무언가를 찾아내기 쉬운 틀은 xn일 것이다.
x를 찾아내면 점화식의 어떠한 해를 찾아낸 것이며, 이 어떠한 해에 특정 계수를 곱한 선형결합이 점화식을 만족시킬 것이기 때문이다.
그리고 새로운 틀을 xn으로 정의했으니, 이 틀을 이용해 만든 변화시킨 점화식에서는(해가 두개라고 가정하면) k1xn1+k2xn2이 일반적인 해를 나타낸다고 볼 수 있겠다.
그렇다면 결국 an이라는 수열을 새로운 틀 xn으로 놓게 된 것이다.

좀 더 이해를 쉽게하기위해서 하나의 예시를 가지고 논지를 진행시켜보자

an=an1+an2

라는 점화식이 있다고하자(상수항이 없는 이유는? 우리는 현재 선형 동차 점화식에 대해서 보고있다.)
이 점화식에서는 차수(order)가 2이다.
갑자기 뜬금없이 차수? 선형 동차 점화식이 몇개의 항으로 연결되었는가를 나타내는 것으로, 선형적인 다항함수의 차수와 그 의미가 같다.

이를 새로운 틀 xn으로 치환하면
xn=xn1+xn2
차수로 n을 제한하면(n의 최대값은 차수가 된다)
x2=x+1 이 된다.
(위에서도 논의했듯이 항이 두개로 연결된 점화식은 두개의 해를 가지며, 두개의 해를 가지기 위해서는 다항함수의 차수=수열의 항수 이다)

자, 여기까지의 논지가 바로 이전 포스팅(피보나치 수열의 일반항 구하기)에서 근과 계수와의 관계를 사용하기 위해 살짝 빌려왔던 개념되겠다. 모르고 그냥 받아들여도 크게 문제없지만 알면 더 신기한 그런거다.

각설하고, 더 논지를 진행시켜보자.

x2x1=0의 형태로 바꾸어 방정식을 만들어주고

여기서 해를 구하면
x=1+52or152
이 나오며

이 두개의 해의 특정 상수배씩의 선형결합이 이 점화식의 일반항이 된다. (더 나아가서, 같은 말로 '특정한 벡터'를 고유값(eigen value, 아이젠 밸류)과 고유벡터(eigen vector, 아이젠 벡터)로 분해하였을 때, 두개의 고유벡터에 특정 상수배(고유값)씩의 선형결합이 '특정한 벡터'가 된다는 것과 동일하다.)

an=k1xn1+k2xn2

이때 특정 상수배(k1,k2)를 구하는 방법은, 초기 조건을 가지고 구하면 된다.

결국 a0=0, a1=1 을 이용하면

a0=0=k1+k2
a1=1=k1(1+52)1+k2(152)1

k1=15, k2=15

따라서 이 점화식의 일반항은

an=15(1+52)n15(152)n

어디서 많이 본 일반항 아닌가?

맞다. 피보나치 수열의 일반항이다.

전 포스팅에서는 특성방정식을 그대로 이용하지 않고, 특성방정식의 아주 일부분만 잠깐 빌려다가 쓰고(특성 방정식에서 '틀'을 바꿔 수열을 잠깐 다항함수의 방정식 형태로 바꾼 뒤 근과 계수와의 공식으로 수열의 계수를 바꾼 정도) 계차의 공비를 구하는 식으로 점화식을 풀어내었다.

솔직히 전 포스팅에서는 이정도로 자세하게 특성방정식의 개념과 그 활용을 사용하지 않았기에 '일단 받아들여보세요~'하고 진행하였지만(사실 그 부분만 참고 넘어가면 이후에 유도하는데는 전혀 문제가 없다) 이후 좀 더 자세한 설명이 필요해보이기에 추가 포스팅한다.

[Arduino/아두이노] 3색 LED 켜기!

 

안녕하세요! 여러분!

오랜만에 다시 아두이노 포스팅으로 돌아왔습니다!

 

저번시간까지 아두이노를 컴퓨터와 연결하고, 예제 프로젝트를 실행해보고(블링크(Blink)), 외부라이브러리까지 추가해보았는데요!

 

오늘은 대망의 아두이노 외에 다른 '부품'(혹은 '소자' 라고도 하죠?)을 써보는 프로젝트를 해보도록 하겠습니다! 와~

 

대망의 첫 부품은 아주아주 간단한 3색 LED입니다!

 

그냥 LED도 아니고, 왜 3색이냐구요..?

 

어차피 그냥 LED와 3색 LED가 큰 차이가 없기 때문입니다. 그냥 R/G/B, 레드/그린/블루 LED 3개를 쓰나, 3색 LED 하나를 쓰나!

 

그럼 이제 아주 간단한 3색 LED를 만들어 보기 위해 차근차근 알아가 보도록 하겠습니다!

항상 이제부터는 아두이노와 물리적인 부품들을 연결할 것이기 때문에, 부품의 스펙을 알아보고 아두이노와 어떻게 연결(배선)할지를 알아본 뒤, 코딩을 통하여 프로젝트를 완성할 것입니다.

 

그럼 일단 3색 LED 부품의 스펙을 먼저 알아보고 가겠습니다!

 

1. 3색 LED 스펙-

제가 사용하는 3색 LED 부품은 HW-479이지만, 다른 부품을 사용해도 상관이 없는게, 이 3색 LED는 무조건 4개의 핀으로 이루어져 있으며, 하나는 -로 표기되어있는 GND, 나머지 세 핀이 각 각 R, G, B를 입력받는 핀입니다.

각각, 앞면과 뒷면 이미지인데요! 각 핀이 어떤건지 너무 잘 나와있죠? 여기서 우리는 -에 아두이노 GND를, RGB에 각각 해당하는 핀을 연결할 겁니다!

 

그리고 오늘은 대망의 첫 부품을 가지고 진행하는 프로젝트인 만큼, 아두이노와 부품의 연결에 제일 중요한 두가지를 알아보려고 합니다.

바로 케이블(선)브레드보드(빵판) 입니다.

 

1. 케이블

케이블은 말 그대로 부품과 아두이노를 연결는 선 입니다.!

아두이노는 좋은 점이 '점퍼 케이블'이라고하는, 케이블 양 끝에 점퍼가 있는 케이블로 쉽게 연결을 할 수 있다는 점입니다.

따로 납땜을 하지 않아도 된다는 것이지요.

케이블에는 두가지 종류가 있습니다.

F-M(암-수) 케이블, 그리고 M-M(수-수) 케이블입니다.

F-M 케이블
M-M 케이블

 

2. 브레드보드(빵판)

브레드보드의 경우 크기는 매우 다양할 수 있습니다. 보통이 30 홀(hole)짜리 브레드보드를 쓰게되구요, 그거보다 작은 브레드보드도 있고, 저처럼 60 홀 짜리도 있고, 이보다 더 큰 것도 있습니다. 여기는 구멍이 나있어서 부품을 막 꽂을 수 있도록 되어있는데 여기서도 규칙이 있습니다.

자 위의 그림처럼, ABCDE끼리는 세로로 서로 연결되어있습니다.(가로로는 서로 끊어져 있습니다)[빨간선]

FGHIJ끼리도 세로로 연결되어있습니다.(가로로는 서로 끊어져 있습니다)[빨간선]

ABCDE와 FGHIJ는 끊어져있습니다.

제일 위에는 전원 선입니다. GND(-)[파란색] 라인과 전원(+)[빨간색] 라인이죠.

전원 선의 경우 가로로 쭉 이어져 있습니다. 당연히 +와 -간은 서로 끊어져 있구요.[주황선]

60홀의 경우 30홀을 기준으로 좌우가 끊어져있습니다.

지금은 개념이 어렵더라도 한번 읽고 머리에 기억해두면 이후에 소자를 연결하거나 할때 '왜 이렇게 꽂는지'에 대해서 이해하기 쉬워지니 그냥 가볍게 읽고 넘어가 봅시다! 간단하게 말하자면 저런 규칙이 있어서 브레드 보드를 쓸 수 있습니다.

참고로 브레드보드의 어원은 말 그대로 초기 비전문가들이 빵(브레드) 자르는 판(보드)에다가 회로를 구성했기에 브레드보드로 이름 붙었다네요! 빵판이라고도하죠!

 

* 그리고 여기서 아두이노와 부품을 연결하는 방식 두가지!

하나는 F-M케이블(암-수케이블)로 아두이노와 직접 연결!

또하나는 M-M케이블(수-수케이블)로 빵판(브레드보드)를 이용하여 연결!

이렇게 두가지 방법이 있습니다.

현재 3색 LED에는 내부적으로 내장 저항이 있어서 아두이노와 직접 F-M케이블로 연결해도 되지만, 보통 소자들은 내부적으로 저항이 없기 때문에, 브레드보드(빵판)에 부품을 꽂고, 저항을 꽂고, 거기에 M-M케이블로 연결하는 것이 보통입니다.

그렇기에 오늘은 브레드보드를 이용하여 아두이노와 소자를 케이블로 연결해보겠습니다.

 

2. 아두이노와 연결(배선)

배선 첫 시간이니 배선에 대해서 말씀드리자면, 가능한한 색을 다르게 써서 보기 편하게, 헛갈리지 않게 하는것이 중요합니다!

우선 전원 선(+선)은 빨간색, 접지 선(-선, GND선)은 까만색이 기본이고, 그 외에는 구분이 잘 가고 직관적인 색이면 됩니다!

오늘 저희는 전원 선이 따로 없기 때문에 RGB에 각각 빨간색, 초록색, 파란색 선을 쓸 것이고 GND에 검은색 선을 쓸 것입니다.

3색 LED이기 때문에 각 R, G, B에 입력신호를 줄 pin이 하나씩 있어야 겠죠? 그러니 일단 선 세개를 쓸 것이구요, 입력할때 전기를 넣어 줬으면 이 전기가 빠져나갈 곳이 있어야 하니 GND pin도 하나 있어야 하겠습니다. 결국 3색 LED는 선 4개로 아두이노와 연결하여 쓸 수 있습니다.

한번 부품도로 그려보면

이와 같이 되겠습니다. 별건 아니고요, 이 그림에서는 3색 LED 핀 순서가 R - B G 이기때문에 이런 식의 배선이 되었습니다만, 실제 부품에서는 부품 핀 순서가 - R G B 순서이므로 이렇게 꽂아주시면 됩니다.

아두이노에 연결할때는 아두이노 우노 기준으로 9번핀에 R, 10번핀에 B, 11번핀에 G를 할당해 주었고, GND(-)는 아두이노 GND핀에 바로 연결하였습니다.

실제로 부품을 꽂아봅시다!

'기기나 기판에 장치나 부품 따위를 실제로 사용할 수 있도록 설치'하는 것을 '실장하다'라고 하는데요, 실제로 부품을 실장해보면 위의 이미지와 같을 것입니다.

R, G, B, - 3색 LED 핀에 각각 9, 10, 11, GND를 연결해 주었습니다. 이로써 아두이노와 부품간 배선이 끝났습니다!

 

3. 코딩

저는 개인적으로 이 영역을 가장 좋아합니다. 이미 연결된 상태에서 코딩으로 이 부품을 자유자재로 다룰 수 있기 때문이죠!

자 일단 기본적인 세팅을 해 봅시다!

이전까지 저희가 열심히 설치했던 아두이노 IDE를 켜주세요!

처음 켜면

이렇게 setup 구간(함수)와 loop 구간(함수)로 구성되어 있는 것을 볼 수 있습니다.

아두이노의 가장 핵심적인 부분인데요, 아두이노는 처음 프로그램이 실행되면서 setup 함수에 있는 내용을 한번 쭉 실행한 뒤에 그뒤로는 loop 함수만 반복적으로 실행합니다. 즉, setup에는 말 그대로 이 프로그램에 대한 초기 셋팅들을 해주고 loop에서 아두이노가 계속적으로 처리할 내용을 적어주는거죠!

결국 아두이노는 setup -> loop -> loop -> loop ... 이렇게 실행하게 됩니다.

그럼 먼저 setup 영역부터 코딩해볼까요?

일단 아두이노는 각 핀에 대해서 정의를 내려줘야합니다.

'이 핀은 내가 전원을 내보낼 핀이야', '이 핀은 내가 전원을 읽을 핀이야' 이런식으로요!

이 정의를 해주는 함수는 pinMode()입니다. 이 함수는 값이 두개가 필요합니다. 핀 넘버와 핀 모드죠.

핀 넘버는 말그대로 저희가 사용할 pin입니다. 아두이노에 숫자로 써져있는거죠. 오늘 저희가 사용할 핀은 9, 10, 11번 핀입니다.

핀 모드는 내가 출력할거면 OUTPUT, 내가 읽을거면 INPUT을 쓰면 됩니다.

자, 이제 바로 코딩해보도록하겠습니다. 전원선과 GND선은 따로 핀모드 설정이 필요없기 때문에 RGB에 대응하는 9,10,11번 핀만 핀모드를 설정하겠습니다.

void setup(){
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
}

 

자, 그럼 이제 loop함수로 가볼까요!

가장간단하게 1초동안 빨간 불을 켜고, 바로 다음 1초동안 초록 불을 켜고, 바로 다음 1초동안 파란불을 켜보도록하겠습니다.

 

void loop(){
  digitalWrite(11, LOW);
  digitalWrite(9, HIGH);
  delay(1000);
  digitalWrite(9, LOW);
  digitalWrite(10, HIGH);
  delay(1000);
  digitalWrite(10, LOW);
  digitalWrite(11, HIGH);
  delay(1000);
}

 

여기서 digitalWrite는 0, 1 즉 켜고 끄는 걸로 해당 핀에 신호를 주겠다는 명령어이구요, delay는 ms단위로 쉬겠다는 의미입니다!

결국 완성된 코드는 다음과 같습니다!

void setup(){
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
}

void loop(){
  digitalWrite(11, LOW);
  digitalWrite(9, HIGH);
  delay(1000);
  digitalWrite(9, LOW);
  digitalWrite(10, HIGH);
  delay(1000);
  digitalWrite(10, LOW);
  digitalWrite(11, HIGH);
  delay(1000);
}

 

4. 결과

자, 그럼 배선과 코딩한 것을 바탕으로 결과를 한번 볼까요!?

자, 잘 돌아가는 것을 확인했습니다!

지금 현 상황에서 배선도 완료되어있고, 작동도 제대로 되고 있는 것을 확인했으니, 이제 코딩으로 다양한 활용이 가능해집니다!

더욱 자세한건 다음번에 알아보아요!

아참, 우리가 지금 한 것은 켜고 끄기만 하는 digitalWrite였는데요, 여기서 analogWrite는 0~255사이의 값을 PWM 방식으로 차등적으로 적용할 수 있습니다. 즉, '강도 조절'이 가능해진다는 말인데요!

이를 바탕으로 각 불이 점점 밝게 들어왔다가 꺼지는 것도 가능하답니다!

힌트는 여기까지! 다음번에 또 보아요~

+ Recent posts