经验公式为Q=a*P^b,(Q和P均为实测值,测量3次以上)
如何根据实测值用何种算法回归得到较好的a,b值?
最好给出代码例子,什么语言都可以的
对n个数据点(xi, yi), i = 0, 1, ..., n - 1用直线y = ax + b做回归分析~
#include <math.h>
// 输入量:
// x - 存放自变量x的n个值的数组首地址.
// y - 存放与自变量x的n个值对应的随机变量观测值的数组首地址.
// n - 观测点数.
// 输出量:
// a - 长度为2的数组,其中a[0]存放回归系数b, a[1]存放回归系数a.
// dt - 长度为6的数组,dt[0]为偏差平方和,dt[1]为平均标准偏差,dt[2]为回归平方和,
// dt[3]为最大偏差,dt[4]为最小偏差,dt[5]为偏差平均值.
void GetCoefficient(double *x, double *y, int n, double *a, double *dt)
{
int i;
double xx, yy, e, f, q, u, p, umax, umin, s;
xx = 0.0; yy = 0.0;
for(i = 0; i <= n - 1; i ++)
{
xx = xx + x[i] / n;
yy = yy + y[i] / n;
}
e = 0.0; f = 0.0;
for(i = 0; i <= n - 1; i ++)
{
q = x[i] - xx; e = e + q * q;
f = f + q * (y[i] - yy);
}
a[1] = f / e; a[0] = yy - a[1] * xx;
q = u = p = 0.0;
umax = 0.0; umin = 1.0e+30;
for(i = 0; i <= n - 1; i ++)
{
s = a[1] * x[i] + a[0];
q = q + (y[i] - s) * (y[i] - s);
p = p + (s - yy) * (s - yy);
e = fabs(y[i] - s);
if(e > umax) umax = e;
if(e < umin) umin = e;
u = u + e / n;
}
dt[1] = sqrt(q / n);
dt[0] = q; dt[2] = p;
dt[3] = umax; dt[4] = umin; dt[5] = u;
}
- 1
- 2
前往页