国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MATLAB 之 數(shù)據(jù)插值、曲線擬合和數(shù)值微分

這篇具有很好參考價(jià)值的文章主要介紹了MATLAB 之 數(shù)據(jù)插值、曲線擬合和數(shù)值微分。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、數(shù)據(jù)插值

  • 在工程測(cè)量和科學(xué)實(shí)驗(yàn)中,所得到的數(shù)據(jù)通常都是離散的。如果要得到這些離散點(diǎn)以外的其他點(diǎn)的數(shù)值,就需要根據(jù)這些已知數(shù)據(jù)進(jìn)行插值。例如,測(cè)量得 n n n 個(gè)點(diǎn)的數(shù)據(jù)為 ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x n , y n ) (x_{1},y_{1}),(x_{2},y_{2}),\dots ,(x_{n},y_{n}) (x1?,y1?),(x2?,y2?),,(xn?,yn?),這些數(shù)據(jù)點(diǎn)反映了一個(gè)函數(shù)關(guān)系 y = f ( x ) y=f(x) y=f(x),然而并不知道 f ( x ) f(x) f(x) 的解析式。
  • 數(shù)據(jù)插值的任務(wù)就是根據(jù)上述條件構(gòu)造一個(gè)函數(shù) y = g ( x ) y=g(x) y=g(x), 使得在 x ( i = 1 , 2 , . . . n ) x(i=1, 2, ... n) x(i=1,2,...n),有 g ( x ) = f ( x ) g(x)=f(x) g(x)=f(x),且在兩個(gè)相鄰的采樣點(diǎn) ( x i , x i + 1 ) ( i = 1 , 2 , … , n ? 1 ) (x_{i},x_{i+1})(i=1,2,\dots ,n-1) (xi?,xi+1?)(i=1,2,,n?1) 之間, g ( x ) g(x) g(x) 光滑過渡。如果被插值函數(shù) f ( x ) f(x) f(x) 是光滑的,并且采樣點(diǎn)足夠密,一般在采樣區(qū)間內(nèi), f ( x ) f(x) f(x) g ( x ) g(x) g(x) 比較接近。插值函數(shù) g ( x ) g(x) g(x) 一般由線性函數(shù)、多項(xiàng)式、樣條函數(shù)或這些函數(shù)的分段函數(shù)充當(dāng)。
  • 根據(jù)被插值函數(shù)的自變量個(gè)數(shù),插值問題分為一維插值、 二維插值和多維插值等;根據(jù)選用的插值方法,插值問題又分為線性插值、多項(xiàng)式插值和樣條插值等。MATLAB 提供了一維、二維、 N N N 維數(shù)據(jù)插值函數(shù) interp1interp2interpn,以及 3 次埃爾米特(Hermite)插值函數(shù) pchip 和 3 次樣條插值函數(shù) spline 等。

1. 一維數(shù)據(jù)插值

  • 如果被插值函數(shù)是一個(gè)單變量函數(shù),則數(shù)據(jù)插值問題稱為一維插值。一維插值采用的方法有線性插值、最近點(diǎn)插值、3 次埃爾米特插值和 3 次樣條插值。在 MATLAB 中,實(shí)現(xiàn)這些插值的函數(shù)是 interp1,其調(diào)用格式如下:
    Y1=interp1(X,Y,X1,method)
  • 函數(shù)根據(jù) X 、 Y X、Y X、Y 的值,計(jì)算函數(shù)在 X 1 X1 X1 處的值。其中, X 、 Y X、Y X、Y 是兩個(gè)等長(zhǎng)的已知向量,分別描述采樣點(diǎn)和采樣值。若同一個(gè)采樣點(diǎn)有多種采樣值,則 Y Y Y 可以為矩陣, Y Y Y 的每一列對(duì)應(yīng)一組采樣。 X 1 X1 X1 是一個(gè)向量或標(biāo)量,描述欲插值的點(diǎn), Y 1 Y1 Y1 是一個(gè)與 X 1 X1 X1 等長(zhǎng)的插值結(jié)果。method 用于指定插值方法,允許的取值有以下幾種。
  • (1) 'linear':線性插值。線性插值是默認(rèn)的插值方法,它是把與插值點(diǎn)靠近的兩個(gè)數(shù)據(jù)點(diǎn)用直線連接,然后在直線上選取對(duì)應(yīng)插值點(diǎn)的數(shù)據(jù)。
  • (2) 'nearest':最近點(diǎn)插值。根據(jù)插值點(diǎn)與已知數(shù)據(jù)點(diǎn)的遠(yuǎn)近程度進(jìn)行插值。插值點(diǎn)優(yōu)先選擇較近的數(shù)據(jù)點(diǎn)進(jìn)行插值操作。
  • (3) 'pchip':分段 3 次埃爾米特插值。分段三次埃爾米特插值采用分段三次多項(xiàng)式,除滿足插值條件,還需要滿足在若干節(jié)點(diǎn)處的一階導(dǎo)數(shù)也相等,從而提高了插值函數(shù)的光滑性。MATLAB 中有一個(gè)專門的 3 次埃爾米特插值函數(shù) pchip(X,Y,X1),其功能及使用方法與函數(shù) interpl(X,Y,X,'pchip') 相同。
  • (4) 'spline':3 次樣條插值。所謂 3 次樣條插值,是指在每個(gè)分段(子區(qū)間)內(nèi)構(gòu)造一個(gè) 3 次多項(xiàng)式,使其插值函數(shù)除滿足插值條件外,還要求在各節(jié)點(diǎn)處具有連續(xù)的一階和二階導(dǎo)數(shù),從而保證節(jié)點(diǎn)處光滑。MATLAB 中有一個(gè)專門的 3 次樣條插值函數(shù) spline(X,Y,X1),其功能及使用方法與函數(shù) interp1(X,Y,Xl,'spline') 相同。
  • 注意:對(duì)于超出 X 范圍的插值點(diǎn),使用 “l(fā)inear” 和 “nearest” 插值方法,會(huì)給出 “NaN” 錯(cuò)誤。對(duì)于其他的方法,將對(duì)超出范圍的插值點(diǎn)執(zhí)行外插值算法。
  • 例如,以下概率積分的數(shù)據(jù)如下表所示,我們用不同的插值方法計(jì)算 f ( 0.472 ) f(0.472) f(0.472)。 f ( x ) = 2 π ∫ 0 x e ? x 2 d x f(x)=\frac{2}{\sqrt{\pi}}\int_{0}^{x}e^{-x^{2}}\mathrmn5n3t3zx f(x)=π ?2?0x?e?x2dx
