0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

フラクタルで学ぶ複雑系の基礎:コッホ曲線の再帰的構造をシミュレーション

Last updated at Posted at 2025-01-07

はじめに

コッホ曲線(Koch Curve)は、フラクタル構造を持つ代表的な図形の一つです。
フラクタルは、自己相似性(Self-Similarity)という特徴を持ち、部分を拡大しても全体と同じ形をしています。

本記事では、Python を使ってコッホ曲線をシミュレートし、アニメーションとして可視化する方法を学びます。
また、フラクタルが複雑系とどのように関係するのかについても解説します。


📌 GitHub & Booth

本記事のコードは、以下のリポジトリおよび Booth で無料配布しています。

📂 Booth で ZIP 版をダウンロード(無料) (作業中)
👉 https://complex-dynamics.booth.pm/items/xxxxx

📌 GitHub でソースコードを確認
👉 Complex-System(コッホ曲線)

🚀 Google Colab で直接実行
👉 Google Colab で開く


コッホ曲線とは?

基本的な考え方

コッホ曲線は、以下のような 再帰的ルール に基づいて生成されます。

  1. 最初の状態(0次): 1本の線分からスタートする。
  2. 1次元分割: 線分を 3 等分し、中央の部分を取り除く。
  3. 三角形を追加: 取り除いた部分の代わりに、正三角形の頂点を作成する。
  4. 再帰処理: 各線分に対して、同じ操作を繰り返す。

この手順を繰り返すことで、無限に複雑な形状が生成されます。


コッホ曲線の重要性

コッホ曲線のようなフラクタルは、以下のような分野で応用されています。

自然界のパターン:雪の結晶、シダ植物の葉、雷の分岐構造
データ圧縮:フラクタル圧縮による高効率な画像保存
アンテナ設計:フラクタルアンテナは小型化と広帯域化に活用
金融市場の分析:カオス理論とフラクタルを用いたマーケットモデリング


Python でコッホ曲線を実装する
本記事では、Google Colab で実行できる Notebook 版 を用意しました。
以下のリンクから .ipynb ファイルを開き、セルを実行するだけでアニメーションが動作します。


🚀 Google Colab で実行

💡 以下は Google Colab で実行するコードの抜粋です(セルを順番に実行してください)。


実装コード

以下のコードは、Matplotlib を使ってコッホ曲線をアニメーションとして可視化するものです。

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import numpy as np

# コッホ曲線を生成する関数
def koch_curve(start, end, depth):
    if depth == 0:
        return [start, end]

    start = np.array(start)
    end = np.array(end)

    # 3等分点を計算
    point1 = start + (end - start) / 3
    point2 = start + (end - start) * 2 / 3

    # 正三角形の頂点を計算
    angle = np.pi / 3
    point3 = point1 + np.array([
        np.cos(angle) * (point2 - point1)[0] - np.sin(angle) * (point2 - point1)[1],
        np.sin(angle) * (point2 - point1)[0] + np.cos(angle) * (point2 - point1)[1],
    ])

    # 再帰的に分割
    return (
        koch_curve(start, point1, depth - 1) +
        koch_curve(point1, point3, depth - 1) +
        koch_curve(point3, point2, depth - 1) +
        koch_curve(point2, end, depth - 1)[:-1]  # 最後の重複を削除
    )

# フラクタルの描画を準備
depths = 5  # 再帰の最大深さ
frames = []  # フレームデータを保持

for depth in range(depths + 1):
    points = koch_curve([0, 0], [1, 0], depth)
    x, y = zip(*points)
    frames.append((x, y))

# アニメーションの描画設定
fig, ax = plt.subplots(figsize=(8, 6))
ax.set_xlim(-0.5, 1.5)
ax.set_ylim(-0.5, 1)
ax.set_title("Koch Curve Animation", fontsize=16)
ax.set_xlabel("X")
ax.set_ylabel("Y")
line, = ax.plot([], [], color="blue")

def update(frame):
    x, y = frames[frame]
    line.set_data(x, y)
    return line,

ani = FuncAnimation(fig, update, frames=len(frames), interval=1000, blit=True)

# アニメーションを表示
from IPython.display import HTML
HTML(ani.to_jshtml())

実行結果(作業中)

このコードを実行すると、以下のようなアニメーションが表示されます。

📌 コッホ曲線アニメーション GIF
koch_curve.gif


応用例:フラクタルが現実で使われる場面

1. 自然界のフラクタル

  • 雪の結晶:六角形の対称構造がフラクタルのように成長
  • シダ植物の葉:同じ形が繰り返される自己相似構造

2. データ圧縮

  • フラクタル圧縮:JPEGよりも高圧縮率で画像を保存する技術

3. 金融市場

  • フラクタル次元を使って、カオス理論と市場の価格変動を分析

次のステップ

コッホ曲線を理解したら、以下の応用例にも挑戦してみましょう!

3次元コッホ曲線:立体的なフラクタルを作成
ランダムフラクタル:自然界の不規則な形状をシミュレート
カオスとフラクタル:フラクタル次元を計算する


注意事項

  • 読者の皆様へ
    私はまだ学びの途中にある身ですので、内容に不足や誤りがあるかもしれません。
    もしお気づきの点があれば、ぜひコメント欄でご指摘いただけると幸いです。
    この試みが、少しでも読者の皆様の学びや発見につながれば嬉しく思います。

  • 記事作成の背景
    この記事は、ChatGPTを活用して作成しました。AIの力を借りることで、効率的かつ迅速にコンテンツを生成する実験を行っています。
    記事内容は、私自身が複雑系の学びを深めるためにまとめたものであり、これを通じて知識を共有しつつ、さらなる学びを促進することを目指しています。

  • コードについて
    本記事に掲載されているコードは、Google Colab上で動作確認済みです。
    もしコードを実行する際にエラーが発生した場合は、Python環境やライブラリのバージョンに注意してみてください。
    また、コメントやフィードバックをいただければ幸いです。


🔗 関連リンク

📌 GitHub でコードを確認
Complex-System(コッホ曲線)

📌 Google Colab で直接実行
Google Colab で開く

フォローやスター ⭐ で応援よろしくお願いします!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?