最小二乘法拟合曲线c语言
时间: 2023-10-01 07:10:20 浏览: 88
以下是一个简单的使用最小二乘法拟合曲线的C语言代码示例:
```c
#include <stdio.h>
#include <math.h>
#define N 10 // 数据点数量
// 定义数据点
double x[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
double y[N] = {3, 5, 7, 9, 11, 13, 15, 17, 19, 21};
// 定义拟合函数
double f(double a, double b, double x) {
return a * x + b;
}
int main() {
double sum_x = 0, sum_y = 0, sum_xy = 0, sum_xx = 0;
int i;
// 计算x、y、xy、x^2的和
for (i = 0; i < N; i++) {
sum_x += x[i];
sum_y += y[i];
sum_xy += x[i] * y[i];
sum_xx += x[i] * x[i];
}
// 计算斜率a和截距b
double a = (N * sum_xy - sum_x * sum_y) / (N * sum_xx - sum_x * sum_x);
double b = (sum_y - a * sum_x) / N;
// 输出结果
printf("拟合直线为:y = %.2fx + %.2f\n", a, b);
// 计算拟合误差
double error = 0;
for (i = 0; i < N; i++) {
double y_fit = f(a, b, x[i]);
error += (y[i] - y_fit) * (y[i] - y_fit);
}
error = sqrt(error / N);
// 输出拟合误差
printf("拟合误差为:%.2f\n", error);
return 0;
}
```
这个示例代码假设我们要拟合一条直线来描述一组数据点,数据点的x和y坐标分别存储在数组x和y中。我们使用最小二乘法来计算直线的斜率a和截距b,然后输出拟合直线和拟合误差。注意,这个示例只适用于拟合一条直线,如果需要拟合其他类型的曲线,则需要相应地修改拟合函数。
阅读全文