说明
最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小 。
最小二乘法还可用于曲线拟合,其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达 。
C++代码
bool leastSquare(const QVector<double>& x, const QVector<double>& y, double& k, double& b)
{
/** 公式:
* y1=ax1+bn
* y2=ax2+bx1
** 求解a,b
*/
double x1 = 0, x2 = 0, y1 = 0, y2 = 0;
int n = x.size();
for (int i = 0; i < n; ++i)
{
x1 += x[i] * x[i];
x2 += x[i];
y1 += x[i] * y[i];
y2 += y[i];
}
if ((x1 * y1 - n * x2) == 0 || (n * x2 - x1 * x1) == 0)
{
k = 0;
b = 0;
return false;
}
k = (x1 * y1 - n * y2) / (x1 * x1 - n * x2);
b = (x2 * y1 - x1 * y2) / (n * x2 - x1 * x1);
return true;
}
void main()
{
QVector<double> xVector, yVector;
for (int i= 0; i< 10; i++)
{
xVector << i;
yVector << i;
}
double k = 0, b = 0;
leastSquare(xVector, yVector, k, b)
}