python 最小二乘

from numpy import *
from scipy.optimize import leastsq
import pylab
def groundTruth(x):
    return sin(2*pi*x)

def fit_function(x,n):
    f=poly1d(n)
    return f(x)

def loss(p,gt,x):
    return fit_function(x,p)-gt



x=linspace(0,1,9)
y=groundTruth(x)
y1=[random.normal(0,0.1)+i for i in y]
init_p=random.randn(9)
pere=leastsq(loss,init_p,args=(y1,x))

print(pere[0])

pylab.plot(x,y,label='real')
pylab.plot(x,fit_function(x,pere[0]),label='fitted curve')
pylab.legend()
pylab.show()

实验目的与实验环境 掌握曲线拟合的最小二乘法 探求拟合函数的选择与拟合精度间的关系 实验环境 操作系统:Windows XP 程序语言:Python 2.5和C++ 二、实验内容与实验步骤 实验内容: 利用数据拟合的最小二乘法从一组数据中找出其规律性,并给出其数学模型的近似表达式。 三、实验过程与分析 1.在试验过程中,由于计算公式较为复杂,在编程实现过程中遇到很多逻辑错误。例如在使用SOR方法解正则方程组时,计算迭代向量时错误的把下标值写错,从而导致计算结果错误,而这类错误很难发现,为了解决此类问题,故在调试阶段,所进行测试的数据为已知精确函数的一些数据值,每完成一系列计算,就打印出计算结果,与已知精确函数相比较,从而找出这些错误的出处。 2.在使用SOR方法求解正则方程组时,由于松弛因子选择不当,使得达到精度要求所进行的迭代次数很大,为了能够较快的达到精度要求,多次改变了松弛因子的取值,在经过多次修改取值后发现当松弛因子取值为1.36时相对较快。 四、实验结果总结 实验测试中分别用最小二乘法进行三次多项式、二次多项式、四次多项式的曲线拟合,并计算出了三个拟合曲线的均方误差。由运行结果可知,三次多项式的均方误差小于二次多项式的均方误差,二次多项式的均方误差小于四次多项式的均方误差,因此,三次多项式的拟合曲线相对较好。 通过此次试验,使我对最小二乘法有了更加深刻的认识,对其在生产实践和科学实验中的应用也有了一定的了解。在求解正则方程组时使用了SOR方法,也使得我更加熟练的掌握SOR求解方程组的方法。同时,通过将书中的理论公式转换为代码,使得我的编程能力有了一定的提高。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值