2017-03-29 3 views
0

Ich habe eine Reihe von Daten und möchte in Matlab lineare Interpolation verwenden, um den entsprechenden Wert eines bestimmten Punktes zu finden.Verwenden der linearen Interpolation zur Vorhersage von Werten in 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,':.'); 

Nachdem Sie das getan, ist es für mich eine Möglichkeit, den Wert von x ein Wert von y gegeben zu finden? Zum Beispiel, wenn y = 3,5, x =?

Antwort

2

Einfache Interpolation

Sie könnten nur in die andere Richtung interpolieren ...

% 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) 

Finding Zeros

Dieser Ansatz ist komplizierter, aber, abhängig von Ihren Daten, kann mehr anwendbar sein.

Sie irgendeine Art von Wurzelsuche Ansatz verwenden könnte fzero, und eine Funktion definiert, wie unten

% 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) 

Wie bereits erwähnt in den Kommentaren, die intial Vermutung verwenden muss „gut genug“ sein - das ist nicht nur für Konvergenz innerhalb fzero, aber wenn während der Auswertung ein Wert von x getestet wird, der außerhalb Ihrer Interpolation ist, wird es brechen.

Beispiel:

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

Nun, Da Sie Linear Interpolation Modell verwenden, um interpolierten Wert zu wissen, alles, was Sie brauchen, sind zwei Proben um ihn herum.

Zum Beispiel, wenn Sie mich fragen, wenn Sie den Wert y = 3.5 alles, was Sie brauchen, erhalten 2 benachbarte Punkte zu finden, mit einem Wert, der niedriger als 3.5 und den anderen Wert höher als 3.5.

Dann ist alles erforderlich, Line Equation zu verwenden, um den exakten Wert von x an dem Punkt abzuleiten.

Was ich versuche zu sagen ist, wenn Sie nur interessiert sind, die x für einen bestimmten y Wert zu finden, gibt es keine Notwendigkeit, alle Daten zu interpolieren.

Verwandte Themen