MATLAB:插值以找到直线和曲线之间的交点的x值

Ale*_*ols 4 arrays matlab interpolation intersection

这是我目前的图表:

虚线蓝线表示与我正在寻找的x值相对应的y值. 我试图找到线的交叉点的x值与蓝色曲线(上)

虚线蓝线表示与我正在寻找的x值相对应的y值.我试图找到线与蓝色曲线(上)的交点的x值.由于相互作用不落在已经定义的点上,我们需要插入一个落在上图上的点.

这是我的信息:

LineValue - 交集的y值和虚线的值(y = LineValue)Frequency - 包含此图上所示x值坐标的数组.对应于LineValue的频率的插值是我们正在寻找的上/下 - 包含此图的y值信息的数组

b3.*_*b3. 8

这个解决方案是对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.