① 用matlab 三次多項式函數插值演算法怎麼寫 或者說下設計思路 設計主要結構 功能模塊 流程
看看這個能不能幫到你:Matlab中插值函數匯總和使用說明:MATLAB中的插值函數為interp1,其調用格式為:yi=interp1(x,y,xi,'method')其中x,y為插值點,yi為在被插值點xi處的插值結果;x,y為向量,'method'表示採用的插值方法,MATLAB提供的插值方法有幾種:'nearest'是最鄰近插值,'linear'線性插值;'spline'三次樣條插值;'cubic'立方插值.預設時表示線性插值。注意:所有的插值方法都要求x是單調的,並且xi不能夠超過x的范圍。例如:在一天24小時內,從零點開始每間隔2小時測得的環境溫度數據分別為12,9,9,10,18,24,28,27,25,20,18,15,13,推測中午12點(即13點)時的溫度.x=0:2:24;y=[129910182428272520181513];a=13;y1=interp1(x,y,a,'spline')結果為:27.8725若要得到一天24小時的溫度曲線,則:xi=0:1/3600:24;yi=interp1(x,y,xi,'spline');plot(x,y,'o',xi,yi)命令1interp1功能一維數據插值(表格查找)。該命令對數據點之間計算內插值。它找出一元函數f(x)在中間點的數值。其中函數f(x)由所給數據決定。x:原始數據點Y:原始數據點xi:插值點Yi:插值點格式(1)yi=interp1(x,Y,xi)返回插值向量yi,每一元素對應於參量xi,同時由向量x與Y的內插值決定。參量x指定數據Y的點。若Y為一矩陣,則按Y的每列計算。yi是階數為length(xi)*size(Y,2)的輸出矩陣。(2)yi=interp1(Y,xi)假定x=1:N,其中N為向量Y的長度,或者為矩陣Y的行數。(3)yi=interp1(x,Y,xi,method)用指定的演算法計算插值:』nearest』:最近鄰點插值,直接完成計算;』linear』:線性插值(預設方式),直接完成計算;』spline』:三次樣條函數插值。對於該方法,命令interp1調用函數spline、ppval、mkpp、umkpp。這些命令生成一系列用於分段多項式操作的函數。命令spline用它們執行三次樣條函數插值;』pchip』:分段三次Hermite插值。對於該方法,命令interp1調用函數pchip,用於對向量x與y執行分段三次內插值。該方法保留單調性與數據的外形;』cubic』:與』pchip』操作相同;』v5cubic』:在MATLAB5.0中的三次插值。對於超出x范圍的xi的分量,使用方法』nearest』、』linear』、』v5cubic』的插值演算法,相應地將返回NaN。對其他的方法,interp1將對超出的分量執行外插值演算法。(4)yi=interp1(x,Y,xi,method,'extrap')對於超出x范圍的xi中的分量將執行特殊的外插值法extrap。(5)yi=interp1(x,Y,xi,method,extrapval)確定超出x范圍的xi中的分量的外插值extrapval,其值通常取NaN或0。例1>>x=0:10;y=x.*sin(x);>>xx=0:.25:10;yy=interp1(x,y,xx);>>plot(x,y,'kd',xx,yy)例2>>year=1900:10:2010;>>proct=[75.99591.972105.711123.203131.669150.697179.323203.212226.505249.633256.344267.893];>>p1995=interp1(year,proct,1995)>>x=1900:1:2010;>>y=interp1(year,proct,x,'pchip');>>plot(year,proct,'o',x,y)插值結果為:p1995=252.9885命令2interp2功能二維數據內插值(表格查找)格式(1)ZI=interp2(X,Y,Z,XI,YI)返回矩陣ZI,其元素包含對應於參量XI與YI(可以是向量、或同型矩陣)的元素,即Zi(i,j)←[Xi(i,j),yi(i,j)]。用戶可以輸入行向量和列向量Xi與Yi,此時,輸出向量Zi與矩陣meshgrid(xi,yi)是同型的。同時取決於由輸入矩陣X、Y與Z確定的二維函數Z=f(X,Y)。參量X與Y必須是單調的,且相同的劃分格式,就像由命令meshgrid生成的一樣。若Xi與Yi中有在X與Y范圍之外的點,則相應地返回nan(NotaNumber)。(2)ZI=interp2(Z,XI,YI)預設地,X=1:n、Y=1:m,其中[m,n]=size(Z)。再按第一種情形進行計算。(3)ZI=interp2(Z,n)作n次遞歸計算,在Z的每兩個元素之間插入它們的二維插值,這樣,Z的階數將不斷增加。interp2(Z)等價於interp2(z,1)。(4)ZI=interp2(X,Y,Z,XI,YI,method)用指定的演算法method計算二維插值:』linear』:雙線性插值演算法(預設演算法);』nearest』:最臨近插值;』spline』:三次樣條插值;』cubic』:雙三次插值。例3:>>[X,Y]=meshgrid(-3:.25:3);>>Z=peaks(X,Y);>>[XI,YI]=meshgrid(-3:.125:3);>>ZZ=interp2(X,Y,Z,XI,YI);>>surfl(X,Y,Z);holdon;>>surfl(XI,YI,ZZ+15)>>axis([-33-33-520]);shadingflat>>holdoff例4:>>years=1950:10:1990;>>service=10:10:30;>>wage=[150.697199.592187.625179.323195.072250.287203.212179.092322.767226.505153.706426.730249.633120.281598.243];>>w=interp2(service,years,wage,15,1975)插值結果為:w=190.6288命令3interp3功能三維數據插值(查表)格式(1)VI=interp3(X,Y,Z,V,XI,YI,ZI)找出由參量X,Y,Z決定的三元函數V=V(X,Y,Z)在點(XI,YI,ZI)的值。參量XI,YI,ZI是同型陣列或向量。若向量參量XI,YI,ZI是不同長度,不同方向(行或列)的向量,這時輸出參量VI與Y1,Y2,Y3為同型矩陣。其中Y1,Y2,Y3為用命令meshgrid(XI,YI,ZI)生成的同型陣列。若插值點(XI,YI,ZI)中有位於點(X,Y,Z)之外的點,則相應地返回特殊變數值NaN。(2)VI=interp3(V,XI,YI,ZI)預設地,X=1:N,Y=1:M,Z=1:P,其中,[M,N,P]=size(V),再按上面的情形計算。(3)VI=interp3(V,n)作n次遞歸計算,在V的每兩個元素之間插入它們的三維插值。這樣,V的階數將不斷增加。interp3(V)等價於interp3(V,1)。(4)VI=interp3(,method)%用指定的演算法method作插值計算:『linear』:線性插值(預設演算法);『cubic』:三次插值;『spline』:三次樣條插值;『nearest』:最鄰近插值。說明在所有的演算法中,都要求X,Y,Z是單調且有相同的格點形式。當X,Y,Z是等距且單調時,用演算法』*linear』,』*cubic』,』*nearest』,可得到快速插值。例5>>[x,y,z,v]=flow(20);>>[xx,yy,zz]=meshgrid(.1:.25:10,-3:.25:3,-3:.25:3);>>vv=interp3(x,y,z,v,xx,yy,zz);>>slice(xx,yy,zz,vv,[69.5],[12],[-2.2]);shadinginterp;colormapcool命令4interpft功能用快速Fourier演算法作一維插值格式(1)y=interpft(x,n)返回包含周期函數x在重采樣的n個等距的點的插值y。若length(x)=m,且x有采樣間隔dx,則新的y的采樣間隔dy=dx*m/n。注意的是必須n≥m。若x為一矩陣,則按x的列進行計算。返回的矩陣y有與x相同的列數,但有n行。(2)y=interpft(x,n,dim)沿著指定的方向dim進行計算命令5griddata功能數據格點格式(1)ZI=griddata(x,y,z,XI,YI)用二元函數z=f(x,y)的曲面擬合有不規則的數據向量x,y,z。griddata將返回曲面z在點(XI,YI)處的插值。曲面總是經過這些數據點(x,y,z)的。輸入參量(XI,YI)通常是規則的格點(像用命令meshgrid生成的一樣)。XI可以是一行向量,這時XI指定一有常數列向量的矩陣。類似地,YI可以是一列向量,它指定一有常數行向量的矩陣。(2)[XI,YI,ZI]=griddata(x,y,z,xi,yi)返回的矩陣ZI含義同上,同時,返回的矩陣XI,YI是由行向量xi與列向量yi用命令meshgrid生成的。(3)[XI,YI,ZI]=griddata(.,method)用指定的演算法method計算:『linear』:基於三角形的線性插值(預設演算法);『cubic』:基於三角形的三次插值;『nearest』:最鄰近插值法;『v4』:MATLAB4中的griddata演算法。命令6spline功能三次樣條數據插值格式(1)yy=spline(x,y,xx)對於給定的離散的測量數據x,y(稱為斷點),要尋找一個三項多項式y=p(x),以逼近每對數據(x,y)點間的曲線。過兩點(xi,yi)和(xi+1,yi+1)只能確定一條直線,而通過一點的三次多項式曲線有無窮多條。為使通過中間斷點的三次多項式曲線具有唯一性,要增加兩個條件(因為三次多項式有4個系數):a.三次多項式在點(xi,yi)處有:p¢i(xi)=p¢i(xi);b.三次多項式在點(xi+1,yi+1)處有:p¢i(xi+1)=pi¢(xi+1);c.p(x)在點(xi,yi)處的斜率是連續的(為了使三次多項式具有良好的解析性,加上的條件);d.p(x)在點(xi,yi)處的曲率是連續的;對於第一個和最後一個多項式,人為地規定如下條件:①.p¢1¢(x)=p¢2¢(x)②.p¢n¢(x)=p¢n¢-1(x)上述兩個條件稱為非結點(not-a-knot)條件。綜合上述內容,可知對數據擬合的三次樣條函數p(x)是一個分段的三次多項式:ïïîïïí죣££££=nnn+1223112p(x)xxxp(x)xxxp(x)xxxp(x)LLLL其中每段pi(x)都是三次多項式。該命令用三次樣條插值計算出由向量x與y確定的一元函數y=f(x)在點xx處的值。若參量y是一矩陣,則以y的每一列和x配對,再分別計算由它們確定的函數在點xx處的值。則yy是一階數為length(xx)*size(y,2)的矩陣。(2)pp=spline(x,y)返回由向量x與y確定的分段樣條多項式的系數矩陣pp,它可用於命令ppval、unmkpp的計算。例6對離散地分布在y=exp(x)sin(x)函數曲線上的數據點進行樣條插值計算:>>x=[024581212.817.219.920];y=exp(x).*sin(x);>>xx=0:.25:20;>>yy=spline(x,y,xx);>>plot(x,y,'o',xx,yy)命令7interpn功能n維數據插值(查表)格式(1)VI=interpn(X1,X2,,,Xn,V,Y1,Y2,?,Yn)%返回由參量X1,X2,…,Xn,V確定的n元函數V=V(X1,X2,…,Xn)在點(Y1,Y2,…,Yn)處的插值。參量Y1,Y2,…,Yn是同型的矩陣或向量。若Y1,Y2,…,Yn是向量,則可以是不同長度,不同方向(行或列)的向量。它們將通過命令ndgrid生成同型的矩陣,再作計算。若點(Y1,Y2,…,Yn)中有位於點(X1,X2,…,Xn)之外的點,則相應地返回特殊變數NaN。VI=interpn(V,Y1,Y2,?,Yn)%預設地,X1=1:size(V,1),X2=1:size(V,2),…,Xn=1:size(V,n),再按上面的情形計算。VI=interpn(V,ntimes)%作ntimes次遞歸計算,在V的每兩個元素之間插入它們的n維插值。這樣,V的階數將不斷增加。interpn(V)等價於interpn(V,1)。VI=interpn(?,method)%用指定的演算法method計算:『linear』:線性插值(預設演算法);『cubic』:三次插值;『spline』:三次樣條插值法;『nearest』:最鄰近插值演算法。命令8meshgrid功能生成用於畫三維圖形的矩陣數據。格式[X,Y]=meshgrid(x,y)將由向量x,y(可以是不同方向的)指定的區域[min(x),max(x),min(y),max(y)]用直線x=x(i),y=y(j)(i=1,2,…,length(x),j=1,2,…,length(y))進行劃分。這樣,得到了length(x)*length(y)個點,這些點的橫坐標用矩陣X表示,X的每個行向量與向量x相同;這些點的縱坐標用矩陣Y表示,Y的每個列向量與向量y相同。其中X,Y可用於計算二元函數z=f(x,y)與三維圖形中xy平面矩形定義域的劃分或曲面作圖。[X,Y]=meshgrid(x)%等價於[X,Y]=meshgrid(x,x)。[X,Y,Z]=meshgrid(x,y,z)%生成三維陣列X,Y,Z,用於計算三元函數v=f(x,y,z)或三維容積圖。例7[X,Y]=meshgrid(1:3,10:14)計算結果為:X=123123123123123Y=命令9ndgrid功能生成用於多維函數計算或多維插值用的陣列格式[X1,X2,…,Xn]=ndgrid(x1,x2,…,xn)%把通過向量x1,x2,x3…,xn指定的區域轉換為數組x1,x2,x3,…,xn。這樣,得到了length(x1)*length(x2)*…*length(xn)個點,這些點的第一維坐標用矩陣X1表示,X1的每個第一維向量與向量x1相同;這些點的第二維坐標用矩陣X2表示,X2的每個第二維向量與向量x2相同;如此等等。其中X1,X2,…,Xn可用於計算多元函數y=f(x1,x2,…,xn)以及多維插值命令用到的陣列。[X1,X2,…,Xn]=ndgrid(x)%等價於[X1,X2,…,Xn]=ndgrid(x,x,…,x)命令10table1功能一維查表格式Y=table1(TAB,X0)%返回用表格矩陣TAB中的行線性插值元素,對X0(TAB的第一列查找X0)進行線性插值得到的結果Y。矩陣TAB是第一列包含關鍵值,而其他列包含數據的矩陣。X0中的每一元素將相應地返回一線性插值行向量。矩陣TAB的第一列必須是單調的。例8>>tab=[(1:4)'hilb(4)]>>y=table1(tab,[12.33.64])查表結果為:>>tab=[(1:4)'hilb(4)]>>y=table1(tab,[12.33.64])
② 什麼是插值演算法
插值法又稱「內插法」,是利用函數f (x)在某區間中插入若干點的函數值,作出適當的特定函數,在這些點上取已知值,在區間的其他點上用這特定函數的值作為函數f (x)的近似值,這種方法稱為插值法。如果這特定函數是多項式,就稱它為插值多項式。
1、Lagrange插值:
Lagrange插值是n次多項式插值,其成功地用構造插值基函數的 方法解決了求n次多項式插值函數問題;
★基本思想將待求的n次多項式插值函數pn(x)改寫成另一種表示方式,再利 用插值條件⑴確定其中的待定函數,從而求出插值多項式。
2、Newton插值:
Newton插值也是n次多項式插值,它提出另一種構造插值多項式的方法,與Lagrange插值相比,具有承襲性和易於變動節點的特點;
★基本思想將待求的n次插值多項式Pn(x)改寫為具有承襲性的形式,然後利用插值條件⑴確定Pn(x)的待定系數,以求出所要的插值函數。
3、Hermite插值:
Hermite插值是利用未知函數f(x)在插值節點上的函數值及導數值來構造插值多項式的,其提法為:給定n+1個互異的節點x0,x1,……,xn上的函數值和導數值
求一個2n+1次多項式H2n+1(x)滿足插值條件
H2n+1(xk)=yk
H'2n+1(xk)=y'k k=0,1,2,……,n ⒀
如上求出的H2n+1(x)稱為2n+1次Hermite插值函數,它與被插函數
一般有更好的密合度;
★基本思想
利用Lagrange插值函數的構造方法,先設定函數形式,再利
用插值條件⒀求出插值函數.
4、分段插值:
插值多項式余項公式說明插值節點越多,誤差越小,函數逐近越好,但後來人們發現,事實並非如此,例如:取被插函數,在[-5,5]上的n+1個等距節點:計算出f(xk)後得到Lagrange插值多項式Ln(x),考慮[-5,5]上的一點x=5-5/n,分別取n=2,6,10,14,18計算f(x),Ln(x)及對應的誤差Rn(x),得下表
從表中可知,隨節點個數n的增加,誤差lRn(x)l不但沒減小,反而不斷的增大.這個例子最早是由Runge研究,後來人們把這種節點加密但誤差增大的現象稱為Runge現象.出現Runge現象的原因主要是當節點n較大時,對應
的是高次插值多項式,此差得積累"淹沒"了增加節點減少的精度.Runge現象否定了用高次插值公式提高逼近精度的想法,本節的分段插值就是克服Runge現象引入的一種插值方法.
分段多項式插值的定義為
定義2: a=x0<x1<…<xn=b: 取[a,b]上n+1個節點 並給定在這些節點 上的函數值f(xR)=yR R=0,1,…,n
如果函數Φ(x)滿足條件
i) Φ(x)在[a,b]上連續
ii) Φ(xr)=yR,R =0,1,…,n
iii) Φ(x)zai 每個小區間[xR,xR+1]是m次多項式,
R=0,1,…,n-1則稱Φ(x)為f(x)在[a,b]上的分段m次插值多項式
實用中,常用次數不超過5的底次分段插值多項式,本節只介紹分段線性插值和分段三次Hermite插值,其中分段三次Hermite插值還額外要求分段插值函數Φ(x)
在節點上與被插值函數f(x)有相同的導數值,即
★基本思想將被插值函數f〔x〕的插值節點 由小到大 排序,然後每對相鄰的兩個節點為端點的區間上用m 次多項式去近似f〔x〕.
例題
例1 已知f(x)=ln(x)的函數表為:
試用線性插值和拋物線插值分別計算f(3.27)的近似值並估計相應的誤差。
解:線性插值需要兩個節點,內插比外插好因為3.27 (3.2,3.3),故選x0=3.2,x1=3.3,由n=1的lagrange插值公式,有
所以有,為保證內插對拋物線插值,選取三個節點為x0=3.2,x1=3.3,x2=3.4,由n=2的lagrange插值公式有
故有
所以線性插值計算ln3.27的誤差估計為
故拋物線插值計算ln3.27的誤差估計為:
顯然拋物線插值比線性插值精確;
5、樣條插值:
樣條插值是一種改進的分段插值。
定義 若函數在區間〖a,b〗上給定節點a=x0<x1<;…<xn=b及其函數值yj,若函數S(x)滿足
⒈ S(xj)=yj,j=0,1,2,…,n;
插值法主要用於道路橋梁,機械設計,電子信息工程等 很多工科領域的優化方法。
③ 插值法計算公式是什麼
公式就是:Y=Y1+(Y2-Y1)×(X-X1)/(X2-X1)。
通俗地講,線性內插法就是利用相似三角形的原理,來計算內插點的數據。
內插法又稱插值法。根據未知函數f(x)在某區間內若干點的函數值,作出在該若干點的函數值與f(x)值相等的特定函數來近似原函數f(x),進而可用此特定函數算出該區間內其他各點的原函數f(x)的近似值,這種方法,稱為內插法。
按特定函數的性質分,有線性內插、非線性內插等;按引數(自變數)個數分,有單內插、雙內插和三內插等。
介紹:
線性插值是指插值函數為一次多項式的插值方式,其在插值節點上的插值誤差為零。線性插值相比其他插值方式,如拋物線插值,具有簡單、方便的特點。
線性插值的幾何意義即為概述圖中利用過A點和B點的直線來近似表示原函數。線性插值可以用來近似代替原函數,也可以用來計算得到查表過程中表中沒有的數值。
④ matlab編程 數據擬合和插值。功能一:通過人機交互插入數據點坐標向量x,y 功能二:在圖形窗口
看看這個能不能幫到你:
Matlab中插值函數匯總和使用說明 :
MATLAB中的插值函數為interp1,其調用格式為:
yi= interp1(x,y,xi,'method')
其中x,y為插值點,yi為在被插值點xi處的插值結果;x,y為向量, 'method'表示採用的插值方法,
MATLAB提供的插值方法有幾種:
'nearest'是最鄰近插值, 'linear'線性插值; 'spline'三次樣條插值; 'cubic'立方插值.預設時表示線性插值。
注意:所有的插值方法都要求x是單調的,並且xi不能夠超過x的范圍。
例如:在一 天24小時內,從零點開始每間隔2小時測得的環境溫度數據分別為
12,9,9,10,18 ,24,28,27,25,20,18,15,13,
推測中午12點(即13點)時的溫度.
x=0:2:24;
y=[12 9 9 10 18 24 28 27 25 20 18
15 13];
a=13;
y1=interp1(x,y,a,'spline')
結果為: 27.8725
若要得到一天24小時的溫度曲線,則:
xi=0:1/3600:24;
yi=interp1(x,y,xi, 'spline');
plot(x,y,'o' ,xi,yi)
命令1
interp1
功能
一維數據插值(表格查找)。該命令對數據點之間計算內插值。它找出一元函數f(x)在中間點的數值。其中函數f(x)由所給數據決定。
x:原始數據點
Y:原始數據點
xi:插值點
Yi:插值點
格式
(1)yi = interp1(x,Y,xi)
返回插值向量yi,每一元素對應於參量xi,同時由向量x
與Y 的內插值決定。參量x 指定數據Y 的點。
若Y
為一矩陣,則按Y 的每列計算。yi 是階數為length(xi)*size(Y,2)的輸出矩陣。
(2)yi = interp1(Y,xi)
假定x=1:N,其中N
為向量Y 的長度,或者為矩陣Y 的行數。
(3)yi = interp1(x,Y,xi,method)
用指定的演算法計算插值:
』nearest』:最近鄰點插值,直接完成計算;
』linear』:線性插值(預設方式),直接完成計算;
』spline』:三次樣條函數插值。對於該方法,命令interp1
調用函數spline、ppval、mkpp、umkpp。這些命令生成一系列用於分段多項式操作的函數。命令spline
用它們執行三次樣條函數插值;
』pchip』:分段三次Hermite
插值。對於該方法,命令interp1 調用函數pchip,用於對向量x 與y 執行分段三次內插值。該方法保留單調性與數據的外形;
』cubic』:與』pchip』操作相同;
』v5cubic』:在MATLAB
5.0 中的三次插值。
對於超出x
范圍的xi 的分量,使用方法』nearest』、』linear』、』v5cubic』的插值演算法,相應地將返回NaN。對其他的方法,interp1
將對超出的分量執行外插值演算法。
(4)yi = interp1(x,Y,xi,method,'extrap')
對於超出x
范圍的xi 中的分量將執行特殊的外插值法extrap。
(5)yi = interp1(x,Y,xi,method,extrapval)
確定超出x
范圍的xi 中的分量的外插值extrapval,其值通常取NaN 或0。
例1
>>x = 0:10; y =
x.*sin(x);
>>xx = 0:.25:10; yy =
interp1(x,y,xx);
>>plot(x,y,'kd',xx,yy)
例2
>> year =
1900:10:2010;
>> proct = [75.995
91.972 105.711 123.203 131.669 150.697 179.323 203.212 226.505
249.633 256.344 267.893
];
>>p1995 =
interp1(year,proct,1995)
>>x =
1900:1:2010;
>>y =
interp1(year,proct,x,'pchip');
>>plot(year,proct,'o',x,y)
插值結果為:
p1995 =
252.9885
命令2
interp2
功能
二維數據內插值(表格查找)
格式
(1)ZI
= interp2(X,Y,Z,XI,YI)
返回矩陣ZI,其元素包含對應於參量XI
與YI(可以是向量、或同型矩陣) 的元素, 即Zi(i,j) ←[Xi(i,j),yi(i,j)]。用戶可以輸入行向量和列向量Xi 與Yi,此時,輸出向量Zi
與矩陣meshgrid(xi,yi)是同型的。同時取決於由輸入矩陣X、Y 與Z 確定的二維函數Z=f(X,Y)。參量X 與Y
必須是單調的,且相同的劃分格式,就像由命令meshgrid 生成的一樣。若Xi與Yi 中有在X 與Y范圍之外的點,則相應地返回nan(Not a
Number)。
(2)ZI
= interp2(Z,XI,YI)
預設地,X=1:n、Y=1:m,其中[m,n]=size(Z)。再按第一種情形進行計算。
(3)ZI
= interp2(Z,n)
作n
次遞歸計算,在Z 的每兩個元素之間插入它們的二維插值,這樣,Z 的階數將不斷增加。interp2(Z)等價於interp2(z,1)。
(4)ZI
= interp2(X,Y,Z,XI,YI,method)
用指定的演算法method
計算二維插值:
』linear』:雙線性插值演算法(預設演算法);
』nearest』:最臨近插值;
』spline』:三次樣條插值;
』cubic』:雙三次插值。
例3:
>>[X,Y] =
meshgrid(-3:.25:3);
>>Z = peaks(X,Y);
>>[XI,YI] =
meshgrid(-3:.125:3);
>>ZZ =
interp2(X,Y,Z,XI,YI);
>>surfl(X,Y,Z);hold
on;
>>surfl(XI,YI,ZZ+15)
>>axis([-3 3 -3 3 -5
20]);shading flat
>>hold
off
例4:
>>years =
1950:10:1990;
>>service =
10:10:30;
>>wage = [150.697
199.592 187.625
179.323 195.072 250.287
203.212 179.092 322.767
226.505 153.706 426.730
249.633 120.281
598.243];
>>w =
interp2(service,years,wage,15,1975)
插值結果為:
w =
190.6288
命令3
interp3
功能
三維數據插值(查表)
格式
(1)VI
= interp3(X,Y,Z,V,XI,YI,ZI)
找出由參量X,Y,Z決定的三元函數V=V(X,Y,Z)在點(XI,YI,ZI)的值。參量XI,YI,ZI
是同型陣列或向量。若向量參量XI,YI,ZI 是不同長度,不同方向(行或列)的向量,這時輸出參量VI 與Y1,Y2,Y3 為同型矩陣。其中Y1,Y2,Y3
為用命令meshgrid(XI,YI,ZI)生成的同型陣列。若插值點(XI,YI,ZI)中有位於點(X,Y,Z)之外的點,則相應地返回特殊變數值NaN。
(2)VI
= interp3(V,XI,YI,ZI)
預設地,
X=1:N ,Y=1:M, Z=1:P ,其中,[M,N,P]=size(V),再按上面的情形計算。
(3)VI
= interp3(V,n)
作n
次遞歸計算,在V 的每兩個元素之間插入它們的三維插值。這樣,V 的階數將不斷增加。interp3(V)等價於interp3(V,1)。
(4)VI
= interp3(......,method) %用指定的演算法method 作插值計算:
『linear』:線性插值(預設演算法);
『cubic』:三次插值;
『spline』:三次樣條插值;
『nearest』:最鄰近插值。
說明
在所有的演算法中,都要求X,Y,Z 是單調且有相同的格點形式。當X,Y,Z
是等距且單調時,用演算法』*linear』,』*cubic』,』*nearest』,可得到快速插值。
例5
>>[x,y,z,v] =
flow(20);
>>[xx,yy,zz] =
meshgrid(.1:.25:10, -3:.25:3, -3:.25:3);
>>vv =
interp3(x,y,z,v,xx,yy,zz);
>>slice(xx,yy,zz,vv,[6
9.5],[1 2],[-2 .2]); shading interp;colormap
cool
命令4
interpft
功能
用快速Fourier 演算法作一維插值
格式
(1)y
= interpft(x,n)
返回包含周期函數x
在重采樣的n 個等距的點的插值y。若length(x)=m,且x 有采樣間隔dx,則新的y 的采樣間隔dy=dx*m/n。注意的是必須n≥m。若x
為一矩陣,則按x 的列進行計算。返回的矩陣y 有與x 相同的列數,但有n 行。
(2)y
= interpft(x,n,dim)
沿著指定的方向dim
進行計算
命令5
griddata
功能
數據格點
格式
(1)ZI
= griddata(x,y,z,XI,YI)
用二元函數z=f(x,y)的曲面擬合有不規則的數據向量x,y,z。griddata
將返回曲面z 在點(XI,YI)處的插值。曲面總是經過這些數據點(x,y,z)的。輸入參量(XI,YI)通常是規則的格點(像用命令meshgrid
生成的一樣)。XI 可以是一行向量,這時XI 指定一有常數列向量的矩陣。類似地,YI 可以是一列向量,它指定一有常數行向量的矩陣。
(2)[XI,YI,ZI]
= griddata(x,y,z,xi,yi)
返回的矩陣ZI
含義同上,同時,返回的矩陣XI,YI 是由行向量xi 與列向量yi 用命令meshgrid 生成的。
(3)[XI,YI,ZI]
= griddata(.......,method)
用指定的演算法method
計算:
『linear』:基於三角形的線性插值(預設演算法);
『cubic』:
基於三角形的三次插值;
『nearest』:最鄰近插值法;
『v4』:MATLAB
4 中的griddata 演算法。
命令6
spline
功能
三次樣條數據插值
格式
(1)yy
= spline(x,y,xx)
對於給定的離散的測量數據x,y(稱為斷點),要尋找一個三項多項式y
= p(x) ,以逼近每對數據(x,y)點間的曲線。過兩點(xi, yi) 和(xi+1, yi+1)
只能確定一條直線,而通過一點的三次多項式曲線有無窮多條。為使通過中間斷點的三次多項式曲線具有唯一性,要增加兩個條件(因為三次多項式有4
個系數):
a.三次多項式在點(xi,
yi) 處有: p¢i(xi) = p¢i(xi) ;
b.三次多項式在點(xi+1,
yi+1) 處有: p¢i(xi+1) = pi¢(xi+1) ;
c.p(x)在點(xi,
yi) 處的斜率是連續的(為了使三次多項式具有良好的解析性,加上的條件);
d.p(x)在點(xi,
yi) 處的曲率是連續的;
對於第一個和最後一個多項式,人為地規定如下條件:
①.
p¢1¢(x) = p¢2¢(x)
②.
p¢n¢(x) = p¢n¢-1(x)
上述兩個條件稱為非結點(not-a-knot)條件。綜合上述內容,可知對數據擬合的三次樣條函數p(x)是一個分段的三次多項式:
ï
ïî
ï
ïí
ì
£
£
£
£
£
£
=
n
n n+1
2
2 3
1
1 2
p
(x) x x x
p
(x) x x x
p
(x) x x x
p(x)
L
L L L
其中每段pi(x)
都是三次多項式。
該命令用三次樣條插值計算出由向量x
與y 確定的一元函數y=f(x)在點xx 處的值。若參量y 是一矩陣,則以y 的每一列和x 配對,再分別計算由它們確定的函數在點xx 處的值。則yy
是一階數為length(xx)*size(y,2)的矩陣。
(2)pp
= spline(x,y)
返回由向量x
與y 確定的分段樣條多項式的系數矩陣pp,它可用於命令ppval、unmkpp 的計算。
例6
對離散地分布在y=exp(x)sin(x)函數曲線上的數據點進行樣條插值計算:
>>x = [0 2 4 5 8 12 12.8
17.2 19.9 20]; y = exp(x).*sin(x);
>>xx = 0:.25:20;
>>yy =
spline(x,y,xx);
>>plot(x,y,'o',xx,yy)
命令7
interpn
功能
n 維數據插值(查表)
格式
(1)VI
= interpn(X1,X2,,,Xn,V,Y1,Y2,?,Yn) %返回由參量X1,X2,…,Xn,V 確定的n
元函數V=V(X1,X2,…,Xn)在點(Y1,Y2,…,Yn)處的插值。參量Y1,Y2,…,Yn 是同型的矩陣或向量。若Y1,Y2,…,Yn
是向量,則可以
是不同長度,不同方向(行或列)的向量。它們將通過命令ndgrid生成同型的矩陣,
再作計算。若點(Y1,Y2,…,Yn) 中有位於點(X1,X2,…,Xn)之外的點,則相應地返回特殊變數NaN。
VI
= interpn(V,Y1,Y2,?,Yn) %預設地,X1=1:size(V,1),X2=1:size(V,2),… ,
Xn=1:size(V,n),再按上面的情形計算。
VI
= interpn(V,ntimes) %作ntimes 次遞歸計算,在V 的每兩個元素之間插入它們的n 維插值。這樣,V
的階數將不斷增加。interpn(V)
等價於interpn(V,
1)。
VI
= interpn(?,method) %用指定的演算法method 計算:
『linear』:線性插值(預設演算法);
『cubic』:三次插值;
『spline』:三次樣條插值法;
『nearest』:最鄰近插值演算法。
命令8
meshgrid
功能
生成用於畫三維圖形的矩陣數據。
格式
[X,Y] = meshgrid(x,y) 將由向量x,y(可以是不同方向的)指定的區域[min(x),max(x) , min(y) , max(y)]
用直線x=x(i),y=y(j) ( i=1,2,…,length(x)
,j=1,2,…,length(y))進行劃分。這樣,得到了length(x)*length(y)個點,
這些點的橫坐標用矩陣X
表示,X 的每個行向量與向量x 相同;這些點的縱坐標用矩陣Y 表示,Y 的每個列向量與向量y 相同。其中X,Y可用於計算二元函數z=f(x,y)與三維圖形中xy
平面矩形定義域的劃分或
曲面作圖。
[X,Y]
= meshgrid(x) %等價於[X,Y]=meshgrid(x,x)。
[X,Y,Z]
= meshgrid(x,y,z) %生成三維陣列X,Y,Z,用於計算三元函數v=f(x,y,z)或三維容積圖。
例7
[X,Y] =
meshgrid(1:3,10:14)
計算結果為:
X =
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
Y =
10 10 10
11 11 11
12 12 12
13 13 13
14 14
14
命令9
ndgrid
功能
生成用於多維函數計算或多維插值用的陣列
格式
[X1,X2,…,Xn] = ndgrid(x1,x2,…,xn) %把通過向量x1,x2,x3…,xn 指定的區域轉換為數組x1,x2,x3,…,xn
。這樣, 得到了 length(x1)*length(x2)*…*length(xn)個點,這些點的第一維坐標用矩陣X1 表
示,X1
的每個第一維向量與向量x1 相同;這些點的第二維坐標用矩陣X2 表示,X2 的每個第二維向量與向量x2 相同;如此等等。
其中X1,X2,…,Xn
可用於計算多元函數y=f(x1,x2,…,xn)以及多維插值命令用到的陣列。
[X1,X2,…,Xn]
= ndgrid(x) %等價於[X1,X2,…,Xn] = ndgrid(x,x,…,x)
命令10
table1
功能
一維查表
格式
Y = table1(TAB,X0) %返回用表格矩陣TAB 中的行線性插值元素,對X0(TAB的第一列查找X0)進行線性插值得到的結果Y。矩陣TAB
是第一列包含
關鍵值,而其他列包含數據的矩陣。X0
中的每一元素將相應地返回一線性插值行向量。矩陣TAB 的第一列必須是單調的。
例8
>>tab = [(1:4)'
hilb(4)]
>>y = table1(tab,[1 2.3
3.6 4])
查表結果為:
>>tab = [(1:4)'
hilb(4)]
>>y = table1(tab,[1 2.3
3.6 4])
⑤ MATLAB中三種差值法怎樣編程
http://wenku..com/view/4b8beb2dcfc789eb172dc896.html?st=1
http://wenku..com/view/49a35f050740be1e650e9aac.html?st=1
http://wenku..com/view/97931e353968011ca30091ac.html
http://wenku..com/view/702346f8910ef12d2af9e7ad.html
⑥ matlab 的demosaic函數是用什麼插值演算法的
命令 interp1功能 一維數據插值(表格查找)。
該命令對數據點之間計算內插值。它找出一元函數f(x)在中間點的數值。
其中函數f(x)由所給數據決定:
x:原始數據點
Y:原始數據點
xi:插值點
Yi:插值點
格式
(1)yi = interp1(x,Y,xi)
返回插值向量yi,每一元素對應於參量xi,同時由向量x 與Y 的內插值決定。參量x 指定數據Y 的點。
若Y 為一矩陣,則按Y 的每列計算。yi 是階數為length(xi)*size(Y,2)的輸出矩陣。
(2)yi = interp1(Y,xi)
假定x=1:N,其中N 為向量Y 的長度,或者為矩陣Y 的行數。
(3)yi = interp1(x,Y,xi,method)
用指定的演算法計算插值:
』nearest』:最近鄰點插值,直接完成計算;
』linear』:線性插值(預設方式),直接完成計算;
』spline』:三次樣條函數插值。對於該方法,命令interp1 調用函數spline、ppval、mkpp、umkpp。這些命令生成一系列用於分段多項式操作的函數。命令spline 用它們執行三次樣條函數插值;
』pchip』:分段三次Hermite 插值。對於該方法,命令interp1 調用函數pchip,用於對向量x 與y 執行分段三次內插值。該方法保留單調性與數據的外形;
』cubic』:與』pchip』操作相同;
』v5cubic』:在MATLAB 5.0 中的三次插值。
對於超出x 范圍的xi 的分量,使用方法』nearest』、』linear』、』v5cubic』的插值演算法,相應地將返回NaN。對其他的方法,interp1 將對超出的分量執行外插值演算法。
(4)yi = interp1(x,Y,xi,method,'extrap')
對於超出x 范圍的xi 中的分量將執行特殊的外插值法extrap。
(5)yi = interp1(x,Y,xi,method,extrapval)
確定超出x 范圍的xi 中的分量的外插值extrapval,其值通常取NaN 或0。
例1
>>x = 0:10; y = x.*sin(x);
>>xx = 0:.25:10; yy = interp1(x,y,xx);
>>plot(x,y,'kd',xx,yy)
例2
>> year = 1900:10:2010;
>> proct = [75.995 91.972 105.711 123.203 131.669 150.697 179.323 203.212 226.505
249.633 256.344 267.893 ];
>>p1995 = interp1(year,proct,1995)
>>x = 1900:1:2010;
>>y = interp1(year,proct,x,'pchip');
>>plot(year,proct,'o',x,y)
插值結果為:
p1995 =
252.9885
⑦ 如何用matlab實現插值演算法
實例展示
1
先看一個實例,最後再來說明一維插值在matlab中的用法。實例如下圖,用13個節點作三種插值,並比較結果。
2
首先啟動matlab,選擇編輯器,再新建一個命令文件。
3
然後,在編輯器窗口中輸入本題的代碼。如下圖所示。並保存,此處命名為yiwei。
4
最後再命令行窗口處輸入yiwei,並敲入鍵盤上的enter建。最終得到的結果是插值與原來的13個數據點之間的比較圖,可以看出結果很好。
END
命令解釋
1
通過上面的例子,也知道了matlab進行一維插值的命令是interp1.
該命令的形式為y1=interp1(x0,y0,x1,'method').
功能:根據已知的數據(x0,y0),用method方法進行插值,然後計算x1對應的函數值y1.
2
其中的參數及其注意事項。
x0,y0是已知的數據向量,其中x應以升序或者降序排列,x1是插值點的自變數坐標向量;method是用來選擇插值演算法的,它可以取:『linear』(線性插值)、『cubic』(三次多項式插值)、『nearst』(最近插值)、『spline』(三次樣條插值)。
⑧ matlab中interp1的用法,一維線性插值怎麼插得,插幾個linear和nearest有什麼不同
是多少你執行一下就知道了。
linear是線性插值,採用已知數據兩點之間連線的方式,根據要插值的點在線上的位置計算插值結果,這是比較常用的。
nearest是最近點插值,直接找到最近的數據點,用該點的值直接代替,不太常用。
⑨ 請列一下插值法的計算公式,並舉個例子。
舉個例子。
2008年1月1日甲公司購入乙公司當日發行的面值600 000元、期限3年、票面利率8%、每年年末付息且到期還本的債券作為可供出售金融資產核算,實際支付的購買價款為620 000元。
則甲公司2008年12月31日因該可供出售金融資產應確認的投資收益是()元。(已知PVA(7%,3)=2.2463,PVA(6%,3)=2.673,PV(7%,3)=0.8163,PV(6%,3)=0.8396)
題目未給出實際利率,需要先計算出實際利率。600 000×PV(r,3)+600 000×8%×PVA(r,3)=620 000,採用內插法計算,得出r=6.35%。甲公司2008年12月31日因該可供出售金融資產應確認的投資收益=620 000×6.35%=39 370(元)。
插值法計算過程如下:
已知PVA(7%,3)=2.2463,PVA(6%,3)=2.673,PV(7%,3)=0.8163,PV(6%,3)=0.8396)
600 000×PV(r,3)+600 000×8%×PVA(r,3)=620 000
R=6%時
600000*0.8396+600000*8%*2.673=503760+128304=632064
R=7%時
600000*0.8163+600000*8%*2.2463=489780+107823=597603
6% 632064
r 620000
7% 597603
(6%-7%)/(6%-R)=(632064-597603)/(632064-620000)
解得R=6.35%
注意上面的式子的數字順序可以變的,但一定要對應。如可以為
(R-7%)/(7%-6%)=(620000-597603)/(597603-632064)也是可以的,當然還有其他的順序。"
(9)一維插值演算法擴展閱讀:
若函數f(x)在自變數x一些離散值所對應的函數值為已知,則可以作一個適當的特定函數p(x),使得p(x)在這些離散值所取的函數值,就是f(x)的已知值。從而可以用p(x)來估計f(x)在這些離散值之間的自變數所對應的函數值,這種方法稱為插值法。
如果只需要求出某一個x所對應的函數值,可以用「圖解內插」。它利用實驗數據提供要畫的簡單曲線的形狀,然後調整它,使得盡量靠近這些點。
如果還要求出因變數p(x)的表達式,這就要用「表格內插」。通常把近似函數p(x)取為多項式(p(x)稱為插值多項式),最簡單的是取p(x)為一次式,即線性插值法。
在表格內插時,使用差分法或待定系數法(此時可以利用拉格朗日公式)。在數學、天文學中,插值法都有廣泛的應用。