2010年11月18日木曜日

Pythonで最小2乗法を使う

Pythonならライブラリを使うだけでn次方程式の解を計算できる。

#!/usr/bin/python
# codin: UTF-8

#プロット点を出力
t = [  0,  0.3,  0.8,  1.1,  1.6,  2.3]
y = [0.6, 0.67, 1.01, 1.35, 1.47, 1.25]
plot(t,y,'o')

# y = a*x^2 + b*x^1 + cの解を求める
(a, b, c) = polyfit(t, y, 2)
print "Y=(%f * X^2) + (%f * X^1) + %f" % (a, b, c)

#最小二乗法のグラフを出力
tx = []
ty = []
for xx in range(0, 300, 1):
    v = float(xx) / 100
    tx.append(v)
    ty.append( (a*v*v) + (b*v) + c )
plot(tx,ty,'-')
show()

掃出し法や連立方程式を解く行列式のプログラムを実装しなくていいし、すごく便利。
これにロバスト法で、誤差の大きい入力データの仕分けが出来たら実用的だよなあ。

0 件のコメント:

Androider