シンプル補間
あなただけの他の方法を補間でき
...
% 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)
ファインディングゼロ
このアプローチは、より複雑ですが、あなたのデータに応じて、かもしれませんより適用可能である。
あなたはコメントで述べたように、intial推測が「十分」でなければなりません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.