使用线性插值来预测matlab中的值

时间:2017-03-29 09:27:30

标签: matlab linear-interpolation

我有一组数据,想在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 =?

2 个答案:

答案 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,则无需插入所有数据。