0

我有一组数据点对(y,x)。我想使用表格拟合一个函数

y = c * x * log2(x)

我想找到c的值。Matlablsqcurvefit不适用于此。它似乎陷入了局部最优。

关于如何做的任何建议?

谢谢!

4

2 回答 2

3

正如 cdbitesky 所写,最简单的估计方法c是计算逐点比率并取平均值:

c_est = mean(y ./ (x .* log2(x)));

另一种是使用 Matlab 的矩阵除法,它执行最小二乘拟合:

c_est = y / (x .* log2(x));

c只有当您知道您的数据如何(如果有的话)偏离理想方程时,才能得出最佳估计方法y = c * x * log2(x)。您的数据是否被加性噪声或乘性噪声破坏?这种噪音是从哪里来的?等等

于 2013-12-11T18:04:06.430 回答
1

使用一些权重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

那么 的估计cyxlx/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) 或类似是明智的选择。

于 2013-12-13T13:17:39.703 回答