c语言 二阶多项式拟合函数
时间: 2024-01-20 10:04:45 浏览: 107
二阶多项式拟合函数可以通过最小二乘法来求解,其一般形式为:
y = a0 + a1 * x + a2 * x^2
其中,a0、a1、a2为待求系数。
具体步骤如下:
1. 根据样本数据,构建矩阵方程:
[n Σx Σ(x^2)] [a0] [Σy]
[Σx Σ(x^2) Σ(x^3)] * [a1] = [Σxy]
[Σ(x^2) Σ(x^3) Σ(x^4)] [a2] [Σ(x^2)y]
其中,n为样本数量,Σ表示求和符号,x、y为样本数据。
2. 对矩阵方程进行求解,得到系数a0、a1、a2的值。
3. 根据求得的系数,得到拟合函数y = a0 + a1 * x + a2 * x^2。
下面是一个简单的C语言实现:
```c
#include <stdio.h>
void polyfit(double x[], double y[], int n, double* a0, double* a1, double* a2) {
double sumx = 0, sumx2 = 0, sumx3 = 0, sumx4 = 0;
double sumy = 0, sumxy = 0, sumx2y = 0;
for (int i = 0; i < n; i++) {
sumx += x[i];
sumx2 += x[i] * x[i];
sumx3 += x[i] * x[i] * x[i];
sumx4 += x[i] * x[i] * x[i] * x[i];
sumy += y[i];
sumxy += x[i] * y[i];
sumx2y += x[i] * x[i] * y[i];
}
double b[3][4] = {
{n, sumx, sumx2, sumy},
{sumx, sumx2, sumx3, sumxy},
{sumx2, sumx3, sumx4, sumx2y}
};
for (int i = 0; i < 2; i++) {
for (int j = i + 1; j < 3; j++) {
double temp = b[i][i] / b[j][i];
for (int k = i; k < 4; k++) {
b[j][k] = b[i][k] - b[j][k] * temp;
}
}
}
*a2 = b[2][3] / b[2][2];
*a1 = (b[1][3] - *a2 * b[1][2]) / b[1][1];
*a0 = (b[0][3] - *a1 * b[0][1] - *a2 * b[0][2]) / b[0][0];
}
int main() {
double x[] = {1, 2, 3, 4, 5};
double y[] = {1.2, 3.5, 7, 13.2, 21.5};
double a0, a1, a2;
polyfit(x, y, 5, &a0, &a1, &a2);
printf("y = %f + %fx + %fx^2\n", a0, a1, a2);
return 0;
}
```
上述代码实现了对样本数据进行二阶多项式拟合,并输出拟合函数。
阅读全文