使用Levenberg-Marquardt算法拟合的问题

cceeooluyan 2010-03-18 03:01:38
问题提出:有一组数据p(xi,yi) i=m,根据给出的数据p拟合公式f(x)=(a-d)/(1+(x/c)^b)+d。(a,b,c,d)为所求参数,如:有下列数据(表1),使用Levenberg-Marquardt算法拟合求得:
f(x)=(54104.978223-758.731886)/(1+(x/60.634637)^-1.277514)+758.731886
a = 54104.978223 b = -1.277514 c = 60.634637 d = 758.731886

Y X
657.5 0.1
1000.0 0.75
1790.0 2.5
4129.5 7.5
13782.0 25
35675.5 100
表1
然后把Y值代入f(x)反求x如表2,请看红字部分表示的是在x=0.1 y=657.5时的反求和反求误差,反求为0和反求误差为0.1说明这个点位通过拟合得到的公式f(x)反求不出x。误差把原值淹没,反而在x=100,y=35675.5点位误差最小,只有0.01远远高于要求精度。

Y X 反求 反求误差
657.5 0.1 0(注意) 0.1(注意)
1000.0 0.75 0.889 0.139
1790.0 2.5 2.805 0.305
4129.5 7.5 7.346 -0.154
13782.0 25 25.033 0.033
35675.5 100 99.990 0.01
表2

请问
1、如何提高拟合在低值时的精度(如在 x=0.1点),如果有必要可以降低在高值时的精度(如在x=100点)。使每个点的反求误差在+%20和-%20之间。
2、用最优化方法中惩罚函数法是否合适。如合适请给出罚函数公式。


谢谢!!
...全文
434 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
donkey301 2010-03-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cceeooluyan 的回复:]
把x=100处点取稀点.
[/Quote]
譬如 x=0.1附近取 x=0.08, x=0.09, x=0.1, x=0.11
但x=100附近取 x = 80, x = 90, x =100, x=110
[Quote=引用 3 楼 cceeooluyan 的回复:]
最好一次不要同时拟合太多参数,要不然零点就比较多
[/Quote]
参数多导致零点多:举个例子
f(x) = x
那么只有x = 0 这个零点
但 f(x, y) = x+y
可以有 (0,0), (-1, 1), (50.333, -50.333)...无数个零点
拟合时只能得到其中的某个零点而已。
cceeooluyan 2010-03-25
  • 打赏
  • 举报
回复
谢谢你的回复,不太明白(把x=100处点取稀点.而且最好一次不要同时拟合太多参数,要不然零点就比较多),在优化方法中有一种加罚函数的方法。但不知加什么函数。。。
donkey301 2010-03-24
  • 打赏
  • 举报
回复
1.Lev-Mar用的还是最小二乘法拟合,考虑的是整体所有点的误差,那么对其中某些点相对所在点的误差就有可能比较大了。
2.想要x=0.1的精度提高,那么在这个点附近你点取多点,密点,人工加点也可以,或者把x=100处点取稀点.而且最好一次不要同时拟合太多参数,要不然零点就比较多,导致求出来的值与你的初始值相关很大。
cceeooluyan 2010-03-24
  • 打赏
  • 举报
回复
连路过的都没有吗。。。

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