我有一个截断函数定义为:
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)
有没有办法解决这类方程?
答案 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.00001
和index = 7
,则表示result
中的最佳值距离0.00001
0.1
。此外,7
中的索引result
是此最佳元素所在的位置。要查看实际值,请r(7)
或r(index)
。
有趣的是,您可以使用val
作为衡量数据分辨率的方法。换句话说,如果val
非常大,这可能意味着您需要以较小的步长在矢量中引入更多值。如果val
非常小,这可能意味着您最初指定为b
向量的内容足够了。我不熟悉该功能,所以我没有考虑是否有没有解决方案来处理您提供给r
功能的数据。