2016年8月31日水曜日

開発環境

Pythonからはじめる数学入門 (Amit Saha (著)、黒川 利明 (翻訳)、オライリージャパン)の6章(幾何図形とフラクタルを描画する)、6.4(プログラミングチャレンジ)、問題6-3(エノン関数を調べる)を取り組んでみる。

問題6-3(エノン関数を調べる)

コード(Emacs)

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import matplotlib.pyplot as plt
from matplotlib import animation


N = 1 * 10**3
Writer = animation.writers['ffmpeg']
writer = Writer(fps=15,
                metadata=dict(artist='kamimura',
                              title='Hénon map ({0}) (Michel Hénon)'.format(N)),
                bitrate=1800)


def henon_map(p):
    x, y = p
    return y + 1 - 1.4 * x**2, 0.3 * x


def update_line(i, xs, ys, l):
    l.set_data([xs[:i], ys[:i]])
    return l,


def create_animation(n):
    x = 1
    y = 1
    xs = [x]
    ys = [y]
    for _ in range(n):
        x, y = henon_map((x, y))
        xs.append(x)
        ys.append(y)

    fig = plt.figure(figsize=(5, 5))
    ax = plt.axes(xlim=(-1.5, 1.5), ylim=(-0.4, 1.1))
    l, = plt.plot([], [], 'bo')
    anim = animation.FuncAnimation(fig,
                                   update_line,
                                   fargs=(xs, ys, l),
                                   frames=n,
                                   interval=1,
                                   repeat=False)
    anim.save(filename='henon_map.mp4', writer=writer)

if __name__ == '__main__':
    n = N
    create_animation(n)

入出力結果(Terminal, IPython)

$ ./sample3.py
$

0 コメント:

コメントを投稿