0

如果目标函数是 在此处输入图像描述

如何在python中编码?我已经编写了正常的代码: 在此处输入图像描述

    将 numpy 导入为 np  
    将 scipy 导入为 sp  
    从 scipy.optimize 导入最小平方
    将pylab导入为pl

    m = 9 #多项式的次数

    def real_func(x):
        返回 np.sin(2*np.pi*x) #sin(2 pi x)

    def fake_func(p, x):
        f = np.poly1d(p) #多项式
        返回 f(x)


    def残差(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 y in y0]


    p0 = np.random.randn(m)


    plsq = 最小平方(残差,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

由于惩罚项也只是二次的,因此您可以将其与误差的平方叠加在一起,并对数据使用权重 1,对惩罚行使用 lambda。

如果您不想自己编写代码,scipy.optimize.curvefit 会进行加权最小二乘。

于 2012-08-17T02:41:58.323 回答