簡體   English   中英

MATLAB:插值以找到直線和曲線之間的交點的x值

[英]MATLAB: Interpolating to find the x value of the intersection between a line and a curve

這是我目前的圖表:

虛線藍線表示與我正在尋找的x值相對應的y值。我試圖找到線的交叉點的x值與藍色曲線(上)

虛線藍線表示與我正在尋找的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更快。

使用FZERO的示例解決方案:

%# data resembling your curve
x = linspace(-100,100,100);
f = @(x) 1-2.*exp(-0.5*x.^2./20)./(2*pi) + randn(size(x))*0.002;
VALUE = 0.8;

%# solve f(x)=VALUE
z1 = fzero(@(x)f(x)-VALUE, -10);  %# find solution near x=-10
z2 = fzero(@(x)f(x)-VALUE, 10);   %# find solution near x=+10

%# plot
plot(x,f(x),'b.-'), hold on
plot(z1, VALUE, 'go', z2, VALUE, 'go')
line(xlim(), [VALUE VALUE], 'Color',[0.4 0.4 0.4], 'LineStyle',':')
hold off

截圖

數據系列中的步長是否相同? 控制方程是假設為立方,正弦等。?

doc interpl找到過零點

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM