多项式最小二乘插值法 c++
时间: 2023-10-18 20:23:40 浏览: 20
以下是多项式最小二乘插值法的C代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAXN 1000
int n, m;
double x[MAXN], y[MAXN], a[MAXN];
void input() {
printf("请输入数据点数 n:");
scanf("%d", &n);
printf("请输入插值多项式次数 m:");
scanf("%d", &m);
printf("请输入数据点的 x 坐标和 y 坐标:\n");
for (int i = 0; i < n; i++) {
scanf("%lf %lf", &x[i], &y[i]);
}
}
void solve() {
double t, s;
double X[MAXN], Y[MAXN], B[MAXN][MAXN] = {0};
for (int i = 0; i < n; i++) {
t = 1;
X[i] = 1;
Y[i] = y[i];
for (int j = 0; j < m; j++) {
a[j] = a[j] + t;
t = t * x[i];
}
for (int j = 0; j < m + 1; j++) {
s = a[j];
for (int k = j; k < m + 1; k++) {
B[j][k] = B[j][k] + s;
}
s = a[j] * y[i];
Y[j] = Y[j] + s;
for (int k = j + 1; k < m + 1; k++) {
s = a[j] * x[i] * a[k];
B[k][j] = B[j][k] = B[j][k] + s;
}
}
}
for (int k = 0; k < m + 1; k++) {
for (int j = k + 1; j < m + 1; j++) {
s = B[k][j] / B[k][k];
for (int i = k + 1; i < m + 1; i++) {
B[i][j] = B[i][j] - s * B[i][k];
}
Y[j] = Y[j] - s * Y[k];
}
}
for (int k = m; k >= 0; k--) {
s = Y[k];
for (int j = k + 1; j < m + 1; j++) {
s = s - B[k][j] * a[j];
}
a[k] = s / B[k][k];
}
}
void output() {
printf("插值多项式为:\n");
for (int i = m; i >= 0; i--) {
if (i == m) {
printf("%.2lf", a[i]);
} else if (i == 0) {
if (a[i] >= 0) {
printf(" + %.2lf", a[i]);
} else {
printf(" - %.2lf", -a[i]);
}
} else {
if (a[i] >= 0) {
printf(" + %.2lf * x^%d", a[i], i);
} else {
printf(" - %.2lf * x^%d", -a[i], i);
}
}
}
printf("\n");
}
int main() {
input();
solve();
output();
return 0;
}
```
该程序首先读入数据点数 n 和插值多项式次数 m,然后读入数据点的 x 坐标和 y 坐标。
接着,程序使用多项式最小二乘插值法求出插值多项式的系数 a。
最后,程序输出插值多项式。
需要注意的是,该程序假设插值多项式的次数不超过 MAXN,即最多为 1000。如果插值多项式的次数超过 MAXN,则需要修改程序中的 MAXN 常量的值。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![-](https://csdnimg.cn/download_wenku/file_type_lunwen.png)
![-](https://csdnimg.cn/download_wenku/file_type_lunwen.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)