c语言多项式拟合算法演示
时间: 2023-12-14 16:34:36 浏览: 31
以下是使用C语言实现多项式拟合的示例代码,采用最小二乘法,数据精度在e-13数量级,拟合循环最大次数为50:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAXN 1000
#define MAXM 10
double x[MAXN], y[MAXN];
double a[MAXM];
int main()
{
int n, m, i, j, k;
double sumx, sumy, sumxy, sumx2, t, eps = 1e-13;
printf("Enter the number of data points: ");
scanf("%d", &n);
printf("Enter the degree of polynomial: ");
scanf("%d", &m);
printf("Enter the data points:\n");
for (i = 0; i < n; i++)
scanf("%lf %lf", &x[i], &y[i]);
for (i = 0; i <= m; i++)
{
sumx = sumy = sumxy = sumx2 = 0.0;
for (j = 0; j < n; j++)
{
t = pow(x[j], i);
sumx += t;
sumy += y[j] * t;
}
a[i] = sumy / sumx;
}
for (k = 0; k < 50; k++)
{
for (i = 0; i <= m; i++)
{
sumx = sumy = sumxy = sumx2 = 0.0;
for (j = 0; j < n; j++)
{
t = pow(x[j], i);
sumx += t;
sumy += y[j] * t;
sumxy += x[j] * t * y[j];
sumx2 += x[j] * t * x[j];
}
if (fabs(sumx2) < eps)
break;
a[i] = (sumy * sumx2 - sumx * sumxy) / (sumx * sumx - n * sumx2);
}
if (i > m)
break;
}
printf("The polynomial is:\n");
for (i = m; i >= 0; i--)
{
if (i == m)
printf("%lf", a[i]);
else
printf(" + %lf*x^%d", a[i], i);
}
printf("\n");
return 0;
}
```