已知離散點上的資料集,即已知在點集x上對應的函式值y,構造乙個解析函式(其圖形為一曲線)通過這些點,並能夠求出這些點之間的值,這一過程稱為一維插值。
matlab命令:yi=interp1(x, y, xi, method)
該命令用指定的演算法找出乙個一元函式,然後以給出xi處的值。xi可以是乙個標量,也可以是乙個向量,是向量時,必須單調,method可以下列方法之一:
'nearest':最近鄰點插值,直接完成計算;
'spline':三次樣條函式插值;
'linear':線性插值(預設方式),直接完成計算;
'cubic':三次函式插值;
對於[min,max]外的值,matlab使用外推的方法計算數值。
下面是第乙個例子:
表一室內溫度隨時間的變化
用三次樣條插值、三次插值、線性插值、最近鄰點插值分別求出表一中室內6:30—17:30之間每隔2各點的近似溫度,並對四種插值方法下的結果進行比較。
t=6:2:18;
t=[18.0 20.0 22.0 25.0 30.0 28.0 24.0];
tt=6.5:2:17.5;%使用不同的方法進行一維插值
yi_spline=interp1(t,t,tt,'spline') %三次樣條插值
yi_cubic=interp1(t,t,tt,'cubic三次多項式插值
yi_linear=interp1(t,t,tt線性插值
yi_nearest=interp1(t,t,tt,'nearest') %最近鄰點插值
%繪製影象進行對比
plot(t,t,'ko');
grid on;hold on;
plot(tt,yi_spline,'b',tt,yi_cubic,'g',tt,yi_linear,'r-',tt,yi_nearest,'k');
legend('原始資料','三次樣條插值','三次插值','線性插值','最近鄰點插值',2);
xlabel('時間/t');ylabel('室內溫度(t)/攝氏度');
title('四種插值方法的比較 ')
結果:yi_spline =
18.5020 20.4986 22.5193 26.3775 30.2051 26.8178
yi_cubic =
18.5000 20.4812 22.6305 26.3086 29.8125 27.2344
yi_linear =
18.5000 20.5000 22.7500 26.2500 29.5000 27.0000
yi_nearest =
18 20 22 25 30 28
**:下面是第二個例子:
t=1900:10:1990;
p=[75.995,91.972,105.
711,123.203,131.669,150.
697,179.323,203.212,226.
505,249.633];
x=1900:0.01:1990;%使用不同的方法進行一維插值
yi_linear=interp1(t,p,x); %線性插值
yi_spline=interp1(t,p,x,'spline');%三次樣條插值
yi_cubic=interp1(t,p,x,'cubic');%三次多項式插值
yi_v5cubic=interp1(t,p,x,'v5cubic');%matlab5中使用的三次多項式插值
%繪製影象對比
%subplot是將多個圖畫到乙個平面上的工具。其中,m表示是圖排成m行,n表示圖排成n列,也就是整個figure中有n個圖是排成一行的,一共m行,如果第乙個數字是2就是表示2行圖。p是指你現在要把曲線畫到figure中哪個圖上,最後乙個如果是1表示是從左到右第乙個位置。
subplot(2,1,1);
plot(t,p,'ko');
hold on;
plot(x,yi_linear,'g','linewidth',1.5);grid on;
plot(x,yi_spline,'y','linewidth',1.5);
title('linear vs spline ')
subplot(2,1,2);
plot(t,p,'ko');
hold on
plot(x,yi_cubic,'g','linewidth',1.5);grid on;
plot(x,yi_v5cubic,'y','linewidth',1);
title('cubic vs v5cubic ');
%建立新圖形視窗
figure
yi_nearest=interp1(t,p,x,'nearest');%最鄰近插值法
plot(t,p,'ko');
hold on
plot(x,yi_nearest,'g','linewidth',1.5);grid on;
title('nearest method');
%以下是根據擬合估計
msg='year cubic linear nearest spline';
for i=0:8
n=10*i;
year=1905+n;
pop(i+1,1)=year;
pop(i+1,2)=yi_cubic((year-1900)/0.01+1);
pop(i+1,3)=yi_linear((year-1900)/0.01+1);
pop(i+1,4)=yi_nearest((year-1900)/0.01+1);
pop(i+1,5)=yi_spline((year-1900)/0.01+1);
endp=round(pop);
disp(msg)
disp(p)
由此可見,各種插值的優劣,在速度上,nearest最快,然後是linear再到cubic,最慢的是splic.但是精度和曲線的平滑度恰好相反,nearest甚至不連續~~
系統預設的是linear
基於 MATLAB 的函式的插值方法
6.1 插值問題及其誤差 6.1.2 與插值有關的matlab 函式 一 poly2sym 函式 呼叫格式一 poly2sym c 呼叫格式二 f1 poly2sym c,v 或 f2 poly2sym c,sym v 二 polyval 函式 呼叫格式 y polyval p,x 三 poly 函...
實驗1拉格朗日插值與牛頓插值
西華數學與計算機學院上機實踐報告 一 目的 1 通過本實驗加深對拉格朗日插值和牛頓插值法構造過程的理解 2 能對上述兩種插值法提出正確的演算法描述程式設計實現。二 內容與設計思想 編制乙個程式,分別用拉格朗日插值法和牛頓插值法求解某點的函式近似值。已知y f x 的資料表如下,求t 0.63處的函式...
matlab線性規劃練習
第11次課 1 某工具機廠生產甲 乙兩種工具機,每台銷售後的利潤分別為 4000 元與 3000 元 生產甲工具機需用a b 機器加工,加工時間分別為每台 2 小時和 1 小時 生產乙工具機需用a b c 三種機器加工,加工時間為每台各一小時。若每天可用於加工的機器時數分別為a 機器 10 小時 b...