2017-03-29 13 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) 

찾기 제로

이 방식이 더 복잡하지만, 데이터에 따라, 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) 

다음과 같이 정의 된 함수를 사용할 수

에서, intial 추측 "충분히 좋은"해야

-이뿐만 아니라입니다 수렴 범위가 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보다 낮은 값을 가진 인접한 두 점을 찾아야하고 다른 값은 3.5보다 높아야합니다.

그런 다음 을 사용하면 정확한 값인 x을 추측 할 수 있습니다.

제가 말하고자하는 것은 특정 y 값에 대해 x 만 찾으면 모든 데이터를 보간 할 필요가 없다는 것입니다.