x x x f ( x ) f(x) f(x)
0.46 0.4846555
0.47 0.4937542
0.48 0.5027498
0.49 0.5116683
  • 這是一個(gè)一維插值問題,程序如下:
>> x=0.46:0.01:0.49;  %給出x
>> f=[0.4846555,0.4937542,0.5027498,0.5116683];  %給出f(x)
>> format long  %顯示小數(shù)點(diǎn)后16>> interp1(x,f,0.472)  %用默認(rèn)方法,即線性插值計(jì)算f(0.472)

ans =

   0.495553320000000

>>  interp1(x,f,0.472,'nearest')  %用最近點(diǎn)插值計(jì)算f(0.472)

ans =

   0.493754200000000

>> interp1(x,f,0.472,'pchip')  %3次埃爾米特計(jì)算f(0.472)

ans =

   0.495561119712056

>> interp1(x,f,0.472,'spline')  %3次樣條插值計(jì)算f(0.472)

ans =

   0.495560736000000

>> format short  %小數(shù)點(diǎn)后顯示4
  • 例中,3 次埃爾米特和 3 次樣條插值的插值結(jié)果優(yōu)于最近點(diǎn)插值方法和線性插值方法,但插值方法的好壞還依賴于被插值函數(shù),沒有一種對(duì) 所有函數(shù)都是最好的插值方法。
  • 例如,某檢測(cè)參數(shù) f f f 隨時(shí)間 t t t 的采樣結(jié)果如下表所示,我們用數(shù)據(jù)插值法計(jì)算 t = 2 , 12 , 22 , 32 , 42 , 52 t=2,12,22,32,42,52 t=2,12,22,32,42,52 時(shí)的 f f f 值。
t t t f f f t t t f f f
0 3.1025 5 2.256
10 879.5 15 2968.8
20 2968.8 25 4136.2
30 5237.9 35 6152.7
40 6725.3 45 6848.3
50 6403.5 55 6824.7
60 7328.5 65 7857.6
  • 這是一個(gè)一維數(shù)據(jù)插值問題,程序如下:
>> T=0:5:65;  %給出T
>> X=2:10:52;  %給出X
>> F=[3.2015,2.2560,879.5,1835.9,2968.8,4136.2,5237.9,6152.7,...
    6725.3,6848.3,6403.5,6824.7,7328.5,7857.6];  %給出F(x)
>> F1=interp1(T,F,X)  %用線性插值方法插值

F1 =

   1.0e+03 *15

   0.002823300000000   1.262060000000000   3.435760000000000   5.603820000000000   6.7745000000000006

   6.571980000000000

>> F2=interp1(T,F,X,'nearest')  %用最近點(diǎn)插值法插值


F2 =

   1.0e+03 *15

   0.003201500000000   0.879500000000000   2.968800000000000   5.237900000000000   6.7253000000000006

   6.403500000000000

>> F3=interp1(T,F,X,'pchip')  %3次埃爾米特插值方法插值

F3 =

   1.0e+03 *15

   0.002460228000000   1.248358437730487   3.436483654858926   5.636234122067274   6.7977561242093166

   6.507716445924324

>> F4=interp1(T,F,X,'spline')  %3次樣條插值方法插值

F4 =

   1.0e+03 *15

  -0.170219570210629   1.256002190473428   3.439603968838626   5.637043773267335   6.8592912569040606

   6.481654623389509

  • 這里小數(shù)點(diǎn)后顯示 16 位是因?yàn)樯洗问褂昧?format long 代碼,但未執(zhí)行 format short 代碼。

