智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 3358|回复: 11
打印 上一主题 下一主题

有谁用了线性拟合的,进来交流一下呢

[复制链接]

24

主题

69

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1868
威望
994
贡献
478
兑换币
399
注册时间
2011-8-5
在线时间
198 小时
跳转到指定楼层
1#
发表于 2013-6-18 21:59:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
y=a+bx,x我是用行来代入,输出的y就是改行所对应的列,但问题在于,利用计算后得出的a和b代入后,算出的y不是很大就是很小,擦,求大神

24

主题

69

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1868
威望
994
贡献
478
兑换币
399
注册时间
2011-8-5
在线时间
198 小时
2#
 楼主| 发表于 2013-6-18 22:01:21 | 只看该作者
附上代码:其中p是我指向计算出来的中线的数组,count是有效行,最近向远处计算
void ni_he(int *p,int count)
{
  //x--行    y--列
  int x_pj=0;
  int y_pj=0;
  int x_y_pj=0;
  int x_pf_pj=0;
  int i;
  int a,b;
  for(i=count;i>0;i--)  
  {
    y_pj+=p[h-i];
     x_pj+=i;
     x_pf_pj+=i*i;
     x_y_pj+=i*p[h-i];
  }
  y_pj/=count;
  x_pj/=count;
  x_pf_pj/=count;
  x_y_pj/=count;
  
  b=10*(x_y_pj-y_pj*x_pj)/(x_pf_pj-x_pj*x_pj);
  a=y_pj-b*x_pj;
  
  for(i=h-1;i>=0;i--)     
  {
    if(a+b*i>l-1 || a+b*i<0)
      break;
    mid_path[i]=a+b*i;
  }
}
回复 支持 反对

使用道具 举报

24

主题

69

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1868
威望
994
贡献
478
兑换币
399
注册时间
2011-8-5
在线时间
198 小时
3#
 楼主| 发表于 2013-6-18 22:06:12 | 只看该作者
x_pj是行的平均   y_pj是列的平均  x_y_pj是行*列的和的平均  x_pf_pj是行的平方和的平均
回复 支持 反对

使用道具 举报

21

主题

277

帖子

0

精华

版主

Rank: 9Rank: 9Rank: 9

积分
5728
威望
2165
贡献
1155
兑换币
609
注册时间
2009-3-1
在线时间
1204 小时
4#
发表于 2013-6-18 22:23:47 | 只看该作者
b=10*(x_y_pj-y_pj*x_pj)/(x_pf_pj-x_pj*x_pj);
  a=y_pj-b*x_pj;
乘以10?
回复 支持 反对

使用道具 举报

31

主题

509

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3671
威望
1728
贡献
923
兑换币
1150
注册时间
2013-1-14
在线时间
510 小时
5#
发表于 2013-6-18 22:32:44 | 只看该作者
用高斯曲线求解就行了
回复 支持 反对

使用道具 举报

24

主题

195

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2037
威望
895
贡献
456
兑换币
576
注册时间
2013-1-18
在线时间
343 小时
6#
发表于 2013-6-18 22:53:23 | 只看该作者
本帖最后由 登高使者 于 2013-6-18 22:54 编辑

请问楼主是用在哪里的呢?是优化小s的吧?我试过最小二乘法。 我的情况跟你一样!
回复 支持 反对

使用道具 举报

24

主题

69

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1868
威望
994
贡献
478
兑换币
399
注册时间
2011-8-5
在线时间
198 小时
7#
 楼主| 发表于 2013-6-18 23:35:59 | 只看该作者
vic_hong 发表于 2013-6-18 22:23
b=10*(x_y_pj-y_pj*x_pj)/(x_pf_pj-x_pj*x_pj);
  a=y_pj-b*x_pj;
乘以10?

额,是因为输出的值不在数组范围才加的。。。
回复 支持 反对

使用道具 举报

24

主题

69

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1868
威望
994
贡献
478
兑换币
399
注册时间
2011-8-5
在线时间
198 小时
8#
 楼主| 发表于 2013-6-18 23:36:42 | 只看该作者
CQQ 发表于 2013-6-18 22:32
用高斯曲线求解就行了

是不是这个方程y=1/(0.4sqrt(2pi))e^(-0.5((x-1)/0.4)^2)
回复 支持 反对

使用道具 举报

21

主题

277

帖子

0

精华

版主

Rank: 9Rank: 9Rank: 9

积分
5728
威望
2165
贡献
1155
兑换币
609
注册时间
2009-3-1
在线时间
1204 小时
9#
发表于 2013-6-19 13:15:27 | 只看该作者
p141592653 发表于 2013-6-18 23:35
额,是因为输出的值不在数组范围才加的。。。

我觉得b放大了10倍,后面的a求解就不对了。不要用这个平均的公式,因为每个和先平均会有精度问题。用(n*Exy-Ex*Ey)/(n*E(x^2)-(Ex)^2)。还有用int存斜率是不是有精度问题。 还有你要注意的是垂直线的问题,一般来说你要求斜率的倒数,这时候你要把x,y对调。
回复 支持 反对

使用道具 举报

24

主题

69

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1868
威望
994
贡献
478
兑换币
399
注册时间
2011-8-5
在线时间
198 小时
10#
 楼主| 发表于 2013-6-19 13:44:04 | 只看该作者
vic_hong 发表于 2013-6-19 13:15
我觉得b放大了10倍,后面的a求解就不对了。不要用这个平均的公式,因为每个和先平均会有精度问题。用(n*E ...

你的是说讲Exy乘上n,E(x^2)乘上n,其他都不用乘n是不是这样子。然后你说x,y对调,是不是将x作为列输出,然后y是行输出
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2025-5-17 13:19 , Processed in 0.083837 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表