% 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)
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.
2
那么,既然你想要使用线性插值模型来知道插值,你只需要它周围的2个样本 .
例如,如果您想知道何时获得值 y = 3.5 ,您需要找到2个相邻点,其中一个值低于 3.5 ,另一个值高于 3.5 .
2 回答
Simple Interpolation
你可以用另一种方式插值......
Finding Zeros
这种方法更复杂,但根据您的数据,可能更适用 .
您可以使用fzero使用某种根查找方法,并使用如下定义的函数
正如评论中所指出的那样,初始猜测必须是"good enough" - 这不仅仅适用于
fzero
内的收敛,而且如果在评估期间测试的x值超出了插值范围,那么它将会中断 .例:
那么,既然你想要使用线性插值模型来知道插值,你只需要它周围的2个样本 .
例如,如果您想知道何时获得值
y = 3.5
,您需要找到2个相邻点,其中一个值低于3.5
,另一个值高于3.5
.然后所有需要的是使用Line Equation来推断
x
的精确值 .我想说的是,如果您只想找到某个
y
值的x
,则无需插入所有数据 .