我有一组数据,想在Matlab中使用线性插值来查找特定点的相应值。
x = [1 2 3 4 5 6 7 8 9];
y = [1 2 3 4 5 4 2 6 8];
xq = [1:0.25:9];
vq1 = interp1(x,y,xq);
plot(x,y,'o',xq,vq1,':.');
执行此操作后,有没有办法让我找到给定y值的x的值?例如,当y = 3.5时,x =?
答案 0 :(得分:2)
简单插值
你可以用另一种方式进行插值......
% Your code
x = [1 2 3 4 5 6 7 8 9];
y = [1 2 3 4 5 4 2 6 8];
xq = [1:0.25:9];
yq = interp1(x, y, xq);
% Interpolate your newly interpolated xq and yq to find x = x1 when y = 3.5
x1 = interp1(yq, xq, 3.5)
查找零
这种方法更复杂,但根据您的数据,可能更适用。
您可以使用fzero
使用某种根查找方法,并使用下面定义的函数
% Initialise
x = [1 2 3 4 5 6 7 8 9]; y = [1 2 3 4 5 4 2 6 8];
% Define function, like your interpolation, which will have a zero at x=x0
% when y = y0.
y0 = 3.5;
yq = @(xq) interp1(x, y, xq) - y0
% find the zero, intial guess must be good enough
y0 = fzero(yq, 1)
如评论中所述,初始猜测必须“足够好” - 这不仅适用于fzero
内的收敛,而且如果在评估期间测试x的值超出插值范围然后它会破裂。
示例:
y0 = fzero(yq, 1)
% >> Exiting fzero: aborting search for an interval containing a sign change
% because NaN or Inf function value encountered during search.
% (Function value at 0.971716 is NaN.)
y0 = fzero(yq, 5)
% >> y0 = 3.5, as expected from the input data.
答案 1 :(得分:-1)
好吧,既然你想要使用线性插值模型来知道插值,你需要的就是它周围的两个样本。
例如,如果您想知道何时获得值y = 3.5
,则需要找到2个相邻点,其中一个值低于3.5
,另一个值高于3.5
。
然后,所有需要的是使用Line Equation来推断x
的确切值。
我想说的是,如果您只想找到某个x
值的y
,则无需插入所有数据。