给定y值的X值

时间:2018-08-29 15:09:22

标签: matlab signals axis

我有一个非常简单的问题,但我找不到我的错。我有两个信号,一个是相同的x轴,两个是在y轴上的信号值。我需要在黑线上找到绿色信号的y值,因此蓝色信号的y值为50.05。它应该在6-7之间。我认为我应该先获得相同的x值(4.676)。然后获得绿色信号的y值,其中x为4.676。所以我需要先获得4.676,但在给定的y值上我无法获得此x值。我试过了,但总是空矩阵。

xvalue = interp1(x_bluesignal,y_bluesignal, 50.05)

idx = find(x_bluesignal == 50.05);
Xidx = x_bluesignal(idx);

有什么主意吗?谢谢!

enter image description here

2 个答案:

答案 0 :(得分:1)

正如@obchardon在评论中指出的那样,您想对x值而不是y值进行插值。作为一个简单的示例,请考虑以下内容:

%Plot two original lines
x = linspace(0,20,101);
y1 = 5*x+2;
y2 = 3*x+5;
plot(x, y1, 'b', x, y2 ,'g'); hold on

%Plot intersection line at desired y_interest value
y_interest = 50.05;
xvalue = interp1(y1, x, y_interest);
plot([xvalue, xvalue], [0, 100], 'k--')

x_interest = interp1(x, y2, xvalue);

这将产生以下情节:

enter image description here

在x上进行插值以找到正确的x值后,就可以将该值输入到绿色曲线的y值上的下一个插值中。在上面的示例中,这将输出33.8300

答案 1 :(得分:-2)

在两次尝试中,您实际上都是在向MATLAB询问y的值,其中x是50.05,而不是您想要的查询。
两者

xvalue = interp1(y_bluesignal,x_bluesignal, 50.05)

idx = find(y_bluesignal == 50.05); Xidx = x_bluesignal(idx);

如果在y=50.05处有一个输入的数据点可能会起作用(如果这是一个计算值,请使用上面的注释中的容差),interp方法将不管使用