수학:코흐_곡선

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revisionBoth sides next revision
수학:코흐_곡선 [2022/01/16 21:36] yong수학:코흐_곡선 [2022/01/17 16:23] yong
Line 24: Line 24:
 면을 형성하고 있어 다소 복잡하므로, 다음 변환을 생각하기 위해 규칙을 찾아보자. 사각형이 변환 I를 거쳐 모습이 형성되었을 때, 2차원 격자를 그어 살펴보자. 면을 형성하고 있어 다소 복잡하므로, 다음 변환을 생각하기 위해 규칙을 찾아보자. 사각형이 변환 I를 거쳐 모습이 형성되었을 때, 2차원 격자를 그어 살펴보자.
  
-{{ :수학:koch4.png?300 |}}+{{ :수학:koch4.png?200 |}}
  
 외부는 신경쓰지 않고, 내부에서 형성되는 사각형을 살펴보면, 6가지의 공통된 사각형을 가지는 것을 확인할 수 있다. 외부는 신경쓰지 않고, 내부에서 형성되는 사각형을 살펴보면, 6가지의 공통된 사각형을 가지는 것을 확인할 수 있다.
  
-{{ :수학:koch5.png?400 |}}+{{ :수학:koch5.png?300 |}}
  
 번호순대로 모양별 사각형을 square, dead-end, corner, parallel, line, empty라고 부르자. 오른쪽에 그려진 도형은 각 도형별로 변환 I를 거쳤을 때 번호순대로 모양별 사각형을 square, dead-end, corner, parallel, line, empty라고 부르자. 오른쪽에 그려진 도형은 각 도형별로 변환 I를 거쳤을 때
Line 37: Line 37:
  
 \begin{equation} \begin{equation}
