Python 学習:Fitting

2014-03-02 :  PCクリニック
本文の前に、
-・・・ -・-
現時点での、blogramのランクインカテゴリは、
2、2、2、1、2、 0、0、0、0、1(38)で、換算ポイント 57pt 。
特段の変化は無し。
・-・ - -・

さて、本文。

先月下旬(2014-02-26)の記事:
Python 学習:始まり
から、本格的に Python の学習を始めた。

今回は、観測データの関数フィッティングについて。


これまでの記事を検索すると、
Fitting
あるいは、
フィッティング
ですネ。

紆余曲折した結局、
Algorithm::CurveFit : これで決まりかナ?
で書いた如く、
  ・・・・・
  となると、
  R言語で、
  と云うことになる の か な ?
  ・・・・・

と云うことで、
今では、「Perl」で、と云っても
実質「R」のコードを生成して、その結果を受け取っている。


それで、この様な事をしなくても、
「Python」だけ(?)で出来るようですネ。

それには、
「Scipy」パッケージを追加しておいて、その中の
「optimize」モジュールの「curve_fit」関数を使う。
これは、“non-linear least squares”
即ち、“非線形最小二乗法”ですか。

なお、その為には、
「NumPy」パッケージも必要。
これの“アレイ”関数で、データを定義する。


これまでに、Perl で( R の力をかりて )テストした例:

x の値が、1, 2, 3, 4, 5, 6, 7, 10
の時の
y の値が、8, 7, 6.5, 6, 5.8, 5.3, 5, 4
だとする。
この時の y = f(x) = a * ( x ** (-1/b) )
でフィッティングさせたら、

a = 8.25951165850632
b = 3.94278544330978

だった。


これを、Python で、

import numpy as np
from scipy.optimize import curve_fit

x = np.array( [1, 2, 3, 4, 5, 6, 7, 10] )
y = np.array( [8, 7, 6.5, 6, 5.8, 5.3, 5, 4] )
def yfx( x, a, b ): return a * ( x ** (-1/b) )
abValue, dummy = curve_fit( yfx, x, y, p0=(1,1) )
a = abValue[0]; b = abvalue[1]

なるコードで実行したら、

a = 8.2595111779584656
b = 3.9427862739630415

となった。

小数点以下6~7桁目に違いが現れた。

まあ、こんなものかナ。


これからも、Python の学習を続けます。



見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


140216
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
09 | 2017/10 | 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク