非常感谢楼上的高手帮我指出错误,谢谢!更正程序后,出现这样的提示:
Optimization terminated: directional derivative along
search direction less than TolFun and infinity-norm of
gradient less th ...
这个不是什么错误,是说明你的问题已经达到了你设置的精度要求 原帖由 kingsword1979 于 2006-11-18 21:32 发表
d是非线性项的参数,可以正确识别出来,但是c是线性项的参数,程序没有计算出来,是不是跟上面的提示有关,如何更正呢?
在你的myfun中只有d是待求得系数,得到的结果当然只有d了
c的话你可以根据求得的d,利用A*c=y求得
[ 本帖最后由 happy 于 2006-11-20 15:59 编辑 ] 后面的例子中,你给的数据显然是有问题的
你给的Data只有1501个数据
y=Data(2100*500:2103*500);
显然超出了这个范围,显然是错误的
回复
Happy 教授说得对,后一个例子基本没有什么疑问.我倒是一直想着你原来的那个问题,试了几个函数,效果都不好.
所以认为大概只能达到目前的拟合程度.除非另选模型,你可以再试试.
另:根据你传的数据,第一句应该为:y=Data;
[ 本帖最后由 xjzuo 于 2006-11-20 16:18 编辑 ] y=Data(2100*500:2103*500)这个式子y储存的是1501个点呀!有什么问题吗?为什么是错的 事实证明,我用nlinfit命令和lsqnonlin的命令,计算出来的结果是一样的,就是前面那个拟合图形,可能是楼上的说的模型不对,但是能怎么改呢? 原帖由 kingsword1979 于 2006-11-20 16:45 发表
y=Data(2100*500:2103*500)这个式子y储存的是1501个点呀!有什么问题吗?为什么是错的
这句话表示从2100*500这个点开始之后的1501个点,换句话说,用这个语句,你的Data最少要有2103*500个数据
回复
这样明显的错误你应该自己注意了:y储存的是1501个点没有错,但你想想,数据的"指标"有那么多吗?2100*500=多少?2103*500=多少?
另:你的模型也不太好改,但可以试试减少一两个sin,参数也大大减少.要知道,模型的本质是:用最少的参数去描述现象.
[ 本帖最后由 xjzuo 于 2006-11-20 16:58 编辑 ] xjzuo,你好,我这个数据是很大的数据,有几百兆。这个数据是用加速度传感器采集了一段时间内的加速度,我想用这些数据来拟合一下采集的数据。我导师是用的5阶模态进行的拟合,但是我就是做不到那么好,不知道为什么?也就是我这么多参数应该是可行的,就是不知道怎么弄?
回复
我猜你采用的是三角级数法吧,目前来讲只能做到该拟合程度了.我看过也有用SVM非线性回归模型来做的.
如果你觉得现在的拟合还达不到你的要求,你可以换一种方法试试. 有哪位高手知道=lsqcurvefit(........)什么意思 谢谢 原帖由 bianren 于 2007-4-14 00:44 发表
有哪位高手知道=lsqcurvefit(........)什么意思 谢谢
表示可以采用下面几种调用格式
=lsqcurvefit(fun,x0,xdata,ydata)
=lsqcurvefit(fun,x0,xdata,ydata,lb,ub)
=lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)
回复 12楼 kingsword1979 的帖子
上面的例子既然已经可以正确求出参数c和d了麻烦把程序也分析一下 !
我试了一下 还是不行啊