Matlab-基礎(chǔ)篇(四)

在進(jìn)行文件數(shù)據(jù)讀取,并進(jìn)行數(shù)據(jù)預(yù)繪圖后,非真實(shí)值數(shù)據(jù)點(diǎn)經(jīng)常出現(xiàn),不論是缺失還是數(shù)據(jù)自動(dòng)設(shè)定的情況。Matlab繪圖中線性為"-"(折線圖)時(shí),若有缺失,則對(duì)應(yīng)位置標(biāo)記為NaN(not a number,即不是一個(gè)數(shù)),而自動(dòng)設(shè)定的非真實(shí)記錄數(shù)據(jù),明顯地脫離“群體”,而且都是以一個(gè)特別大或特別小的數(shù)字出現(xiàn),如:-999等。
首先,便是要先找到對(duì)應(yīng)數(shù)列中(
為程序中數(shù)列對(duì)應(yīng)的變量)存在非真實(shí)值的數(shù)據(jù)點(diǎn)位置,借助
或
即可實(shí)現(xiàn),找到對(duì)應(yīng)要預(yù)處理的位置后,通常需要去除非真實(shí)值數(shù)據(jù)點(diǎn)。雖然可以利用循環(huán)一一實(shí)現(xiàn),但Matlab可以直接對(duì)相關(guān)數(shù)列做邏輯運(yùn)算,因此用“隱藏查找”的形式直接統(tǒng)一處理:
或
。注意:[]是置空符號(hào),相當(dāng)于清楚對(duì)應(yīng)位置變量,數(shù)據(jù)長(zhǎng)度會(huì)發(fā)生變化,比較“粗魯”;對(duì)應(yīng)矩陣不建議進(jìn)行此操作,因?yàn)榫仃嚾菀壮霈F(xiàn)每一行或每一列size發(fā)生改變,而相應(yīng)合理應(yīng)該是將-999位置變?yōu)镹aN的形式后,再結(jié)合
等進(jìn)行一些基本統(tǒng)計(jì)量的計(jì)算。
再者,找到對(duì)應(yīng)位置或刪除一些不需要的數(shù)據(jù)點(diǎn)后,有時(shí)需要在對(duì)應(yīng)位置重新做插值(一般來說,數(shù)量都不太多;如果數(shù)量太多,如超過樣本量的1/3甚至1/2,也不是很建議做插值,因?yàn)椴逯狄氲恼`差會(huì)大大影響分析的結(jié)果討論),來保證每個(gè)測(cè)量量之間的間隔時(shí)間是一樣的,而不會(huì)出現(xiàn)大量不好處理的“非等間隔”數(shù)據(jù)。下面主要來介紹多項(xiàng)式插值和Lagrange(拉格朗日)插值。
多項(xiàng)式插值函數(shù):polyfit、polyval和poly2sym
【調(diào)用案例】
>>x1=[1,2,6,10]; y1=[3,2,8,9];
>>P=polyfit(x1,y1,3); %用三次多項(xiàng)式,確定插值函數(shù)P(降冪形式)
>>X=1:0.01:10; Y=polyval(P,X); %構(gòu)建新數(shù)據(jù)點(diǎn)X(包含插值點(diǎn)位置),利用P計(jì)算對(duì)應(yīng)值Y
>>plot(x1,y1,'ro',X,Y) %畫圖
>>Func=ploy2sym(P) %給出多項(xiàng)式形式
Lagrange插值公式的Matlab實(shí)現(xiàn)
一般情形Lagrange插值公式給出如下:

注意到
函數(shù)的分子和分母對(duì)應(yīng)了插值位置
和原先所有插值節(jié)點(diǎn)
之間的關(guān)系,由于兩者基本一致,而且都是連乘的形式,考慮使用prob函數(shù);
程序定義向量中,令x:插值位置;x_ori:插值節(jié)點(diǎn);由x_ori~=x_ori(i)給出式子中規(guī)避連乘的間斷項(xiàng);作差由x-x_ori(x_ori~=x_ori(i))給出;結(jié)合連乘符號(hào),則有prob(x-x_ori(x_ori~=x_ori(i)));
因此,分子和分母分別為:
pob(x-x_ori(x_ori~=x_ori(i)));prob(x_ori(i)-x_ori(x_ori~=x_ori(i)))
則l(i)=pob(x-x_ori(x_ori~=x_ori(i)))/prob(x_ori(i)-x_ori(x_ori~=x_ori(i)));
在l和y都是列向量的前提想,P=sum(l.*y)或P=l’*y。
同時(shí),Matlab也提供了各種維度的插值函數(shù),下面進(jìn)行一一講解,在高維插值時(shí),要注意網(wǎng)格點(diǎn)的生成,基本有兩種生成函數(shù),注意區(qū)別:ndgrid和meshgrid。這樣生成的網(wǎng)格節(jié)點(diǎn)是大小均勻的分布、便于數(shù)據(jù)處理、區(qū)域綜合分析,但存儲(chǔ)量大,不適用于稀疏空間數(shù)據(jù),與之相對(duì)的是一般分布。
一維:interp1、csapi和fnplt
(1) >>y=interp1(x,y,xx,'method',['extrap'])
%x:插值節(jié)點(diǎn);y:節(jié)點(diǎn)函數(shù)值;xx:插值位置
%‘method’可選擇有:
%spline????????三次樣條函數(shù)插值
%v5cubic???? 三次多項(xiàng)式插值
%linear????????線性插值
%nearest???? 最鄰近插值
%pchip????????分段三次Hermite插值
%extrap? ??? ?可選擇添加,以防止有外插的點(diǎn);默認(rèn)只能做內(nèi)插
(2)>>S=csapi(x,y)%三次樣條插值; fnplt(S);%擬合結(jié)果繪制
%x/y同(1),S返回樣條函數(shù)對(duì)象的插值結(jié)果,是一個(gè)結(jié)構(gòu)形式(元胞)的數(shù)據(jù),包括子區(qū)間點(diǎn)、各區(qū)間點(diǎn)插值函數(shù)系數(shù)等。
二維:interp2、griddata
(1) >>Zi=interp2(X,Y,Z,Xi,Yi,'method');
% 插值點(diǎn)Xi ,Yi 可以是向量或同維矩陣
% X與Y 須是單調(diào)的,Z的維數(shù)為Y×X
% 若Xi與Yi 中有在X與Y范圍之外的點(diǎn),則相應(yīng)地返回NaN
%‘method’可選擇有:
%spline????????三次樣條函數(shù)插值
%cubic???? ????雙三次插值
%linear????????雙線性插值算法(缺省時(shí)默認(rèn))
%nearest?????最鄰近插值
(2) >>z=griddata (x0,y0,z0,x,y,’method’); %二維一般分布插值
%‘method’可選擇有:
%v4????????????4.0提供的插值算法,公認(rèn)效果較好
%cubic?????????雙三次插值
%linear????????雙線性插值算法(缺省時(shí)默認(rèn))
%nearest?????最鄰近插值
三維:griddata3(類比griddata2的過程,用之前用meshgrid生成三維網(wǎng)格)
? ? ? ? ? ?interp3(類比interp1/2的形式)
>>V0=interp3(x,y,z,V,x0,y0,z0,'method');
>>slice(x0,y0,z0,V0,[-0.5,0.3, 0.9],[0.6,-0.1],[-1,-0.5,0.5,1])
% 僅畫出指定坐標(biāo)格點(diǎn)上的函數(shù)值,也稱作查看“切片細(xì)節(jié)”
N 維:interpn、griddatan
可以發(fā)現(xiàn),其實(shí)在做插值的過程中,無論是什么插值方法,自然地就存在基于數(shù)據(jù)點(diǎn)的一些擬合逼近過程,但這種“擬合”和后續(xù)的擬合有一些不同,前者是插值方法帶來的,后者可以是參數(shù)化的、也可以是非參數(shù)化的,可以是人為給定的、也可以是非人為給定的,有些特定情況也稱這種擬合是“線性回歸分析”(無論是一元的,還是多元的),這種概念的擬合范圍更廣更豐富。但是,不可忽視的是,每種插值方法都有其一定的誤差,因此對(duì)于誤差及其傳遞的分析也很重要。