0

オブジェクト関数が ここに画像の説明を入力

Pythonでコーディングする方法は?私はすでに通常のものをコーディングしました: ここに画像の説明を入力

    numpy を np としてインポート  
    scipyをspとしてインポート  
    from scipy.optimize import leastsq
    pylab を pl としてインポート

    m = 9 #多項式の次数

    デフ real_func(x):
        return np.sin(2*np.pi*x) #sin(2 pi x)

    def fake_func(p, x):
        f = np.poly1d(p) #多項式
        f(x)を返す


    デフォルト残差(p、y、x):
        y を返す - fake_func(p, x)

    #無作為に 9 点を x として選ぶ
    x = np.linspace(0, 1, 9)

    x_show = np.linspace(0, 1, 1000)

    y0 = real_func(x)
    #ノーマライズノイズを追加
    y1 = [np.random.normal(0, 0.1) + y for y0]


    p0 = np.random.randn(m)


    plsq = leastsq(残差, p0, args=(y1, x))

    print 'フィッティングパラメータ:', plsq[0]

    pl.plot(x_show, real_func(x_show), label='real')
    pl.plot(x_show, fake_func(plsq[0], x_show), label='適合曲線')
    pl.plot(x, y1, 'bo', label='ノイズあり')
    pl.legend()
    pl.show()
4

1 に答える 1

0

ペナルティ項も 2 次であるため、誤差の 2 乗と一緒に積み重ねて、データに重み 1 を使用し、ペナルティ行にラムダを使用することができます。

scipy.optimize.curvefit は、自分でコーディングしたくない場合、加重最小二乗を行います。

于 2012-08-17T02:41:58.323 に答える