我有一組數據,並希望在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 =?
我有一組數據,並希望在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 =?
簡單的插值
你可以只插其他方式...
% 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.
好,既然你想使用線性插值模型,以瞭解插值所有你需要的是周圍的2個樣本。
例如,如果您想知道何時得到值y = 3.5
,您只需找到2個相鄰點,其中一個值低於3.5
,另一個值高於3.5
。
然後所有需要的是使用Line Equation來推斷在該點的確切值x
。
我想說的是,如果您只想找到某個y
的值爲x
,則不需要插入所有數據。