カテナリー曲線
紐の両端を水平な位置で固定して吊り下げると、紐はカテナリー曲線とよばれる形になります。カテナリーを意味する英語 catenary はラテン語の catena(鎖)に由来します。日本語では懸垂線とよばれることもあります。カテナリー曲線は $a$ をパラメータとして
\[y=\frac{a(e^{x/a}+e^{-x/a})}{2}\]
という方程式で表されます。双曲線関数
\[\mathrm{cosh}x=\frac{e^{x}+e^{-x}}{2}\]
を用いて
\[y=a\mathrm{cosh}\left(\frac{x}{a}\right)\]
と表すこともできます。
Matplotlib.pyplot を使って、カテナリー曲線 (catenary) のグラフを描いてみます。パラメータ $a$ はユーザーが入力できるようにします。
# Python_Matplotlib_catenary # カテナリー(懸垂線)のグラフ import numpy as np import matplotlib.pyplot as plt # フィギュアを設定 fig = plt.figure() # グリッド線を表示 plt.style.use("ggplot") # グラフ描画領域を追加 ax = fig.add_subplot(111) # グラフタイトルを設定 ax.set_title("Catenary", fontsize=16) # x軸, y軸のラベルを設定 ax.set_xlabel("x", fontsize=16) ax.set_ylabel("y", fontsize=16) # aの値を入力 a = input("aの値を入力:") # aを浮動小数点型に変換 a = float(a) # -2~2まで0.1刻みのデータを用意 x = np.arange(-2, 2.1, 0.1) # yのデータを用意 y = a*(np.exp(x/a)+np.exp(-x/a))/2 # y軸の範囲を0~4に設定 ax.set_ylim(0, 4) # データをプロット ax.plot(x, y) # Axesの左上にテキストボックスを追加(位置は軸座標で指定) ax.text(0.01, 0.1, "a = " + str(a), color="red", transform=ax.transAxes)
このサンプルコードを実行すると、a の値を入力するように促されます。
入力値に応じて次のようなグラフが描かれます。
サンプルコードについて簡単に解説します。
パラメータを入力してもらうために input関数を用いています:
# aの値を入力 a = input("aの値を入力:")
input関数の戻り値は文字列なので、これを浮動小数点型に変換しておきます:
# aを浮動小数点型に変換 a = float(a)
配列 x を用意します:
# -2~2まで0.1刻みのデータを用意 x = np.arange(-2, 2.1, 0.1)
配列 x の各要素に対して、y の値を計算させます:
# yのデータを用意 y = a*(np.exp(x/a)+np.exp(x/a))/2
今表示されている曲線のパラメータがわかるように、Axesオブジェクトにテキストボックスを追加して、そこに a の値を書き込んでおきます:
# Axesの左上にテキストボックスを追加(位置は軸座標で指定) ax.text(0.01, 0.1, "a = " + str(a), color="red", transform=ax.transAxes)
テキストボックスの位置は座標で指定しますが、デフォルト設定のままだと、データ座標を基準に位置が決定されます。transform 引数に ax.transAxes を渡すと、グラフが描画されている領域の幅を 1 とする Axes 座標を指定できます。
コメント