9.3.2 差分函數


上述提及的後向差分式,在 MATLAB 有對應的diff 函數來計算二相臨點的差值, 它的語法為 diff(x),其中 x代表一組離散點 。假設有x, y(x)的數據為

x=[1 3 5 7 9], y=[1 4 9 16 25]

diff(x)=[2 2 2 2], diff(y)=[3 5 7 9],注意二者皆以後向差分計算且數據點只剩 4 個而不是5個。而的 數值微分則為 dy=diff(y)./diff(x)

因此要計算下列多項式在 [-4, 5] 區間的微分

可依以下方式求解

>> x=linspace(-4,5); % 產生100x的離散點

>> p=[1 -3 -11 27 10 -24];

>> f=polyval(p,x);

>> plot(x,f) % 將多項式函數繪圖

>> title('Fifth-deg. equation')

>> dfb=diff(f)./diff(x); % 注意要分別計算diff(f)diff(x)

>> xd=x(2:length(x)); % 注意只有99df值,而且是對應x2,x3,...,x100的點

>> plot(xd,dfb ) % 將多項式的微分項繪圖

>> title('Derivative of fifth-deg. equation')

假設我們要找出上述多項式的局部極值(local critical value),可以利用局部極值所在點的微分為零,所以在 這個點的左側及右側的二點微分值一定是一正一負,因此這二點的微分值相乘為負值,可針對此性質找 出局部極值所在點。以原多項式的數據示範如下:

>> product=dfb(1:length(dfb)-1).*dfb(2:length(dfb)); % 注意二相臨點值相乘的寫法

>> crit=xd(find(product<0)) % 注意用到find指令

若上述多項式以中央差分方式計算其函數微分項,就不能以diff計算,而須自行計算如下:

>> num=f(3:length(f))-f(1:length(f)-2); % 注意中央差分是 f(k+1)-f(k-1)

>> deno=x(3:length(f))-x(1:length(f)-2); % 注意中央差分是 x(k+1)-x(k-1)

>> df_c=num./deno;

>> xd=x(2:length(x)-1); % xd的點數只有98

>> plot(xd,df_c)

>> title('Derivative of fifth-deg. polynomial')

以下的例子是針對數據組為離散型態,要注意的是原數據所代表的函數分佈並無明顯的折角,但是它的 一階微分經數值微分計算後的微分函數分佈卻有極大的曲折變化。

>> x=0:0.1:1;

>> y=[-.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2];

>> plot(x,y,'o',x,y)

>> title('y(x) data plot')

>> ylabel('y(x)'), xlabel('x')

>> dy=diff(y)./diff(x);

>> xd=x(1:length(x)-1);

>> plot(xd,dy)

>> title('Approximate derivative using diff')

>> ylabel('dy/dx'), xlabel('x')



上一頁 下一頁 講義大綱