110,538
社区成员
发帖
与我相关
我的任务
分享
/// <summary>
/// 最小二乗法
/// </summary>
public void LeastSquareMethod(float[] x, float[] y, ref float a, ref float b)
{
int ii = 0;
float sum_x = 0;
float sum_y = 0;
float sum_xy = 0;
float sum_x2 = 0;
int dataCnt = Math.Min(Information.UBound(x), Information.UBound(y)) + 1;
if (dataCnt == 1) {
a = 0;
b = y[0];
return;
}
for (ii = 0; ii <= dataCnt - 1; ii++) {
//X和
sum_x += x[ii];
//Y和
sum_y += y[ii];
//X*Y和
sum_xy += x[ii] * y[ii];
//X2和
sum_x2 += x[ii] * x[ii];
}
//nΣx2-(Σx)2
float divisor = dataCnt * sum_x2 - sum_x * sum_x;
if (Math.Abs(divisor) > 1E-06) {
// a=(nΣxy - ΣxΣy)/[nΣx2-(Σx)2]
a = (dataCnt * sum_xy - sum_x * sum_y) / divisor;
// b=(Σx2Σy - ΣxyΣx)/[nΣx2-(Σx)2]
b = (sum_x2 * sum_y - sum_xy * sum_x) / divisor;
}
}