MATLAB中三種差值法怎樣程式設計

時間 2021-08-11 18:13:37

1樓:宇逸

2樓:匿名使用者

命令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;

>> product = [75.995 91.972 105.

711 123.203 131.669 150.

697 179.323 203.212 226.

505249.633 256.344 267.893 ];

>>p1995 = interp1(year,product,1995)

>>x = 1900:1:2010;

>>y = interp1(year,product,x,'pchip');

>>plot(year,product,'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])

複製**

函式的三種表示法

函式的表示方法有,解析式法 列表法 影象法,此外還有語言敘述法。解析式法 用含有數學關係的等式來表示兩個變數之間的函式關係的方法叫做解析式法。這種方法的優點是能簡明 準確 清楚地表示出函式與自變數之間的數量關係 缺點是求對應值時往往要經過較複雜的運算,而且在實際問題中有的函式關係不一定能用表示式表示...

資產評估中三種貶值之間聯絡,資產評估中成本法的基本原理是什麼?

苦熬cpa的貓 簡單來說,實體性貶值是有形損耗,比如破損等 功能性貶值是裝置本身的功能落後或者原有技術成熟造成的,比如螺桿壓縮技術的推廣造成的螺桿空壓機 的下降 經濟型貶值是外部原因造成的,比如建築行業不景氣造成的工程機械交易 下降。就一般意義上講,成本法的運用涉及四個基本要素,即資產的重置成本 資...

火影忍者中三中瞳眼是那三種?詳細

宇志波一族的寫輪眼,日向一族的白眼,還有六道輪迴眼,就這三種,希望能幫到你喵 寫輪眼 白眼 輪迴眼 火影忍者中的3種眼睛是哪3種啊?宇智波一族的 寫輪眼 日向一族的 白眼 輪迴仙人一族的 輪迴眼 ok?給點分吧?寫輪眼,輪迴眼,白眼 白眼,日向一族的血繼承界,寧次 雛田都有這種眼。請問火影忍者中的三...