16,473
社区成员
发帖
与我相关
我的任务
分享
@biosheep 楼主 ,你的公式有误,已改正
// 指数函数拟合变为 一次多项式拟合 y = ax + b
void fitExpFunction(double* y, double* x, int n, double* A, double* B)
{
// 准备数据
double *y1, *x1;
y1 = (double*)malloc(n * sizeof(double));
x1 = (double*)malloc(n * sizeof(double));
int i;
for (i = 0; i < n; i++)
{
y1[i] = log(y[i]);
x1[i] = -1 / x[i];
}
// 准备参数开始计算
double k1, k2, k3, k4, a, b;
k1 = 0;
k2 = 0;
k3 = 0;
k4 = 0;
for (i = 0; i < n; i++)
{
k1 = k1 + x1[i];
k2 = k2 + y1[i];
k3 = k3 + x1[i] * x1[i];
k4 = k4 + x1[i] * y1[i];
}
// 利用公式拟合是一定要确定好每一个参数是否正确,位置是否正确(网上公式有误)
a = (k1*k4 - k2 * k3) / (k1*k1 - n * k3);
b = (k1*k2- n * k4) / (k1*k1 - n * k3);
// a, b 传出
*A = exp(a);
*B = b;
}
望后来人记得改正
瑞斯拜可