帮我用C++实现最小二乘法直线拟合,并给出实际代码
时间: 2023-03-27 22:01:03 浏览: 103
好的,我可以回答这个问题。最小二乘法直线拟合是一种常见的数据拟合方法,可以用于求解一组数据的最佳拟合直线。以下是实现最小二乘法直线拟合的 C 代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 10 // 数据点个数
int main()
{
double x[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 数据点的 x 坐标
double y[N] = {2.1, 4.2, 6.3, 8.4, 10.5, 12.6, 14.7, 16.8, 18.9, 21}; // 数据点的 y 坐标
double sum_x = , sum_y = , sum_xy = , sum_x2 = ;
int i;
// 计算各项和
for (i = ; i < N; i++) {
sum_x += x[i];
sum_y += y[i];
sum_xy += x[i] * y[i];
sum_x2 += x[i] * x[i];
}
// 计算斜率和截距
double k = (N * sum_xy - sum_x * sum_y) / (N * sum_x2 - sum_x * sum_x);
double b = (sum_y - k * sum_x) / N;
// 输出结果
printf("拟合直线方程为:y = %.2fx + %.2f\n", k, b);
return ;
}
这段代码实现了最小二乘法直线拟合,其中 x 和 y 数组分别存储了数据点的 x 坐标和 y 坐标,N 定义了数据点的个数。代码中先计算了各项和,然后根据最小二乘法公式计算出斜率和截距,最后输出拟合直线方程。
阅读全文