这些点,有的近似在一条直线上,有的近似在另一条直线上,有的不在直线上,如何找出近似在一条直线上的点,并求出直线方程?下面是以前的回复:
“
“哈哈,这个我做过,其实就是要先知道方程形式,看样子你的方程应该是 f(x) = ax + b 的形式,然后做拟合,求出 a、b,然后用误差理论中的3σ准则去判断一个点是否偏离这条直线太远,就得出结论了。”
////////
哈哈,这个我做过,其实就是要先知道方程形式,看样子你的方程应该是 f(x) = ax + b 的形式,然后做拟合,求出 a、b,然后用误差理论中的3σ准则去判断一个点是否偏离这条直线太远,就得出结论了。
//////////////
直线方程是通过算法求出来的,例如我上面说的 a、b,可以通过最小二乘法求出来,求出来之后不就知道了吗?
/////////////
平面上的N个点(x,y),组成了N个方程,但是未知数只有两个,例如a、b,在这种情况下,你要求出a、b,其实就是解一个“超定方程组”的问题,最小二乘法可以解决。你这个只是线性的,比非线性的容易多了,你得去看看最小二乘法的原理,我们总不可能在这里把一本书贴上来吧 ”这是以前的回复,关键是我不懂,谁能给个算法?分不够可以再加
“
“哈哈,这个我做过,其实就是要先知道方程形式,看样子你的方程应该是 f(x) = ax + b 的形式,然后做拟合,求出 a、b,然后用误差理论中的3σ准则去判断一个点是否偏离这条直线太远,就得出结论了。”
////////
哈哈,这个我做过,其实就是要先知道方程形式,看样子你的方程应该是 f(x) = ax + b 的形式,然后做拟合,求出 a、b,然后用误差理论中的3σ准则去判断一个点是否偏离这条直线太远,就得出结论了。
//////////////
直线方程是通过算法求出来的,例如我上面说的 a、b,可以通过最小二乘法求出来,求出来之后不就知道了吗?
/////////////
平面上的N个点(x,y),组成了N个方程,但是未知数只有两个,例如a、b,在这种情况下,你要求出a、b,其实就是解一个“超定方程组”的问题,最小二乘法可以解决。你这个只是线性的,比非线性的容易多了,你得去看看最小二乘法的原理,我们总不可能在这里把一本书贴上来吧 ”这是以前的回复,关键是我不懂,谁能给个算法?分不够可以再加
解决方案 »
- 在TabCtrl中该怎么定位CMap
- 求助:VC程序中将网页源码抓取入sql server数据库中【报错】
- 高分请教。如何用MFC编程实现获取系统中计划任务的详细信息
- picture控制刷新(重绘)问题,请高手分析一下原因(很困惑,网上没找到好方法)
- 在线等待::非模式对话框如何实时更新????? 参与有分
- 请问UTF-8转ASCII用下面代码是否可以,谢谢
- 各位帮帮忙。女朋友要考注册,有道题目不会,请帮忙解答。
- Easy Question
- 原创:原子钟对时器1.0 与internet原子钟校对计算机时间。
- 如何用c++调用c的dll
- 关于WNDCLASS的疑问,它与_WNDCLASS有区别吗?
- 二分视图改变窗口类型后的显示问题
p=polyfit(x,y,1); %x,y是散点的坐标,p就是这条直线方程的两个系数
yl=polyval(p,x); %这是求直线在x这些位置上的值
err=std(yl-y); %求散点和直线的标准差
BOOL CalculateLineKB(CFoldPointList *m_FoldList,double &k,double &b)
{
//最小二乘法直线拟合
//m_FoldList为关键点(x,y)的链表
//拟合直线方程(Y=kX+b),k和b为返回值 if(m_FoldList==NULL)return FALSE;
long lCount=m_FoldList->GetCount();
if(lCount<2)return FALSE;
CFoldPoint *pFold;
double mX,mY,mXX,mXY,n;
mX=mY=mXX=mXY=0;
n=lCount;
POSITION pos=m_FoldList->GetHeadPosition();
while(pos != NULL)
{
pFold=m_FoldList->GetNext(pos);
mX+=pFold->X;
mY+=pFold->Y;
mXX+=pFold->X*pFold->X;
mXY+=pFold->X*pFold->Y;
}
if(mX*mX-mXX*n==0)return FALSE;
k=(mY*mX-mXY*n)/(mX*mX-mXX*n);
b=(mY-mX*k)/n;
return TRUE;
}