用C语言写一个最小二乘法的算法,要求输入两点坐标,能拟合出直线
时间: 2024-03-17 11:41:10 浏览: 18
好的,以下是一个用C语言实现最小二乘法的算法,可以拟合出一条直线:
```c
#include <stdio.h>
void least_squares_fit(double x[], double y[], int n, double *a, double *b)
{
double sum_x = 0.0, sum_y = 0.0, sum_xy = 0.0, sum_x2 = 0.0;
int i;
for (i = 0; i < n; i++) {
sum_x += x[i];
sum_y += y[i];
sum_xy += x[i] * y[i];
sum_x2 += x[i] * x[i];
}
*a = (n * sum_xy - sum_x * sum_y) / (n * sum_x2 - sum_x * sum_x);
*b = (sum_y - *a * sum_x) / n;
}
int main()
{
double x[2], y[2], a, b;
printf("请输入两个点的坐标(x1, y1, x2, y2): ");
scanf("%lf%lf%lf%lf", &x[0], &y[0], &x[1], &y[1]);
least_squares_fit(x, y, 2, &a, &b);
printf("拟合得到的直线方程为: y = %gx + %g\n", a, b);
return 0;
}
```
该算法的输入为两个点的坐标(x1, y1, x2, y2),输出为拟合得到的直线方程y = ax + b。其中,least_squares_fit函数实现了最小二乘法的计算过程,而main函数则是一个简单的例子,演示了如何使用该函数。