c语言 多项式拟合函数
时间: 2024-01-20 21:03:19 浏览: 219
多项式拟合
多项式拟合是一种常见的数据拟合方法,可以通过给定的数据点,拟合出一个多项式函数,使得该函数与数据点的误差最小。C语言中可以使用最小二乘法来实现多项式拟合。
以下是一个简单的多项式拟合函数的示例代码,可以拟合出一个n次多项式:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void polynomial_fit(double *x, double *y, int n, int degree, double *coeff)
{
int i, j, k;
double X[n][degree + 1];
double X_T[degree + 1][n];
double Y[n];
// 构造矩阵X和向量Y
for(i = 0; i < n; i++)
{
Y[i] = y[i];
for(j = 0; j <= degree; j++)
{
X[i][j] = pow(x[i], j);
}
}
// 求矩阵X的转置矩阵
for(i = 0; i <= degree; i++)
{
for(j = 0; j < n; j++)
{
X_T[i][j] = X[j][i];
}
}
// 求矩阵X的转置矩阵和矩阵X的乘积
double X_T_X[degree + 1][degree + 1];
for(i = 0; i <= degree; i++)
{
for(j = 0; j <= degree; j++)
{
X_T_X[i][j] = 0;
for(k = 0; k < n; k++)
{
X_T_X[i][j] += X_T[i][k] * X[k][j];
}
}
}
// 求矩阵X的转置矩阵和向量Y的乘积
double X_T_Y[degree + 1];
for(i = 0; i <= degree; i++)
{
X_T_Y[i] = 0;
for(j = 0; j < n; j++)
{
X_T_Y[i] += X_T[i][j] * Y[j];
}
}
// 解线性方程组
for(i = degree; i >= 0; i--)
{
coeff[i] = X_T_Y[i];
for(j = degree; j > i; j--)
{
coeff[i] -= X_T_X[i][j] * coeff[j];
}
coeff[i] /= X_T_X[i][i];
}
}
int main()
{
double x[5] = {0, 1, 2, 3, 4};
double y[5] = {1, 2, 3, 4, 5};
int degree = 2;
double coeff[degree + 1];
polynomial_fit(x, y, 5, degree, coeff);
int i;
for(i = 0; i <= degree; i++)
{
printf("coeff[%d] = %f\n", i, coeff[i]);
}
return 0;
}
```
这个例子中,给定了5个数据点,x和y分别为数据点的横纵坐标,degree为多项式的次数,coeff为多项式的系数。通过调用polynomial_fit函数,可以得到一个二次多项式的系数,即y = a*x^2 + b*x + c。
阅读全文