2. 二維數(shù)據(jù)插值

  • 當(dāng)函數(shù)依賴于兩個(gè)自變量變化時(shí),其采樣點(diǎn)就應(yīng)該是一個(gè)由這兩個(gè)參數(shù)組成的一個(gè)平面區(qū)域,插值函數(shù)也是一個(gè)二維函數(shù)。對(duì)依賴于兩個(gè)參數(shù)的函數(shù)進(jìn)行插值的問題稱為二維插值問題。
  • 同樣,在 MATLAB 中,提供了解決二維插值問題的函數(shù) interp2,其調(diào)用格式如下:
    Z1=interp2(X,Y,Z,X1,Y1,method)
  • 其中, X 、 Y X、Y X、Y 是兩個(gè)向量,分別描述兩個(gè)參數(shù)的采樣點(diǎn), Z Z Z 是與參數(shù)采樣點(diǎn)對(duì)應(yīng)的函數(shù)值, X 1 、 Y 1 X1、Y1 X1、Y1 是兩個(gè)向量或標(biāo)量,描述欲插值的點(diǎn)。 Z 1 Z1 Z1 是根據(jù)相應(yīng)的插值方法得到的插值結(jié)果。
  • method 的取值與一維插值函數(shù)相同,但二維插值不支持 'pchip' 方法。 X 、 Y 、 Z X、Y、Z X、Y、Z 也可以是矩陣形式。同樣,對(duì)于超出 X 、 Y X、Y X、Y 范圍的插值點(diǎn),使用 'linear''nearest' 插值方法,會(huì)給出 NaN 錯(cuò)誤。對(duì)于 'spline' 方法,將對(duì)超出范圍的插值點(diǎn)執(zhí)行外插值算法。
  • 例如,設(shè) z = x 2 + y 2 z=x^{2}+y^{2} z=x2+y2,我們對(duì) z z z 函數(shù)在 [ 0 , 1 ] × [ 0 , 2 ] [0,1]×[0,2] [01]×[0,2] 區(qū)域內(nèi)進(jìn)行插值。
  • 程序如下:
>> x=0:0.1:1;
>> y=0:0.2:2;
>> [X,Y]=meshgrid(x,y);  %產(chǎn)生自變量網(wǎng)絡(luò)坐標(biāo)
>> Z=X.^2+Y.^2;  %求對(duì)應(yīng)的函數(shù)值
>> interp2(x,y,Z,0.5,0.5)  %(0.5.0.5)點(diǎn)插值

ans =

    0.5100

>> interp2(x,y,Z,[0.5,0.6],0.4)  %(0.5.0.4)點(diǎn)和(0.6,0.4)點(diǎn)插值

ans =

    0.4100    0.5200

>> interp2(x,y,Z,[0.5,0.6],[0.4,0.5])  %(0.5.0.4)點(diǎn)和(0.6,0.5)點(diǎn)插值

ans =

    0.4100    0.6200

