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:// | ||
+ |