Ale*_*ols 4 arrays matlab interpolation intersection
这是我目前的图表:
虚线蓝线表示与我正在寻找的x值相对应的y值.我试图找到线与蓝色曲线(上)的交点的x值.由于相互作用不落在已经定义的点上,我们需要插入一个落在上图上的点.
这是我的信息:
LineValue - 交集的y值和虚线的值(y = LineValue)Frequency - 包含此图上所示x值坐标的数组.对应于LineValue的频率的插值是我们正在寻找的上/下 - 包含此图的y值信息的数组
这个解决方案是对Amro答案的改进.而不是使用fzero
你可以简单地通过查找由逻辑比较创建的系列的第一个差异中的转换来计算线的交集LineValue
.所以,使用Amro的样本数据:
>> x = linspace(-100,100,100); >> y = 1-2.*exp(-0.5*x.^2./20)./(2*pi) + randn(size(x))*0.002; >> LineValue = 0.8;
找到超过LineValue
以下连续点的那些段的起始索引:
>> idx = find(diff(y >= LineValue)) idx = 48 52
然后,您可以使用加权平均值(即线性插值)计算交叉点的x位置:
>> x2 = x(idx) + (LineValue - y(idx)) .* (x(idx+1) - x(idx)) ./ (y(idx+1) - y(idx)) x2 = -4.24568579887939 4.28720287203057
绘制这些以验证结果:
>> figure; >> plot(x, y, 'b.-', x2, LineValue, 'go', [x(1) x(end)], LineValue*[1 1], 'k:');
这种方法的优点是:
fzero
.