用最小二乘法拟合直线的问题 回答清楚追加分!

来源:百度知道 编辑:UC知道 时间:2024/05/13 08:53:13
我用最小二乘法拟合直线 y=ax+b ,但是在计算a的时候,我用偏差为最小,然后求偏导,得出来的公式进行计算。可是运算结果没法得到垂直于x轴的直线。(当所有的点都在y轴的时候可以得到a的分母为0,可以判断)但是如果点分布在y轴两侧就不行了。会得到a = 0的结果。但是这个结果肯定定不对。 怎么办啊?谢谢大家了!
请看清我的问题好吗?我是说用最小二乘法拟合直线时垂直于x轴的直线怎么处理?请不要随便帖无关的代码。请提供判断方法。谢谢!

原理中有一类题目,对测量数据进行处理,然后使用最小二乘法对数据进行处理并且拟合一条曲线,以方便对数据结果进行进一步的处理。这个程序拟合的是直线,用于处理近似线性的数据。下面是源程序,至少可以运行,会不会有问题就不知道了噻。程序是用C语言写的,但是注释的风格是C++的,在某些编译器下,如TC可能会有问题,把 // 换成 /* */就可以了。

#include <stdio.h>
#include <conio.h>
#define N 20 //定义最多能够处理的数据组数
//变量X,Y 线性方程系数k 线性方程矩阵m0 m1 m2
double x[N],y[N],k[2][3],m1,m2,m0;
int i=0,j=0;
//求(A1*B1~Ac*Bc)的和
double fsum(double a[],double b[],int c)
{
double sum=0;
for(i=0;i < c;i++)
sum+=a[i]*b[i];
return sum;
}
//求矩阵
double fmatrix(int m,int n)
{
double matrix;
matrix=k[0][m]*k[1][n]-k[0][n]*k[1][m];
return matrix;
}

void main()
{
int limit=0; //数据组数
double mi[N]; //大小为1的数列,矩阵求和时匹配使用
char ch;
//声明
printf("This program will calculate Y=aX+b, with maximum