用C语言生成一段对一个数组里面的数据等距采样和拟合的代码
时间: 2023-05-14 17:06:09 浏览: 115
C++ 数据拟合
以下是一段用C语言实现对一个数组进行等距采样和拟合的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 10 // 数组长度
#define M 5 // 采样点个数
int main()
{
double x[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 原始数据
double y[N] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20};
double x_sample[M]; // 采样点
double y_sample[M]; // 采样点对应的值
double a, b; // 拟合直线的参数
int i, j;
// 等距采样
for (i = 0; i < M; i++) {
x_sample[i] = x[i * (N - 1) / (M - 1)];
y_sample[i] = y[i * (N - 1) / (M - 1)];
}
// 拟合直线
double sum_x = 0, sum_y = 0, sum_xy = 0, sum_x2 = 0;
for (i = 0; i < M; i++) {
sum_x += x_sample[i];
sum_y += y_sample[i];
sum_xy += x_sample[i] * y_sample[i];
sum_x2 += x_sample[i] * x_sample[i];
}
a = (M * sum_xy - sum_x * sum_y) / (M * sum_x2 - sum_x * sum_x);
b = (sum_y - a * sum_x) / M;
// 输出结果
printf("采样点:\n");
for (i = 0; i < M; i++) {
printf("(%lf, %lf)\n", x_sample[i], y_sample[i]);
}
printf("拟合直线:y = %lfx + %lf\n", a, b);
return 0;
}
```
这段代码首先定义了一个长度为N的数组x和y,表示原始数据。然后定义了两个长度为M的数组x_sample和y_sample,表示采样点和采样点对应的值。接着进行等距采样,将原始数据等间隔地采样成M个点。最后,使用最小二乘法拟合直线,得到拟合直线的参数a和b。最后输出采样点和拟合直线的结果。
阅读全文