关于直线拟合系数偏差的问题
X 0 0.1 0.2 0.5 1 1.5Y 0.002 0.082 0.162 0.407 0.805 1.185
两组数据用“二乘法程序运算”和“笔算”得出来的 K=0.785619 ,而用EXCEL算出的K=0.7913 ,想问是算的精度问题还是?
你算错了吧?
excel算出来的很准啊 zouzhichao 发表于 2016-6-28 22:13
你算错了吧?
excel算出来的很准啊
大神要么你帮我拟合一下 ,我算出是Y=0.785619X+0.011409; R=0.9998
还是我EXCEL拟合设置错了
0 0.1 0.2 0.5 1 1.5
0.002 0.082 0.162 0.407 0.805 1.185
xinwu 发表于 2016-6-29 21:31
大神要么你帮我拟合一下 ,我算出是Y=0.785619X+0.011409; R=0.9998
还是我EXCEL拟合设置错了
0 0.1 0.2 ...
手上电脑没装matlab,自己写的,算出来和excel是一样的,应该是你算错了
楼主算错了,我算了一遍跟Excel一样。 zouzhichao 发表于 2016-6-29 22:02
手上电脑没装matlab,自己写的,算出来和excel是一样的,应该是你算错了
这个是网上下的函数,我检测了很多遍好像都是对的,大神帮我看一下
#define nCount 6//点数6
xdata double X={0,0.1,0.2,0.5,1.0,1.5};
xdata double Y={0.02,0.082,0.162,0.407,0.805,1.185};
xdata double xyTopX,xyTopY,RTop;
voidMin2Method()
/////////////////////////////////////////////////////////////////////////////////////
////////功能描述:利用最小二乘法求斜率 //////////
//////// xyTopX -- 截距 //////////
//////// xyTopY -- 斜率
/////// RTop -- 拟合优度
{
unsigned int i;
double SumX, SumY, SumXY, SumX2;
SumX = 0;
SumX2 = 0;
for( i=0; i<nCount; i++)
{
SumX += X;
SumX2 += (X*X);
}
SumY = 0;
for( i=0; i<nCount; i++)
{
SumY += Y;
}
SumXY = 0;
for( i=0; i<nCount; i++)
{
SumXY += ( X* Y);
}
xyTopX = ( (SumX2*SumY - SumX*SumXY) / (nCount*SumX2 - SumX * SumX));
xyTopY = ( (nCount*SumXY - SumX*SumY) / (nCount*SumX2 - SumX * SumX));
} 程序的浮点误差 bg6agf 发表于 2016-6-30 09:48
程序的浮点误差
请问应该怎么写 浮点运算误差哪有这么大? zouzhichao 发表于 2016-6-30 11:22
浮点运算误差哪有这么大?
是我的程序哪里写了吗? 本帖最后由 xinwu 于 2016-6-30 17:06 编辑
bg6agf 发表于 2016-6-30 09:48
程序的浮点误差
我程序修改了一下 结果还是一样应该是浮点误差的问题
0 0.1 0.2 0.5 1 1.5
0.02 0.82 1.62 4.07 8.05 11.85
Y的数值*10后 EXCEL 拟合出来 K=7.9133 程序拟合出来7.913256
那应该怎样减小浮点误差(本人用的是STC单片机 KEIL编译器) 问题解决了,是我算法问题
页:
[1]