前提:
求解直线方程
假设已知有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);
}