使用Levenberg-Marquardt算法拟合的问题
问题提出:有一组数据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、用最优化方法中惩罚函数法是否合适。如合适请给出罚函数公式。
谢谢!!