%(0.5.0.4),(0.6.0.4),(0.5.0.5)(0.6,0.5)各點(diǎn)插值
>> interp2(x,y,Z,[0.5 0.6]',[0.4 0.5])  

ans =

    0.4100    0.5200
    0.5100    0.6200

  • 如果想提高插值精度,可選擇插值方法為 'spline',對(duì)于本例,精度可以提高。輸入如下程序:
>> interp2(x,y,Z,[0.5 0.6]',[0.4 0.5],'spline')

ans =

    0.4100    0.5200
    0.5000    0.6100

  • 例如,某實(shí)驗(yàn)對(duì)一根長(zhǎng) 10 m 的鋼軌進(jìn)行熱源的溫度傳播測(cè)試。用 d d d 表示測(cè)量點(diǎn)距離(m),用 t t t 表示測(cè)量時(shí)間(s),用 c c c 表示測(cè)得各點(diǎn)的溫度(℃),測(cè)量結(jié)果如下表所示。我們?cè)囉镁€性插值求出在一分鐘內(nèi)每隔 20 s、鋼軌每隔 2 m 處的溫度。
d d d=0 d d d=2.5 d d d=5 d d d=7.5 d d d=10
t t t=0 95 14 0 0 0
t t t=30 88 48 32 12 6
t t t=60 67 64 54 48 41
  • 程序如下:
>> d=0:2.5:10;
>> t=(0:30:60)';
>> c=[95,14,0,0,0;88,48,32,12,6;67,64,54,48,41];
>> di=0:2:10;
>> ti=(0:20:60)';
>> ci=interp2(d,t,c,di,ti)
  • 程序運(yùn)行結(jié)果如下:
ci =

   95.0000   30.2000    5.6000         0         0         0
   90.3333   47.4000   27.4667   16.0000    7.2000    4.0000
   81.0000   58.8667   44.9333   33.2000   22.7333   17.6667
   67.0000   64.6000   58.0000   51.6000   46.6000   41.0000

  • 下圖是根據(jù)插值結(jié)果 [ d i , t i , c i ] [d_{i},t_{i},c_{i}] [di?,ti?,ci?],用繪圖函數(shù) surf(di,ti,ci) 繪制的鋼軌溫度分布圖。如果加密插值點(diǎn),則繪制的分布圖更理想。

MATLAB 之 數(shù)據(jù)插值、曲線擬合和數(shù)值微分

二、曲線擬合

1. 曲線擬合原理

  • 與數(shù)據(jù)插值類似,曲線擬合的目的也是用一個(gè)較簡(jiǎn)單的函數(shù)去逼近一個(gè)復(fù)雜的或未知的函數(shù),所依據(jù)的條件都是在一個(gè)區(qū)間或一個(gè)區(qū)域上的有限個(gè)采樣點(diǎn)的函數(shù)值。
  • 數(shù)據(jù)插值要求逼近函數(shù)在采樣點(diǎn)與被逼近函數(shù)相等,但由于實(shí)驗(yàn)或測(cè)量中的誤差,所獲得的數(shù)據(jù)不一定準(zhǔn)確。在這種情況下,如果強(qiáng)求逼近函數(shù)通過各采樣插值點(diǎn),顯然是不夠合理的。
  • 為此,構(gòu)造函數(shù) y = g ( x ) y=g(x) y=g(x) 去逼近 f ( x ) f(x) f(x),這里不要求曲線 g ( x ) g(x) g(x) 嚴(yán)格通過采樣點(diǎn),但希望 g ( x ) g(x) g(x) 能盡量地靠近這些點(diǎn),就是使誤差 δ i = g ( x ) ? f ( x ) ( i = 1 , 2 , … , n ) δ_{i}=g(x)-f(x) (i=1, 2,…,n) δi?=g(x)?f(x)(i=1,2,n) 在某種意義下達(dá)到最小。
  • MATLAB 曲線擬合的最優(yōu)標(biāo)準(zhǔn)是采用常見的最小二乘原理,所構(gòu)造的 g ( x ) g(x) g(x) 是一個(gè)次數(shù)小于插值節(jié)點(diǎn)個(gè)數(shù)的多項(xiàng)式。
  • 我們假設(shè)測(cè)得 n n n 個(gè)離散數(shù)據(jù)點(diǎn) ( x i , y i ) ( i = 1 , 2 , . . . n ) (x_{i}, y_{i})(i=1, 2,... n) (xi?,yi?)(i=1,2...n),欲構(gòu)造一個(gè) m ( m ≤ n ) m(m≤n) m(mn) 次多項(xiàng)式 p ( x ) p(x) p(x) p ( x ) = a m x m + a m ? 1 x m ? 1 + … + a 1 x + a 0 p(x)=a_{m}x^{m}+a_{m-1}x^{m-1}+…+a_{1}x+a_{0} p(x)=am?xm+am?1?xm?1++a1?x+a0?
  • 所謂曲線擬合的最小二乘原理,就是使上述擬合多項(xiàng)式在各節(jié)點(diǎn)處的偏差 p ( x i ) ? y i p(x_{i})-y_{i} p(xi?)?yi? 的平方和 ∑ i = 1 n ( p ( x i ) ? y i ) 2 \sum_{i=1}^{n}(p(x_{i})-y_{i})^{2} i=1n?(p(xi?)?yi?)2 達(dá)到最小。數(shù)學(xué)上已經(jīng)證明,上述最小二乘逼近問題的解總是確定的。

2. 曲線擬合的實(shí)現(xiàn)

  • 采用最小二乘法進(jìn)行曲線擬合時(shí),實(shí)際上是求一個(gè)系數(shù)向量,該系數(shù)向量是一個(gè)多項(xiàng)式的系數(shù)。
  • 在 MATLAB 中,用 polyfit 函數(shù)來求的最小二乘擬合多項(xiàng)式的系數(shù),再用 polyval 函數(shù)按所得多項(xiàng)式計(jì)算所給出的點(diǎn)上的函數(shù)近似值。
  • polyfit 函數(shù)的調(diào)用格式如下:
    p=polyfit(X,Y,m)
    [P,S]=polyfit(X,Y,m)
    [P,S,mu]=polyfit(X,Y,m)
  • 函數(shù)根據(jù)采樣點(diǎn) X X X 和采樣點(diǎn)函數(shù)值 Y Y Y,產(chǎn)生一個(gè) m m m 次多項(xiàng)式 P P P 及其在采樣點(diǎn)的誤差向量 S S S
  • 其中 X 、 Y X、Y X、Y 是兩個(gè)等長(zhǎng)的向量, P P P 是一個(gè)長(zhǎng)度為 m + 1 m+1 m+1 的向量, P P P 的元素為多項(xiàng)式系數(shù)。mu 是一個(gè)二元向量,mu(1) 是函數(shù) mean(X) 求向量 X X X 的平均值,而 mu(2) 是函數(shù) std(X) 求向量 X X X 的方差。
  • 可以用 polyval 函數(shù)按所得的多項(xiàng)式計(jì)算 X X X 各點(diǎn)上多項(xiàng)式的值。
  • 例如,我們用一個(gè) 3 次多項(xiàng)式在區(qū)間 [ 0 , 2 π ] [0,2\pi] [0,2π] 內(nèi)逼近函數(shù) sin ? x \sin x sinx。
  • 在給定區(qū)間上,我們均勻地選擇 50 個(gè)采樣點(diǎn),并計(jì)算采樣點(diǎn)的函數(shù)值,然后利用 3 次多項(xiàng)式逼近。
  • 程序如下:
>> X=linspace(0,2*pi,50);  %02Π之間等差的選取50個(gè)點(diǎn)
>> Y=sin(X);
>> P=polyfit(X,Y,3)  %得到3次多項(xiàng)式的系數(shù)和誤差

P =

    0.0912   -0.8596    1.8527   -0.1649

  • 以上求得了 3 次擬合多項(xiàng)式 p ( x ) p(x) p(x) 的系數(shù),得 p ( x ) = 0.0912 x 3 ? 0.8596 x 2 + 1.8527 x ? 0.1649 p(x)=0.0912x^{3}-0.8596x^{2}+1.8527x-0.1649 p(x)=0.0912x3?0.8596x2+1.8527x?0.1649。
  • 下面,我們利用繪圖函數(shù)得方法將多項(xiàng)式 p ( x ) p(x) p(x) sin ? x \sin x sinx進(jìn)行比較,程序如下:
>> X=linspace(0,2*pi,50);
>> Y=sin(X);
>> P=polyfit(X,Y,3)

P =

    0.0912   -0.8596    1.8527   -0.1649

>> Y1=polyval(P,X);
>> plot(X,Y,':o',X,Y1,'-*')

  • 繪制出 sin ? x \sin x sinx 和多項(xiàng)式 p ( x ) p(x) p(x) 在給定區(qū)間得函數(shù)曲線,如下圖所示。其中虛線是 sin ? x \sin x sinx,實(shí)線是 p ( x ) p(x) p(x)。函數(shù) polyval(P,X) 返回多項(xiàng)式 p ( x ) p(x) p(x) 得值。

MATLAB 之 數(shù)據(jù)插值、曲線擬合和數(shù)值微分

三、數(shù)值微分

  • 一般來說,函數(shù)的導(dǎo)數(shù)依然是一個(gè)函數(shù)。設(shè)函數(shù) f ( x ) f(x) f(x) 的導(dǎo)函數(shù) f ′ ( x ) = g ( x ) f'(x)=g(x) f(x)=g(x),高等數(shù)學(xué)關(guān)心的是 g ( x ) g(x) g(x) 的形式和性質(zhì),而數(shù)值分析關(guān)心的問題是怎樣計(jì)算 g ( x ) g(x) g(x) 在一串離散點(diǎn) X = ( x 1 , x 2 , … , x n ) X=(x_{1}, x_{2},…,x_{n}) X=(x1?,x2?,,xn?) 的近似值 G = ( g 1 , g 2 , … , g n ) G=(g_{1},g_{2},…,g_{n}) G=(g1?,g2?,gn?) 以及所計(jì)算的近似值有多大誤差。

1. 數(shù)值差分與差商

  • 任意函數(shù) f ( x ) f(x) f(x) x x x 點(diǎn)的導(dǎo)數(shù)是通過極限定義的: f ′ ( x ) = lim ? h → 0 f ( x + h ) ? f ( x ) h f'(x)=\lim_{h \to 0}\frac{f(x+h)-f(x)}{h} f(x)=h0lim?hf(x+h)?f(x)? f ′ ( x ) = lim ? h → 0 f ( x ) ? f ( x ? h ) h f'(x)=\lim_{h \to 0}\frac{f(x)-f(x-h)}{h} f(x)=h0lim?hf(x)?f(x?h)? f ′ ( x ) = lim ? h → 0 f ( x + h / 2 ) ? f ( x ? h / 2 ) h f'(x)=\lim_{h \to 0}\frac{f(x+h/2)-f(x-h/2)}{h} f(x)=h0lim?hf(x+h/2)?f(x?h/2)?
  • 上述式子中,均假設(shè) h > 0 h>0 h>0,如果去掉上述等式右端的 h ? 0 h\longrightarrow 0 h?0 的極限過程,并引進(jìn)記號(hào): △ f ( x ) = f ( x + h ) ? f ( x ) \bigtriangleup f(x)=f(x+h)-f(x) f(x)=f(x+h)?f(x) ▽ f ( x ) = f ( x ) ? f ( x ? h ) \bigtriangledown f(x)=f(x)-f(x-h) f(x)=f(x)?f(x?h) δ f ( x ) = f ( x + h / 2 ) ? f ( x ? h / 2 ) \delta f(x)=f(x+h/2)-f(x-h/2) δf(x)=f(x+h/2)?f(x?h/2)
  • △ f ( x ) 、 ▽ f ( x ) \bigtriangleup f(x)、\bigtriangledown f(x) f(x)、f(x) δ f ( x ) \delta f(x) δf(x) 分別在函數(shù) x x x 點(diǎn)處以 h ( h > 0 ) h(h>0) h(h>0) 為步長(zhǎng)的向前差分、向后差分和中心差分。當(dāng)步長(zhǎng)為 h h h 充分小時(shí),有 f ′ ( x ) ≈ △ f ( x ) h f'(x)\approx \frac{\bigtriangleup f(x)}{h} f(x)hf(x)? f ′ ( x ) ≈ ▽ f ( x ) h f'(x)\approx \frac{\bigtriangledown f(x)}{h} f(x)hf(x)? f ′ ( x ) ≈ δ f ( x ) h f'(x)\approx \frac{\delta f(x)}{h} f(x)hδf(x)?
  • 和差分一樣,稱 △ f ( x ) / h 、 ▽ f ( x ) / h \bigtriangleup f(x)/h、\bigtriangledown f(x)/h f(x)/hf(x)/h δ f ( x ) / h \delta f(x)/h δf(x)/h 分別為函數(shù)在 x x x 點(diǎn)處以 h ( h > 0 ) h(h>0) h(h>0) 為步長(zhǎng)的向前差商、向后差商和中心差商。
  • 當(dāng)步長(zhǎng) h ( h > 0 ) h(h>0) h(h>0) 充分小時(shí),函數(shù) f f f 在點(diǎn) x x x 的微分接近于函數(shù)在該點(diǎn)的任意種差分,而 f f f 在點(diǎn) x x x 的導(dǎo)數(shù)接近于函數(shù)在該點(diǎn)的任意種差商。

2. 數(shù)值微分的實(shí)現(xiàn)

  • 有兩種方式計(jì)算任意函數(shù) f ( x ) f(x) f(x) 在給定點(diǎn) x x x 的數(shù)值導(dǎo)數(shù),第一種方式是用多項(xiàng)式或樣條函數(shù) g ( x ) g(x) g(x) 對(duì) f ( x ) f(x) f(x) 進(jìn)行逼近(插值或擬合),然后用逼近函數(shù) g ( x ) g(x) g(x) 在點(diǎn) x x x 處的導(dǎo)數(shù)作為 f ( x ) f(x) f(x) 在點(diǎn) x x x 處的導(dǎo)數(shù),第二種方式是用 f ( x ) f(x) f(x) 在點(diǎn) x x x 處的某種差商作為其導(dǎo)數(shù)。
  • 在 MATLAB 中,沒有直接提供求數(shù)值導(dǎo)數(shù)的函數(shù),只有計(jì)算向前差分的函數(shù) diff,其調(diào)用格式如下。
  • (1) DX=dif(X):計(jì)算向量 X X X 的向前差分, D X ( i ) = X ( i + 1 ) ? X ( i ) , i = 1 , 2 , … , n ? 1 DX(i)=X(i+1)-X(i), i=1,2,…,n-1 DX(i)=X(i+1)?X(i),i=1,2,,n?1
  • (2) DX= diff(X,n):計(jì)算 X X X n n n 階向前差分。例如,diff(X,2)=diff(diff(X))。
  • (3) DX-dif(A,n,dim):計(jì)算矩陣 A A A n n n 階差分,dim=1 時(shí)(默認(rèn)狀態(tài)),按列計(jì)算差分;dim=2 時(shí),按行計(jì)算差分。
  • 例如,我們?cè)O(shè) x x x [ 0 , 2 π ] [0, 2\pi] [0,2π] 間均勻分布的 6 個(gè)點(diǎn)組成,求 sin ? x \sin x sinx 的 1~3 階差分。
  • 程序如下:
