我有一组数据点对(y,x)
。我想使用表格拟合一个函数
y = c * x * log2(x)
我想找到c的值。Matlablsqcurvefit
不适用于此。它似乎陷入了局部最优。
关于如何做的任何建议?
谢谢!
我有一组数据点对(y,x)
。我想使用表格拟合一个函数
y = c * x * log2(x)
我想找到c的值。Matlablsqcurvefit
不适用于此。它似乎陷入了局部最优。
关于如何做的任何建议?
谢谢!
正如 cdbitesky 所写,最简单的估计方法c
是计算逐点比率并取平均值:
c_est = mean(y ./ (x .* log2(x)));
另一种是使用 Matlab 的矩阵除法,它执行最小二乘拟合:
c_est = y / (x .* log2(x));
c
只有当您知道您的数据如何(如果有的话)偏离理想方程时,才能得出最佳估计方法y = c * x * log2(x)
。您的数据是否被加性噪声或乘性噪声破坏?这种噪音是从哪里来的?等等
使用一些权重w[k]
,计算总和
yxlx
超过w[k]*y[k]*x[k]*log2(x[k])
和
xlx2
结束w[k]*sqr(x[k]*log2(x[k]))
,在哪里sqr(u)=u*u
。
那么 的估计c
是yxlx/xlx2
。
可选择标准砝码w[k]=1
或适配砝码
w[k]=1/( 1+sqr( x[k]*log2(x[k]) ) )
甚至更适应
w[k]=1/( 1+sqr( x[k]*log2(x[k]) ) +sqr( y[k] ) )
以便 x,y 的较大值不会过度影响估计。对于一些中间策略,将这些表达式的平方根作为权重。
数学:这些公式源于将估计问题表述为加权最小二乘问题
sum[ w(x,y)*(y-c*f(x))^2 ] over (x,y) in Data
扩展为
sum[ w(x,y)*y^2 ]
-2*c* sum[ w(x,y)*y*f(x) ]
+ c^2 * sum[ w(x,y)*f(x)^2 ] over (x,y) in Data
最小值位于
c = sum[ w(x,y)*y*f(x) ] / sum[ w(x,y)*f(x)^2 ]
w(x,y) 应该与 (x,y) 处的误差方差近似成反比,因此如果您期望误差的大小一致,则 w(x,y)=1,如果误差与x 和 y,那么 w(x,y)=1/(1+x^2+y^2) 或类似是明智的选择。