Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| 수학:코흐_곡선 [2022/01/16 17:29] – created yong | 수학:코흐_곡선 [2023/09/05 15:46] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | 먼저 | + | ====== 정의 ====== |
| + | **코흐 곡선**은 여러 프랙탈 도형중의 하나로, 같은 모양이 지속적으로 반복되는 프랙탈이다. | ||
| + | 다양한 도형을 생각해볼 수 있으며, 여기서는 | ||
| {{ : | {{ : | ||
| - | 위의 그림을 살펴보면 | + | 위의 그림에서, |
| - | 선의 모양변화를 5구역으로 나누어 생각해볼 수 있다. | + | 선의 모양변화를 5구역으로 나누어 생각해볼 |
| + | |||
| + | \begin{equation} | ||
| + | 5^{d_L} = 11 \, \rightarrow \, d_L = \ln11 / \ln5 | ||
| + | \end{equation} | ||
| + | |||
| + | 으로 결정된다. 프랙탈의 차원에 대한 자세한 설명은 [[물리: | ||
| 이제 여기서 크기를 키우는 작업을 시행하자. 그 변환을 S라고 부르고, 크기는 5배씩 증가시킨다. 과정 S와 I는 도형의 변환에 따라 그 수가 달라지는 데, | 이제 여기서 크기를 키우는 작업을 시행하자. 그 변환을 S라고 부르고, 크기는 5배씩 증가시킨다. 과정 S와 I는 도형의 변환에 따라 그 수가 달라지는 데, | ||
| - | 지금의 경우에서는 선 하나에 대해서 5개 구역으로 나뉠 수 있으므로, | + | 지금의 경우에서는 선 하나에 대해서 5개 구역으로 나뉠 수 있으므로, |
| {{ : | {{ : | ||
| (※ 하나의 이미지에 담기 위해 여기서는 변환 S를 2.5배로 두었다.) | (※ 하나의 이미지에 담기 위해 여기서는 변환 S를 2.5배로 두었다.) | ||
| - | |||
| - | 이와 비슷한 모양으로 변환을 거치는 프랙탈 도형을 **코흐 곡선**이라고 부른다. | ||
| ====== 이차 코흐곡선 ====== | ====== 이차 코흐곡선 ====== | ||
| 이번에는 하나의 선을 이용하여 형성된 프랙탈을 면으로 구성하여 변환을 거쳐보자. 이러한 프랙탈 도형을 **이차 코흐곡선(Quadratic Koch curve)**, **이차 코흐 섬(Quadratic Koch island)**, 또는 | 이번에는 하나의 선을 이용하여 형성된 프랙탈을 면으로 구성하여 변환을 거쳐보자. 이러한 프랙탈 도형을 **이차 코흐곡선(Quadratic Koch curve)**, **이차 코흐 섬(Quadratic Koch island)**, 또는 | ||
| - | **코흐 눈꽃송이(Koch snowflake)** 등으로 불린다. 앞의 과정과 같이 선의 길이는 5이고, 여기서는 기본 도형이 사각형으로 시작한다. | + | **코흐 눈꽃송이(Koch snowflake)** 등으로 불린다. 앞의 과정과 같이 선의 길이는 5이고, 여기서는 기본 도형이 사각형으로 시작하여 각 선분마다 변환을 시행한다. |
| {{ : | {{ : | ||
| + | |||
| + | 마찬가지로 다음 변환을 진행하기 위해, 가로 및 세로의 길이를 5배 늘리고, 변환 I를 진행하여 그림을 그릴 수 있을 것이다. 하지만 앞의 선의 경우와 달리 | ||
| + | 면을 형성하고 있어 다소 복잡하므로, | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | 외부는 신경쓰지 않고, 내부에서 형성되는 사각형을 살펴보면, | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | 번호순대로 모양별 사각형을 square, dead-end, corner, parallel, line, empty라고 부르자. 오른쪽에 그려진 도형은 각 도형별로 변환 I를 거쳤을 때 | ||
| + | 생각할 수 있는 그림이다. | ||
| ===== 선형 분석 ===== | ===== 선형 분석 ===== | ||
| Line 25: | Line 43: | ||
| \begin{equation} | \begin{equation} | ||
| - | \vec{d}_{sq} \quad \vec{d}_{dead} \quad \vec{d}_{cor} \quad \vec{d}_{para} \quad \vec{d}_{line} \quad \vec{d}_{empty} | + | \mathbf{d} = \left( d_{\rm sq}\,, d_{\rm dead}\,, d_{\rm cor}\,, d_{\rm para}\,, d_{\rm line}\,, d_{\rm empty} |
| \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} | ||
| + | |||
| + | $\lambda_{\rm sq}\,, \lambda_{\rm dead}\,, \lambda_{\rm cor}$는 0, $\lambda_{\rm para}$는 1, $\lambda_{\rm line}$는 11, $\lambda_{\rm empty}$는 25의 고윳값을 가지는 것을 확인할 수 있다. 코흐 곡선의 정의에서 길이 차원을 구한 것과 같이, 면적에 대한 차원을 계산해 볼 수 있는데, | ||
| + | |||
| + | \begin{align*} | ||
| + | 5^{{d}_{\rm{sq}}} | ||
| + | 5^{{d}_{\rm{para}}} =& 1 \, \rightarrow \, d_{\rm{para}} = \ln 1 / \ln 5 = 0 \\ | ||
| + | 5^{d}_{\rm{line}} | ||
| + | 5^{d}_{\rm{empty}} | ||
| + | \end{align*} | ||
| + | |||
| + | 따라서 $d_{\rm sq}\,, d_{\rm dead}\,, d_{\rm cor}$는 irrelevant하며, | ||
| + | |||
| + | 한편 각 고유값에 대응되는 고유벡터는, | ||
| + | \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}} =& | ||
| + | \end{aligned} | ||
| + | \end{equation*} | ||
| + | |||
| + | 고유벡터로 구성되는 행렬 Q를 $Q = \left( \mathbf{d}_{\rm{sq}}\,, | ||
| + | 으로 구성하면, | ||
| + | \begin{equation*} | ||
| + | SI^{n} = \left( QDQ^{-1} \right)^{n} = QD^{n}Q^{-1} | ||
| + | \end{equation*} | ||
| + | |||
| + | 위 식의 성질을 이용하여 python의 numpy, matplotlib를 이용한 코드는 아래와 같다. | ||
| + | |||
| + | {{: | ||
| + | |||
| + | |||
| + | <code Python | fractalstep.py> | ||
| + | import numpy as np | ||
| + | import numpy.linalg as lin | ||
| + | import matplotlib.pyplot as plt | ||
| + | |||
| + | matrix = np.array( | ||
| + | [[0, | ||
| + | [8, | ||
| + | [4, | ||
| + | [4, | ||
| + | [4, | ||
| + | [1, | ||
| + | ) | ||
| + | |||
| + | steps = 10 | ||
| + | eigval, eigvec = lin.eig(matrix) | ||
| + | diagmat = np.zeros((6, | ||
| + | np.fill_diagonal(diagmat, | ||
| + | diagmat0 = diagmat | ||
| + | sum_mat = np.zeros((6, | ||
| + | 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, | ||
| + | label = [' | ||
| + | for i in range(6): | ||
| + | plt.plot(x, sum_mat[i], label=label[i]) | ||
| + | plt.yscale(' | ||
| + | plt.plot((2, | ||
| + | log_5_11=np.log(11)/ | ||
| + | plt.plot((2, | ||
| + | plt.xlabel(' | ||
| + | plt.ylabel(' | ||
| + | plt.legend() | ||
| + | plt.savefig(' | ||
| + | </ | ||
| + | |||
| + | ====== 함께 보기 ====== | ||
| + | * [[물리: | ||
| + | * [[http:// | ||
| + | |||
| + | |||