共振の近似線
ここでは、共振回路の実験結果を用いて、近似線と補間の線をPythonで描画する。
なぜ適当な補間は良くないのか
理論に沿っていないから。
多くの学生が実験結果をExcelでグラフにするとき、特に意図を持たずにプロットを線で結んでいるか、あるいは最小二乗法で直線を引いている。
こういった線は「それっぽく」見えるが、実際にもっと細かく値を測定したときに、その線の上にデータが乗る保証はどこにもない。実験結果から知見を得るためには、理論をもとに、誤差をうまく扱ってグラフを描く必要がある。その方法のひとつが近似である。
近似線
近似線は、理論式を元に、測定値の近くをうまく通るように理論式のパラメータを調整した式をつかって計算する。
今回使用したRLC直列回路の電流の理論式は、
である。この式においてパラメータはである。これらの値を機械学習によって調整することで、測定値に対して当てはまりの良い近似線を引くことができる。
補間
補間とは、点と点の間をなめらかにつなぐ方法であり、なめらかだからといって理論に沿っているわけではない。ただし、理論式のわからない場面で値の予測をするために用いることはできる。
補間にはいくつかの方法がある。最も簡単なのは線形補間で、ただ点と点の間を線分で結ぶだけである。スプライン補間など、もっと高度な方法ではなめらかに点をつなぐことができる。
Pythonで試す
まず、周波数と電流のデータを以下のように記述したCSVファイルrlc.csv
を作成し、サーバにアップロードする。
frequency[Hz], I[mA]
50, 5.0
80, 5.8
100, 6.3
...
方法は以下を参照のこと。
サーバにプログラムresonant_i.py
をアップロードし、プログラムをエディタで開いて穴埋めをする。
まずは、理論式に沿って以下のプログラムを穴埋めする。このプログラムは電流値を返す。
def resonant_i(f, e0, l, c):
#数式
omega =
z_real =
z_imag =
return e0 / np.sqrt(z_real**2 + z_imag**2)
これを保存し、ターミナルでpython3 resonant_i.py
で実行すると、測定値と理論線がプロットされる。
ここに近似線を追加する。近似線のプロットをする関数がコメントアウトされているため、先頭の#
を削除する。
#plt.plot(x2, y2*1000, '-', color='b', label='fit') # y2*1000はy-axisをmA単位に変更
の先頭の#
を削除する。
もう一度プログラムを実行すると、近似線がプロットされた。
関数fit_i()
では、以下の処理を行っている。
param, cov=curve_fit(resonant_i,x_obs,y_obs,[e_init, l_init, c_init])
ここでは、理論式のパラメータe
, l
, c
の3つを、測定値に当てはまりが良くなるように機械学習によって推定している。なお、r
とR
は誤差がないと仮定して、あらかじめ指定している。パラメータが多いと機械学習で妥当な結果を出すのが難しくなる。
これらの推定したパラメータを理論式に入れて線を描いたのが近似線である。
次に、スプライン補間の線をプロットする。
近似線のプロット関数はコメントアウトし、かわりにスプライン補間の関数のコメントアウトを解除する。
関数spline_interp()
において、以下のinterp1d()
関数のなかで引数kind
がスプライン曲線の種類を指定している。
func_spline = interp1d(in_x, in_y, kind='zero') #slinear, quadratic, cubicはそれぞれ、1,2,3次のスプライン曲線
これを1次や3次に変更して、結果を比較する。