MATLAB實現線性插值interp1的功能

2021-10-11 01:47:43 字數 2398 閱讀 5232

1.關於插值

插值,它根據已知的資料序列(也可以理解為座標中一連串離散的點),找到其中的規律;然後根據找到的這個規律,來對其中尚未有資料記錄的點進數值的估計。

2.關於線性插值

線性插值是一種針對一維資料的插值方法,它根據一維資料序列中需要插值的點的左右鄰近兩個資料點來進行數值的估計。當然了它不是求這兩個點資料大小的平均值(當然也有求平均值的情況),而是根據到這兩個點的距離來分配它們的比重的。而對於一些邊緣處的點也需要使用到外插:即通過找出最近的兩個點,通過建立該兩點之間的一元一次線性方程通過帶入x即可以得到相應的y值。由於比較簡單,以下**沒有用到太多matlab自帶的內建函式。

函式說明:x0,y0為原始無序資料,但x0和y0的順序是一一對應的,yq為需要對應於x求的線性插值。

function yq = linear_me(x0,y0,x)

len_x =length(x);

a = [x0,y0];

yq = zeros(len_x,1);

for i=1:len_x

% 初始化距離x0中距離x最近的個點

min_pos = inf;

min_next_pos =inf;

min_neg = -inf;

min_next_neg = -inf;

for j=1:length(a)

if x0(j)-x(i) >=0 % 此時x0在x的右邊

if min_pos > x0(j)-x(i)

min_pos = x0(j)-x(i);% 找出距離x0中距離x(i)中右方最近的數

pos_y = y0(j);

endelse % 此時x0在x的左邊

if min_neg < x0(j)-x(i) % 找出距離x0中距離x(i)中左方最近的數

min_neg = x0(j)-x(i);

neg_y = y0(j);

endend

end%% 內插

if min_pos~=inf && min_neg~=-inf

k = (pos_y-neg_y)/(min_pos-min_neg);

yq(i) = pos_y-k*min_pos;

else

%% 外插

% --------------右外插 ------------- %

if min_pos == inf

for j=1:length(a)

if min_next_neg < x0(j)-x(i) && x0(j)-x(i) ~= min_neg % 找出距離x0中距離x(i)中左方第二近的數

min_next_neg = x0(j)-x(i);

neg_next_y = y0(j);

endend

k1 = (neg_y-neg_next_y)/(min_neg-min_next_neg);

yq(i) = neg_y-k1*min_neg;

% ----------右外插 ----------------- %

% -----------左外插----------------- %

else

for j=1:length(a)

if min_next_pos > x0(j)-x(i) && x0(j)-x(i) ~= min_pos % 找出距離x0中距離x(i)中左方第二近的數

min_next_pos = x0(j)-x(i);

pos_next_y = y0(j);

endend

k2 = (pos_y-pos_next_y)/(min_pos-min_next_pos);

yq(i) = pos_y+k2*min_pos;

% -----------左外插 --------------- %

endend

endend

實現效果的檢驗:

編寫test.m指令碼進行測試:

% test.m

a=load('data_input.txt');

x0=a(:,1);

y0=a(:,2);

x=(0:0.01:1)';

y=interp1(x0,y0,x,'linear','extrap');

yq=linear_me(x0,y0,x);

figure

subplot(1,3,1)

plot(x0,y0,'bp')

title("原始資料圖")

subplot(1,3,2)

plot(x,y,'*')

title("使用interp1-linear插值")

subplot(1,3,3)

plot(x,yq,'ro')

title("自編函式插值")

mysql實現線性插值法 線性插值法

線性插值法 linear interpolation 什麼是線性插值法 線性插值法是指使用連線兩個已知量的直線來確定在這兩個已知量之間的乙個未知量的值的方法。如何進行線性插值 假設我們已知座標 x0,y0 與 x1,y1 要得到 x0,x1 區間內某一位置x在直線上的值。根據圖中所示,我們得到兩點式...

線性插值和雙線性插值

線性插值 如果你只處理分離的資料 想知道分離點之間的某些值,需要用到某種型別的插值。這種情況如圖5 17座標所示。對某些分離的 整數 x值,你知道y值。當x 2,你知道y 10,x 3時y 30。但你不知道x 2.7時的y值。使用線性插值,你通過連線兩點的線段找到x 2.7對應的y值,如圖1所示。使...

線性插值法

線性插值法是指使用連線兩個已知量的直線來確定在這兩個已知量之間的乙個未知量的值的方法。進行線性插值 假設我們已知座標 x 0,y0 與 x 1,y1 要得到 x 0,x1 區間內某一位置x在直線上的值。根據圖中所示,我們得到兩點式直線方程 假設方程兩邊的值為 那麼這個值就是插值係數 從x 0到x的距...