>> X=linspace(0,2*pi,6);
>> Y=sin(X)

Y =

         0    0.9511    0.5878   -0.5878   -0.9511   -0.0000

>> DY=diff(Y)  %計(jì)算Y的一階差分

DY =

    0.9511   -0.3633   -1.1756   -0.3633    0.9511

>> D2Y=diff(Y,2)  %計(jì)算Y的二階差分,也可以用命令diff(DY)計(jì)算

D2Y =

   -1.3143   -0.8123    0.8123    1.3143

>> D3Y=diff(Y,3)  %計(jì)算Y的三階差分,也可以用命令diff(D2Y)diff(DY,2)計(jì)算

D3Y =

    0.5020    1.6246    0.5020

  • 例如,設(shè) f ( x ) = x 3 + 2 x 2 ? x + 12 + x + 5 6 + 5 x + 2 f(x)=\sqrt{x^{3}+2x^{2}-x+12}+\sqrt[6]{x+5}+5x+2 f(x)=x3+2x2?x+12 ?+6x+5 ?+5x+2 我們用不同的方法求函數(shù) f ( x ) f(x) f(x) 的數(shù)值導(dǎo)數(shù),并在用一個(gè)坐標(biāo)系中畫出 f ′ ( x ) f'(x) f(x) 的圖像。
  • 為確定計(jì)算數(shù)值導(dǎo)數(shù)的點(diǎn),假設(shè)在 [ ? 3 , 3 ] [-3, 3] [?3,3] 區(qū)間內(nèi)以 0.01 為步長(zhǎng)求數(shù)值導(dǎo)數(shù)。下面用 3 種方法求 f ( x ) f(x) f(x) 在這些點(diǎn)的導(dǎo)數(shù)。
  • 首先用一個(gè) 5 次多項(xiàng)式 p ( x ) p(x) p(x) 擬合函數(shù) f ( x ) f(x) f(x),并對(duì) p ( x ) p(x) p(x) 求一般意義下的導(dǎo)數(shù) d p ( x ) dp(x) dp(x),求出 d p ( x ) dp(x) dp(x) 在假設(shè)點(diǎn)的值。
  • 第二種方法直接求 f ( x ) f(x) f(x) 在假設(shè)點(diǎn)的數(shù)值導(dǎo)數(shù)。
  • 第三種方法求出 f ′ ( x ) f'(x) f(x) f ′ ( x ) = 3 x 2 + 4 x ? 1 2 x 3 + 2 x 2 ? x + 12 + 1 6 x + 5 6 + 5 f'(x)=\frac{3x^{2}+4x-1}{2\sqrt{x^{3}+2x^{2}-x+12}}+\frac{1}{6\sqrt[6]{x+5}}+5 f(x)=2x3+2x2?x+12 ?3x2+4x?1?+66x+5 ?1?+5
  • 然后直接求 f ′ ( x ) f'(x) f(x) 在假設(shè)點(diǎn)的導(dǎo)數(shù),最后在同一坐標(biāo)軸顯示這 3 條曲線。
  • 程序如下:
