Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| 수학:코흐_곡선 [2022/01/16 22:15] – 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이고, 여기서는 기본 도형이 사각형으로 시작하여 각 선분마다 변환을 시행한다. |
| {{ : | {{ : | ||
| Line 75: | Line 81: | ||
| \end{align} | \end{align} | ||
| - | $d_{\rm sq}\,, | + | $\lambda_{\rm sq}\,, |
| - | 고유방정식의 의미를 생각해보면, $d_{\rm sq}\,, d_{\rm dead}\,, d_{\rm cor}$는 irrelevant하며, | + | |
| - | 다음으로 정수로 구성되는 고유벡터는, | + | \begin{align*} |
| - | \begin{align} | + | 5^{{d}_{\rm{sq}}} |
| - | \mathbf{d}_{\rm{sq}} =& \left( -1 ~~ 4 ~~ -4 ~~ 0 ~~ 0 ~~ 1 \right) \\ | + | 5^{{d}_{\rm{para}}} =& 1 \, \rightarrow \, d_{\rm{para}} = \ln 1 / \ln 5 = 0 \\ |
| - | \mathbf{d}_{\rm{dead}} =& \left( 0 ~~ 1 ~~ -2 ~~ 0 ~~ 1 ~~ 0 \right) \\ | + | 5^{d}_{\rm{line}} |
| - | \mathbf{d}_{\rm{cor}} | + | 5^{d}_{\rm{empty}} |
| - | \mathbf{d}_{\rm{para}} =& \left( 0 ~~ 1 ~~ -1 ~~ 1 ~~ -3 ~~ 2 \right) \\ | + | \end{align*} |
| - | \mathbf{d}_{\rm{line}} =& \left( 0 ~~ -98 ~~ -112 ~~ -28 ~~ -196 ~~ 379 \right) \\ | + | |
| - | \mathbf{d}_{\rm{empty}} =& | + | 따라서 |
| - | \end{align} | + | |
| + | 한편 각 고유값에 대응되는 고유벡터는, | ||
| + | \begin{equation*} | ||
| + | \begin{aligned} | ||
| + | \mathbf{d}_{\rm{sq}} =& | ||
| + | \mathbf{d}_{\rm{dead}} =& | ||
| + | \mathbf{d}_{\rm{cor}} | ||
| + | \end{aligned} | ||
| + | \qquad | ||
| + | \begin{aligned} | ||
| + | \mathbf{d}_{\rm{para}} =& | ||
| + | \mathbf{d}_{\rm{line}} =& | ||
| + | \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:// | ||
| + | |||