实例通俗解释高斯牛顿法求解曲线拟合的最小二乘法问题与c++编程实践教程

本文通过实例详细解释如何使用高斯牛顿法解决曲线拟合的最小二乘法问题。首先介绍了问题背景,即通过数据点(x,y)拟合y=exp(ax^2+bx+c)+noise的曲线,然后阐述了高斯牛顿法的基本思想,即通过一阶泰勒展开和误差函数最小化迭代求解a、b、c的值。文章还提供了C++编程实践指导。" 105722670,8087681,Vue动态编辑下拉框及编辑删除按钮实践,"['Vue.js', 'JavaScript', '前端框架']
摘要由CSDN通过智能技术生成

要解决的问题是:

现在有N个数据点(x,y)。我们假设这个曲线 y = e x p ( a x 2 + b x + c ) + n o i s e y=exp(ax^2+bx+c)+noise y=exp(ax2+bx+c)+noise可以拟合那堆数据,其中a,b,c是待求解的参数,noise是噪声。我们要根据那堆数据去算出a,b,c的值。用的方法是高斯牛顿法。为啥有个牛顿?因为它和牛顿法一样都是用泰勒展开,只不过高斯牛顿法是一阶泰勒展开。一阶泰勒展开意味着它是线性方程,所以需要用高斯消元法去解方程。因此名字中的高斯就是这么来的。

怎么解决这个问题

现在我们知道了数据的模型,和数据(x,y)。a,b,c是待求解的参数。那么怎么知道a,b,c是设置的是适合这个数据还是不适合呢?答:计算误差不就可以了么。假设第i个样本数据是 ( x i , y i ) (x_i,y_i) (xi,yi),那么现在我们给定a,b,c值下的模型误差为: [ e x p ( a x i 2 + b x i + c ) + n o i s e − y i ] 2 [exp(ax_i^2+bx_i+c)+noise-y_i]^2 [exp(axi2+bxi+c)+noiseyi]2。由于二次方求导会前面有个系数2,为了求导方便我们习惯性在误差前面乘个 1 2 \frac 1 2 21。这就是我们经常看到的 1 2 [ e x p ( a x i 2 + b x i + c ) + n o i s e − y i ] 2 \frac 1 2[exp(ax_i^2+bx_i+c)+noise-y_i]^2 21[exp(axi2+bxi+c)+noiseyi]2. 由于不是只有一个样本。我们当然希望整个样本的误差都很小。所以要将所有样本误差累加起来,以衡量现在我们设定的a,b,c参数值是不是不错。于是就得到了最小二乘法的终极版目标函数 ∑ i = 1 N 1 2 [ e x p ( a x i 2 + b x i + c ) + n o i s e − y i ] 2 \sum_{i=1}^{N} \frac 1 2[exp(ax_i^2+bx_i+c)+noise-y_i]^2 i=1N21[exp(axi2+bxi+c)+noiseyi]

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值