-    \vec{d}_{\rm sq} \quad \vec{d}_{\rm dead} \quad \vec{d}_{\rm cor} \quad \vec{d}_{\rm para} \quad \vec{d}_{\rm line} \quad \vec{d}_{\rm empty}+    \mathbf{d} = \left( d_{\rm sq}\,, d_{\rm dead}\,, d_{\rm cor}\,, d_{\rm para}\,, d_{\rm line}\,, d_{\rm empty} \right)
 \end{equation} \end{equation}
 +
 +위 식의 기저를 순서로 하여, 도형 변환 I와 크기 변환 S의 행렬 SI를 아래와 같이 구성할 수 있을 것이다.
 +
 +\begin{align}
 +SI = 
 +\begin{pmatrix}
 + 0 & 0 & 0 & 0 & 0 & 0 \\
 + 8 & 5 & 3 & 2 & 1 & 0 \\
 + 4 & 4 & 3 & 4 & 2 & 0 \\
 + 4 & 2 & 1 & 0 & 0 & 0 \\
 + 4 & 6 & 5 & 8 & 4 & 0 \\
 + 1 & 5 & 11 & 9 & 17 & 25 
 +\end{pmatrix}
 +\end{align}
 +
 +따라서 n-1번의 변환을 거친 프랙탈에 대해 아래와 같은 선형 방정식을 세울 수 있다.
 +
 +\begin{equation}
 +    \mathbf{d}_{n} = SI \mathbf{d}_{n-1} = SI^{n-1} \mathbf{d}_1 \qquad (n \geq 2)
 +\end{equation}
 +
 +하지만 이는 편의상 우리가 살펴보는 직교좌표계의 행렬이므로, 고유방정식을 계산하여 실제 프랙탈 구성요소의 직교좌표로 구성된 공간의 모습을 살펴보자.
 +행렬 SI를 대각화하면
 +
 +\begin{align}
 +D=
 + \begin{pmatrix}
 + 0 & 0 & 0 & 0 & 0 & 0  \\
 + 0 & 0 & 0 & 0 & 0 & 0  \\
 + 0 & 0 & 0 & 0 & 0 & 0  \\
 + 0 & 0 & 0 & 1 & 0 & 0  \\
 + 0 & 0 & 0 & 0 & 11 & 0 \\
 + 0 & 0 & 0 & 0 & 0 & 25   
 + \end{pmatrix}
 +\end{align}
 +
 +$d_{\rm sq}\,, d_{\rm dead}\,, d_{\rm cor}$는 0, $d_{\rm para}$는 1, $d_{\rm line}$는 11, $d_{\rm empty}$는 25의 고윳값을 가지는 것을 확인할 수 있다.
 +고유방정식의 의미를 생각해보면, $d_{\rm sq}\,, d_{\rm dead}\,, d_{\rm cor}$는 irrelevant하며, $d_{\rm para}$는 marginal, $d_{\rm line}$와 $d_{\rm empty}$는 relevant하다.
 +
 +한편 각 고유값에 대응되는 고유벡터는,
 +\begin{equation*}
 +\begin{aligned}
 + \mathbf{d}_{\rm{sq}} =& \, \left( -1 ~~ 4 ~~ -4 ~~ 0 ~~ 0 ~~ 1 \right) \\
 + \mathbf{d}_{\rm{dead}} =& \, \left( 0 ~~ 1 ~~ -2 ~~ 0 ~~ 1 ~~ 0 \right) \\
 + \mathbf{d}_{\rm{cor}} =& \, \left( 1 ~~ -2 ~~ 0 ~~ 1 ~~ 0 ~~ 0 \right)
 +\end{aligned}
 +\qquad
 +\begin{aligned}
 + \mathbf{d}_{\rm{para}} =& \, \left( 0 ~~ 1 ~~ -1 ~~ 1 ~~ -3 ~~ 2 \right) \\
 + \mathbf{d}_{\rm{line}} =& \, \left( 0 ~~ -98 ~~ -112 ~~ -28 ~~ -196 ~~ 379 \right) \\
 + \mathbf{d}_{\rm{empty}} =& \, \left( 0 ~~ 0 ~~ 0 ~~ 0 ~~ 0 ~~ 1 \right)
 +\end{aligned}
 +\end{equation*}
 +고유벡터로 구성되는 행렬 Q를 $Q = \left( \mathbf{d}_{\rm{sq}}\,, \mathbf{d}_{\rm{dead}}\,, \mathbf{d}_{\rm{cor}}\,, \mathbf{d}_{\rm{para}}\,, \mathbf{d}_{\rm{line}}\,, \mathbf{d}_{\rm{empty}} \right)$
 +으로 구성하면 대각화의 성질을 이용하여 n번의 변환을 거친 프랙탈 기본 구성 사각형의 총 개수를 얻을 수 있다. 즉,
 +\begin{equation*}
 + SI^{n} = \left( QDQ^{-1} \right)^{n} = QD^{n}Q^{-1}
 +\end{equation*}
 +python을 이용하여 그래프를 그리면 다음을 얻을 수 있다.
 +
 +{{:수학:kochgraph.png?600 |}}
 +
 +
 +<code Python | fractalstep.py>
 +import numpy as np
 +import numpy.linalg as lin
 +import matplotlib.pyplot as plt
 +
 +matrix = np.array(
 +        [[0,0,0,0,0,0],
 +        [8,5,3,2,1,0],
 +        [4,4,3,4,2,0],
 +        [4,2,1,0,0,0],
 +        [4,6,5,8,4,0],
 +        [1,5,11,9,17,25]]
 +)
 +
 +steps = 10
 +eigval, eigvec = lin.eig(matrix)
 +diagmat = np.zeros((6,6))
 +np.fill_diagonal(diagmat,eigval)
 +diagmat0 = diagmat
 +sum_mat = np.zeros((6,steps))
 +for i in range(steps):
 +        A = eigvec @ diagmat @ lin.inv(eigvec)
 +        for j in range(6):
 +                sum_mat[j][i] = np.sum(A[j])
 +        diagmat = diagmat0 @ diagmat
 +
 +x = np.arange(1,steps+1,1)
 +label = ['square', 'deadend', 'corner', 'parallel', 'line', 'empty']
 +for i in range(6):
 +        plt.plot(x, sum_mat[i], label=label[i])
 +plt.yscale('log')
 +plt.plot((2,8),(5**5*10,5**17*10),'--',label='2')
 +log_5_11=np.log(11)/np.log(5)
 +plt.plot((2,8),(5**(log_5_11*2)*10,5**(log_5_11*8)*10),'--',label=r'$\log 11 / \log 5$')
 +plt.xlabel('steps')
 +plt.ylabel('n (steps)')
 +plt.legend()
 +plt.savefig('kochgraph.png', dpi=300, transparent=True)
 +</code>
 +
 +====== 함께 보기 ======
 +  * [[물리:프랙탈 차원]]
 +  * [[http://events.kias.re.kr/h/statphys.winterschool/?pageNo=4526|The 19th KIAS-APCTP Winter School on Statistical Physics]]
 +
 +
  • 수학/코흐_곡선.txt
  • Last modified: 2023/09/05 15:46
  • by 127.0.0.1