声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

楼主: kingsword1979

[编程技巧] [求助]:利用非线性最小二乘法来优化参数的问题?

[复制链接]
 楼主| 发表于 2006-11-20 08:54 | 显示全部楼层
现在上传的是Data.txt文件

Data.txt

12.63 KB, 下载次数: 19

1

回复 支持 反对
分享到:

使用道具 举报

 楼主| 发表于 2006-11-20 15:21 | 显示全部楼层
有没有高手可以帮帮我呀!
发表于 2006-11-20 15:56 | 显示全部楼层
原帖由 kingsword1979 于 2006-11-18 21:29 发表
非常感谢楼上的高手帮我指出错误,谢谢!更正程序后,出现这样的提示:
Optimization terminated: directional derivative along
search direction less than TolFun and infinity-norm of
gradient less th ...



这个不是什么错误,是说明你的问题已经达到了你设置的精度要求
发表于 2006-11-20 15:57 | 显示全部楼层
原帖由 kingsword1979 于 2006-11-18 21:32 发表
d是非线性项的参数,可以正确识别出来,但是c是线性项的参数,程序没有计算出来,是不是跟上面的提示有关,如何更正呢?



在你的myfun中只有d是待求得系数,得到的结果当然只有d了
c的话你可以根据求得的d,利用A*c=y求得

[ 本帖最后由 happy 于 2006-11-20 15:59 编辑 ]
发表于 2006-11-20 16:10 | 显示全部楼层
后面的例子中,你给的数据显然是有问题的

你给的Data只有1501个数据

y=Data(2100*500:2103*500);
显然超出了这个范围,显然是错误的
发表于 2006-11-20 16:15 | 显示全部楼层

回复

Happy 教授说得对,后一个例子基本没有什么疑问.
我倒是一直想着你原来的那个问题,试了几个函数,效果都不好.
所以认为大概只能达到目前的拟合程度.除非另选模型,你可以再试试.
另:根据你传的数据,第一句应该为:y=Data;

[ 本帖最后由 xjzuo 于 2006-11-20 16:18 编辑 ]
 楼主| 发表于 2006-11-20 16:45 | 显示全部楼层
y=Data(2100*500:2103*500)这个式子y储存的是1501个点呀!有什么问题吗?为什么是错的
 楼主| 发表于 2006-11-20 16:50 | 显示全部楼层
事实证明,我用nlinfit命令和lsqnonlin的命令,计算出来的结果是一样的,就是前面那个拟合图形,可能是楼上的说的模型不对,但是能怎么改呢?
发表于 2006-11-20 16:52 | 显示全部楼层
原帖由 kingsword1979 于 2006-11-20 16:45 发表
y=Data(2100*500:2103*500)这个式子y储存的是1501个点呀!有什么问题吗?为什么是错的



这句话表示从2100*500这个点开始之后的1501个点,换句话说,用这个语句,你的Data最少要有2103*500个数据
发表于 2006-11-20 16:53 | 显示全部楼层

回复

这样明显的错误你应该自己注意了:
y储存的是1501个点没有错,但你想想,数据的"指标"有那么多吗?2100*500=多少?  2103*500=多少?
另:你的模型也不太好改,但可以试试减少一两个sin,参数也大大减少.要知道,模型的本质是:用最少的参数去描述现象.

[ 本帖最后由 xjzuo 于 2006-11-20 16:58 编辑 ]
 楼主| 发表于 2006-11-20 17:05 | 显示全部楼层
xjzuo,你好,我这个数据是很大的数据,有几百兆。这个数据是用加速度传感器采集了一段时间内的加速度,我想用这些数据来拟合一下采集的数据。我导师是用的5阶模态进行的拟合,但是我就是做不到那么好,不知道为什么?也就是我这么多参数应该是可行的,就是不知道怎么弄?
发表于 2006-11-20 19:07 | 显示全部楼层

回复

我猜你采用的是三角级数法吧,目前来讲只能做到该拟合程度了.
我看过也有用SVM非线性回归模型来做的.
如果你觉得现在的拟合还达不到你的要求,你可以换一种方法试试.
发表于 2007-4-14 00:44 | 显示全部楼层
有哪位高手知道[beta,Res,Re]=lsqcurvefit(........)什么意思 谢谢
发表于 2007-4-14 21:13 | 显示全部楼层
原帖由 bianren 于 2007-4-14 00:44 发表
有哪位高手知道=lsqcurvefit(........)什么意思 谢谢


表示可以采用下面几种调用格式
[beta,Res,Re]=lsqcurvefit(fun,x0,xdata,ydata)
[beta,Res,Re]=lsqcurvefit(fun,x0,xdata,ydata,lb,ub)
[beta,Res,Re]=lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)
发表于 2009-5-13 10:01 | 显示全部楼层

回复 12楼 kingsword1979 的帖子

上面的例子既然已经可以正确求出参数c和d了
麻烦把程序也分析一下 !
我试了一下 还是不行啊
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-29 12:33 , Processed in 0.101603 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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