>> f=@(x) sqrt(x.^3+2*x.^2-x+12)+(x+5).^(1/6)+5*x+2;
>> g=@(x) (3*x.^2+4*x-1)./sqrt(x.^3+2*x.^2-x+12)/2+1/6./(x+5).^(5/6)+5;
>> x=-3:0.01:3;
>> p=polyfit(x,f(x),5);				%5次多項(xiàng)式p擬合f(x)
>> dp=polyder(p);					%對(duì)擬合多項(xiàng)式p求導(dǎo)數(shù)dp
>> dpx=polyval(dp,x);				%求dp在假設(shè)點(diǎn)的函數(shù)值
>> dx=diff(f([x,3.01]))/0.01;		%直接對(duì)f(x)求函數(shù)導(dǎo)數(shù)
>> gx=g(x);							%求函數(shù)f的導(dǎo)函數(shù)g在假設(shè)點(diǎn)的導(dǎo)數(shù)
>> plot(x,dpx,x,dx,'.',x,gx,'-');	%作圖
  • 程序運(yùn)行結(jié)果如下圖所示。結(jié)果表明,用 3 種方法求得的數(shù)值導(dǎo)數(shù)比較接近。

MATLAB 之 數(shù)據(jù)插值、曲線擬合和數(shù)值微分文章來源地址http://www.zghlxwxcb.cn/news/detail-476548.html

