找到方程的估计解

时间:2014-05-15 16:12:20

标签: matlab

我有一个截断函数定义为:

function f = phi_b(x, b)
if b == 0
  f = sign(x);
else
  f = -1 * (x<-b) + 1*(x>b) + (1/b) * x .* ((x>=-b & x<=b));
end;

它用于截断在我的特定情况下对应于白噪声的观察结果:

model = arima('Constant',0,'AR',{0},'Variance',1);
y = simulate(model, 100);

我最终需要的功能是:

 r = @(b) (1/100) * sum((phi_b(y,b)).^2);

问题在于找到等式r(b)==0.1的解。通常的程序如下所示:

solve(r(b)==0.1, b)

有没有办法解决这类方程?

1 个答案:

答案 0 :(得分:1)

如果r(b)的结果是一个向量,您可以调用min函数,并查看此向量中最接近的值是0.1的位置。你可以这样做:

result = r(b);
[val,index] = min(abs(result - 0.1));

val将包含&#34;关闭&#34; 0.1具有匹配此条件的向量中的最佳元素,index将告诉您此元素在result向量中的位置。例如,如果val = 0.00001index = 7,则表示result中的最佳值距离0.00001 0.1。此外,7中的索引result是此最佳元素所在的位置。要查看实际值,请r(7)r(index)

有趣的是,您可以使用val作为衡量数据分辨率的方法。换句话说,如果val非常大,这可能意味着您需要以较小的步长在矢量中引入更多值。如果val非常小,这可能意味着您最初指定为b向量的内容足够了。我不熟悉该功能,所以我没有考虑是否有没有解决方案来处理您提供给r功能的数据。