いろいろなフィッティング

http://d.hatena.ne.jp/aidiary/20100327/1269657354
http://d.hatena.ne.jp/aidiary/20100404/1270359720
を見ながらフィッティングのお勉強。

まずはサンプルデータの生成

#usr/bin/env python
#-*- coding: utf-8 -*-
import numpy as np
from pylab import *

#サンプルデータの数
N=10
#区間(0,1)をN個に分割
t = linspace(0,1,N)
#正弦波 周期t=1
wav = sin(2*np.pi*t) # y = sin(2*pi/T*t)
#正規分布に従う誤差を生成
err = np.random.normal(0,0.2,N) #平均0, 標準偏差0.2のガウス分布からN点抽出
wav = wav + err
plot(t,wav,'go')

x = linspace(0,1,5000)
sin = sin(2*np.pi*x)
plot(x,sin,'b-')
show()

次に多項式の生成。
 y(\mathbf{x},\mathbf{w})=w_0 +w_1 x + w_2 x^2 + w_3 x^3 + ... + w_M x^{M-1} = \sum_{k=0} ^M {w_k x^{k-1}}

#coding: utf-8
import numpy as np
from pylab import *

M = 3 #多項式の次数
def y(x,wlist):
    poly = wlist[0] #初項だけ入れとく
    print poly
    for n in range(1,M+1):
        poly += wlist[n] * pow(x,n)
        print poly
    return poly

x=1
wlist=(1,2,3,4)
ans = y(x,wlist)
print ans