0
点赞
收藏
分享

微信扫一扫

【C语言】实现最小二乘法直线拟合

前提:

求解直线方程

假设已知有N个点,设这条直线方程为: y = a·x + b

其中,a和b的计算公式如下:
在这里插入图片描述
源码如下:

#include<stdio.h>
#define MAX 100     //最多输入100个点进行线性拟和

int main()
{
	int num; //将要输入的点的个数

    //初始化数组来接收点的数据
    float x[MAX];
    float y[MAX];
    
    float a;//y=ax+b中所求的斜率
    float b;//y=ax+b中所求的常数
    
    printf("\n请输入点数:");
    scanf("%d",&num);
    
    printf("\n请输入x点y点的坐标:\n");
    for(int i=1;i<=num;i++)
      {
    	printf("请输入第%d个点x和y的坐标\n",i); 
        scanf("%f%f",&x[i],&y[i]);
      }

    float sum_x2 = 0.0;//x平方的和
    float sum_y = 0.0;//y的和
    float sum_x = 0.0;//x的和
    float sum_xy = 0.0;//x乘以y的和
    
    for (int i = 0; i < num; ++i) {
        sum_x2 += x[i] * x[i];
        sum_y += y[i];
        sum_x += x[i];
        sum_xy += x[i] * y[i];
    }

   //根据计算公式将变量带入进行计算
    a = (num * sum_xy - sum_x * sum_y) / (num * sum_x2 - sum_x * sum_x);
    b = (sum_x2 * sum_y - sum_x * sum_xy) / (num * sum_x2 - sum_x * sum_x);
    
    //输出
    printf("a=%f", a);
    printf("b=%f", b);
    printf("y=%f x+%f",a, b);

}
举报

相关推荐

0 条评论