2017-03-29 8 views
0

私は一連のデータを持っており、Matlabで線形補間を使用して特定の点の対応する値を探したいとします。線形補間を使用して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

シンプル補間

あなただけの他の方法を補間でき

...

% 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. 
-1

さて、あなたはそれの周りの2つのサンプルで必要なすべての補間値を知っているために、線形補間モデルを使用したいので。

たとえば、値y = 3.5を取得すると、3.5より小さい値を持つ隣接する2つの点と、3.5より高い値を持つ点を見つける必要があります。

Line Equationを使用すると、その時点の正確な値はxとなります。

yの値に対してxが見つかったら、すべてのデータを補間する必要はありません。

関連する問題