到了這里,關(guān)于MATLAB 之 數(shù)據(jù)插值、曲線擬合和數(shù)值微分的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • MATLAB根據(jù)數(shù)據(jù)擬合曲線

    MATLAB根據(jù)數(shù)據(jù)擬合曲線

    阿楠 零基礎(chǔ)入門matlab教程基礎(chǔ)版 阿楠 Simulink 模型創(chuàng)建 Matlab simulink建模與仿真視頻教程

    2024年02月01日
    瀏覽(15)
  • 數(shù)值分析——曲線擬合的最小二乘法

    數(shù)值分析——曲線擬合的最小二乘法

    擬合曲線定義:求近似函數(shù) φ(x), 使之 “最好” 的逼近f(x) ,無需滿足插值原則. 這就是曲線擬合問題。 (時(shí)間緊迫直接看例子就行,智慧交通專業(yè)的補(bǔ)修課,可能理論學(xué)的不那么深入,主要是方法。) 超定方程組 是指方程個(gè)數(shù)大于未知量個(gè)數(shù)的方程組 。 最小二乘解 : 對(duì)于

    2024年02月09日
    瀏覽(21)
  • 基于MATLAB的三維數(shù)據(jù)插值擬合與三次樣條擬合算法(附完整代碼)

    基于MATLAB的三維數(shù)據(jù)插值擬合與三次樣條擬合算法(附完整代碼)

    目錄 一. 三維插值 例題1 二. 高維度插值擬合 格式一 格式二 格式三 格式四 格式五 例題2 三. 單變量三次樣條插值 例題3 例題4 四. 多變量三次樣條插值 例題6 首先三維網(wǎng)格生成是利用 meshgrid() 函數(shù),在MATLAB中調(diào)用格式如下: 三維插值運(yùn)算,主要利用griddata()函數(shù)與interp()函數(shù)

    2024年02月14日
    瀏覽(22)
  • 全面地介紹 將二維數(shù)據(jù)矩陣插值擬合為二維曲面方程——基于matlab

    全面地介紹 將二維數(shù)據(jù)矩陣插值擬合為二維曲面方程——基于matlab

    要利用matlab將二維數(shù)據(jù)矩陣擬合成一個(gè)二維曲面方程,首先,我們得明白什么是插值和擬合。下面,從對(duì)洋流數(shù)據(jù)的處理入手,先以一個(gè)基本的流程為例,進(jìn)行問題的概述,然后介紹兩種具體的方法。 根據(jù)已知的數(shù)據(jù)點(diǎn),生成一個(gè)連續(xù)的函數(shù),可以在任意位置求值。matlab 提

    2024年04月11日
    瀏覽(40)
  • Matlab的插值與擬合

    Matlab的插值與擬合

    插值:在離散數(shù)據(jù)的基礎(chǔ)上補(bǔ)插連續(xù)函數(shù),使得這條連續(xù)曲線通過全部給定的離散數(shù)據(jù)點(diǎn)。插值是離散函數(shù)逼近的重要方法,利用它可通過函數(shù)在有限個(gè)點(diǎn)處的取值狀況,估算出函數(shù)在其他點(diǎn)處的近似值。 擬合:擬合是指已知某函數(shù)的若干離散函數(shù)值,通過調(diào)整該函數(shù)中若干

    2024年02月03日
    瀏覽(15)
  • 【數(shù)值分析實(shí)驗(yàn)】(八)常微分方程的數(shù)值解法(含matlab代碼)

    【數(shù)值分析實(shí)驗(yàn)】(八)常微分方程的數(shù)值解法(含matlab代碼)

    ????????科學(xué)技術(shù)中很多問題都可用常微分方程的定解問題來描述,主要有初值問題和邊值問題兩大類。常微分方程式描述連續(xù)變化的數(shù)學(xué)語言,微分方程的求解時(shí)確定滿足給定方程的可微函數(shù),要找出這類問題的解析解往往非常困難,甚至是不可能的。研究一階常微分方

    2024年02月03日
    瀏覽(19)
  • Matlab偏微分方程擬合 | 完整源碼 | 視頻教程

    Matlab偏微分方程擬合 | 完整源碼 | 視頻教程

    作者簡(jiǎn)介:工學(xué)博士,高級(jí)工程師,專注于工業(yè)軟件算法研究 本文已收錄于專欄:《 復(fù)雜函數(shù)擬合案例分享 》本專欄旨在提供 1.以 案例 的形式講解各類復(fù)雜函數(shù)擬合的程序?qū)崿F(xiàn)方法,并提供所有案例 完整源碼 ;2. 復(fù)雜函數(shù) 包含:分段函數(shù)、積分函數(shù)、常/偏微分函數(shù)、隱

    2024年04月10日
    瀏覽(28)
  • 用MATLAB求一階微分方程(組)數(shù)值解

    用MATLAB求一階微分方程(組)數(shù)值解

    標(biāo)準(zhǔn)形式要先寫成左邊是y的導(dǎo)數(shù)右邊是本身函數(shù)或者自變量,然后寫成.m文件類似: 如果有多個(gè)微分方程,dy=zeros(3,1);% 一定要寫成列向量 3、[0,1,1]都是方程(組)的初始值,并且初始值的x=0; 就會(huì)得到一系列x,y值; ode45(最常用) **問題類型:**非剛性 **精準(zhǔn)度:**中等 ode15s

    2024年02月11日
    瀏覽(23)
  • matlab 矩陣處理方法:縮放、插值、擬合、分塊...

    目錄 1. 縮放矩陣尺寸 2. 對(duì)矩陣進(jìn)行反距離權(quán)重插值填補(bǔ)nan值 3. 數(shù)據(jù)擬合 4. 數(shù)組大小超過限制(分塊處理) 在MATLAB中,可以使用 imresize 函數(shù)對(duì)矩陣進(jìn)行縮放尺寸操作。 imresize 函數(shù)用于調(diào)整圖像或矩陣的尺寸,可以按比例縮小或放大矩陣。 其中: A 是原始矩陣或圖像。 sca

    2024年02月11日
    瀏覽(21)
  • matlab解常微分方程常用數(shù)值解法2:龍格庫塔方法

    matlab解常微分方程常用數(shù)值解法2:龍格庫塔方法

    總結(jié)和記錄一下matlab求解常微分方程常用的數(shù)值解法,本文將介紹龍格庫塔方法(Runge-Kutta Method)。 龍格庫塔迭代的基本思想是: x k + 1 = x k + a k 1 + b k 2 x_{k+1}=x_{k}+a k_{1}+b k_{2} x k + 1 ? = x k ? + a k 1 ? + b k 2 ? k 1 = h f ( x k , t k ) ?and? k 2 = h f ( x k + B 1 k 1 , t k + A 1 h ) k_{1}=h

    2024年02月12日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包