Matlab數據分析與計算

1. 數據統計分析

max 最大值 min 最小值
sum 求和 prod 求積
mean 平均數 median 中值
cumsum 累加 cumprod 乘積
std 標準差 corrcoef 相關係數
sort 排序

1.1 最大值和最小值

  • MATLAB提供了求數據序列最大值的函數max和求最小值的函數min,它們的調用格式和操作過程類似。
    1.求向量的最大值和最小值
    求向量X的最大值的函數有兩種調用格式,分別是:
    y=max(X)返回向量X的最大值,並存入y。如果X中包含複數元素,則按模取最大值。
    [y,k]=max(X)返回向量X的最大值,並存入y,最大值的序號存入k。如果X中包含複數元素,則按模取最大值。
    求向量X的最小值的函數是min(X),用法和max(X)相同。

    例如,求向量x的最大值,:
    在這裏插入圖片描述

    2.求矩陣的最大值和最小值
    求矩陣A的最大值的函數有3種調用格式,分別是:
    max(A)返回一個行向量,向量的第i個元素是矩陣A的第i列上的最大值。
    [Y,U]=max(A)返回行向量Y和U,Y向量記錄A的每列的最大值,U向量記錄每列最大值的行號。
    max(A,[ ],dim)dim取1或2。dim取1時,該函數和max(A)等價;dim取2時,該函數返回一個列向量,其第i個元素是A矩陣的第i行上的最大值。
    求矩陣最小值的函數是min,其用法和max函數相同。

    例: 求矩陣A每行及每列的最大值,並求整個矩陣的最大值。
    在這裏插入圖片描述
    在這裏插入圖片描述

    3.兩個向量或矩陣對應元素的比較
    函數max和min還能對兩個同型的向量或矩陣進行比較,調用格式爲:
    U=max(A,B)A、B是兩個同型的向量或矩陣,結果U是與A、B同型的向量或矩陣,U的每個元素等於A、B對應元素的較大者。
    U=max(A,n)n是一個標量,結果U是與A同型的向量或矩陣,U的每個元素等於A對應元素和n中的較大者。
    min函數的用法和max函數相同。

    例,求兩個2×3矩陣x、y所有同一位置上的較大元素構成的新矩陣p,以及一個常數與矩陣比較。
    在這裏插入圖片描述

1.2 求和與求積

  • 數據序列求和用sum函數。設X是一個向量,A是一個矩陣,sum函數的調用格式爲:
    sum(X)返回向量X各元素的和。
    prod(X)返回向量X各元素的乘積。
    sum(A)返回一個行向量,其第i個元素是A的第i列的元素和。
    prod(A)返回一個行向量,其第i個元素是A的第i列的元素乘積。
    sum(A,dim)當dim爲1時,該函數等同於sum(A);當dim爲2時,返回一個列向量,其第i個元素是A的第i行的各元素之和。
    prod(A,dim)當dim爲1時,該函數等同於prod(A);當dim爲2時,返回一個列向量,其第i個元素是A的第i行的各元素乘積。 數據序列求積用prod函數,其使用方法與sum函數相同。

    例:求矩陣A的每行元素之和和全部元素之和。
    在這裏插入圖片描述

1.3 平均值和中值

  • 數據序列的平均值指的是算術平均值。所謂中值,是指在數據序列中其值的大小恰好處在中間的元素。

  • 求矩陣和向量元素的平均值的函數是mean。設X是一個向量,A是一個矩陣,函數的調用格式爲:
    mean(X)返回向量X的算術平均值。
    mean(A)返回一個行向量,其第i個元素是A的第i列的算術平均值。
    mean(A,dim)當dim爲1時,該函數等同於mean(A);當dim爲2時,返回一個列向量,其第i個元素是A的第i行的算術平均值。
    求中值的函數是median,其調用方法和mean函數相同。

    例:求向量x的平均值:
    在這裏插入圖片描述

1.4 累加和與累乘積

  • 在MATLAB中,使用cumsumcumprod函數能方便地求得向量和矩陣元素的累加和與累乘積向量,它們的調用格式相同,其中cumsum函數的調用格式爲:
    cumsum(X)返回向量X累加和向量。
    cumsum(A)返回一個矩陣,其第i列是A的第i列的累加和向量。
    cumsum(A,dim)當dim爲1時,該函數等同於cumsum(A);當dim爲2時,返回一個矩陣,其第i行是A的第i行的累加和向量。

    例:求s=1!+2!+…+6!的值。
    在這裏插入圖片描述

1.5 標準差與相關係數

  • 求標準差:對於具有n個元素的數據序列x1、x2、x3、…、xn,

  • MATLAB提供了計算數據序列的標準差的函數std。對於向量X,std(X)返回一個標準差。對於矩陣A,std(A)返回一個行向量,它的各個元素便是矩陣A各列或各行的標準方差。std函數的一般調用格式爲:
    Y=std(A,flag,dim)其中,dim取1或2。當dim=1時,求各列元素的標準差;當dim=2時,則求各行元素的標準差。flag取0或1,當flag=0時,按S1所列公式計算標準差;當flag=1時,按S2所列公式計算標準差。默認取flag=0,dim=1。

    例:對二維矩陣x,從不同維方向求出其標準方差。
    在這裏插入圖片描述

  • 相關係數
    對於兩組數據序列xi、yi(i=1,2,…,n),可以由下式計算出兩組數據的相關係數:
    在這裏插入圖片描述
    corrcoef(X,Y)其中,X、Y是向量。corrcoef(X,Y)返回序列X和序列Y的相關係數,得到的結果是一個2×2矩陣,其中對角線上的元素分別表示X和Y的自相關係數,非對角線上的元素分別表示X與Y的相關係數和Y與X的相關係數,兩個是相等的。corrcoef(X,Y)與corrcoef([X,Y])等價。
    corrcoef(X)對於一般的矩陣X,corrcoef(X)返回從矩陣X形成的一個相關係數矩陣。此相關係數矩陣的大小與矩陣X一樣。係數矩陣中第i行第j列的元素代表原矩陣X中第i個列向量和第j個列向量的相關係數。

    例:生成滿足正態分佈的10000×5隨機矩陣,然後求各列元素的均值和標準方差,再求這5列隨機數據的相關係數矩陣。
    在這裏插入圖片描述

1.6 排序

  • 對向量元素進行排序是一個經常性的操作,MATLAB中對向量X進行排序的函數是sort(X),函數返回一個對X中的元素按升序排列的向量。
    sort函數也可以對矩陣A的各列或各行重新排序,其調用格式爲:
    [Y,I]=sort(A,dim,mode)其中,Y是排序後的矩陣,而I記錄Y中的元素在A中的位置。dim指明對A的列還是行進行排序,若dim=1,則按列排;若dim=2,則按行排。dim默認取1。mode指明按升序還是按降序排序,'ascend'按升序,'descend'按降序。mode默認取'ascend'。

    例:對下列矩陣做各種排序。
    在這裏插入圖片描述

2 . 多項式計算

  • 在MATLAB中,n次多項式用一個長度爲n+1的行向量表示,缺少的冪次項係數爲0。如果n次多項式表示爲:
    P(x)=anxn+an-1xn-1+an-2xn-2+…+a1x+a0
    則在MATLAB中,P(x)表達爲向量形式:[an,an-1,an-2,…,a1,a0]

  • 2.1 多項式的四則運算
    1.多項式的加減運算
    MATLAB沒有提供專門進行多項式加減運算的函數。
    事實上,多項式的加減運算就是其所對應的係數向量的加減運算。對於次數相同的兩個多項式,可直接對多項式係數向量進行加減運算。
    如果多項式的次數不同,則應該把低次的多項式係數不足的高次項用0補足,使同式中的各多項式具有相同的次數。

    例:計算(x3-2x2+5x+3)+(6x-1),對於和式的後一個多項式6x-1,它僅爲1次多項式,而前面的是3次。爲確保兩者次數相同,應把後者的係數向量處理成[0,0,6,-1]。
    執行命令:
    在這裏插入圖片描述

    2.多項式乘法運算

    • 函數conv(P1,P2)用於求多項式P1和P2的乘積。其中,P1、P2是兩個多項式係數向量。

      例:求多項式x4+8x3-10與多項式2x2-x+3的乘積。
      在這裏插入圖片描述

    3.多項式除法

  • 函數[Q,r]=deconv(P1,P2)用於對多項式P1和P2作除法運算。其中,Q返回多項式P1除以P2的商式,r返回P1除以P2的餘式。這裏,Q和r仍是多項式係數向量。
    deconv是conv的逆函數,即有P1=conv(P2,Q)+r

例:求多項式x4+8x3-10除以多項式2x2-x+3的結果。
在這裏插入圖片描述

2.2 多項式的導函數

  • 求多項式的導函數用polyder函數,其調用格式如下。
    ① p=polyder(P):求多項式P的導函數。
    ② p=polyder(P,Q):求P·Q的導函數。
    ③ [p,q]=polyder(P,Q):求P/Q的導函數,導函數的分子存入p,分母存入q。
    上述函數調用中,參數P、Q是多項式的向量表示,結果p、q也是多項式的向量表示。

    例:求有理分式的導數:f(x)=1/x2+5
    在這裏插入圖片描述

2.3 多項式的求值

  • MATLAB提供了兩種求多項式值的函數:polyvalpolyvalm,它們的輸入參數均爲多項式係數向量P和自變量x。
    兩者的區別在於前者是代數多項式求值,而後者是矩陣多項式求值。

    1.代數多項式求值
    polyval函數用來求代數多項式的值,其調用格式爲:
    Y=polyval(P,x)
    若x爲一數值,則求多項式在該點的值;若x爲向量或矩陣,則對向量或矩陣中的每個元素求其多項式的值。

    例:已知多項式x4+8x3-10,分別取x=1.2和一個2×3矩陣爲自變量,計算該多項式的值。
    在這裏插入圖片描述

    2.矩陣多項式求值
    polyvalm函數用來求矩陣多項式的值,其調用格式與polyval相同,但含義不同。
    Y=polyvalm(P,x)
    polyvalm函數要求x爲方陣,它以方陣爲自變量求多項式的值。設A爲方陣,P代表多項式x3-5x2+8,那麼polyvalm(P,A)的含義是:
    A*A*A-5*A*A+8*eye(size(A))
    而polyval(P,A)的含義是:
    A.*A.*A-5*A.*A+8*ones(size(A))

    例:已知多項式x4+8x3-10,以2×2矩陣爲自變量,計算該多項式的值。
    在這裏插入圖片描述

2.4 多項式求根

  • n次多項式具有n個根,當然這些根可能是實根,也可能含有若干對共軛復根。MATLAB提供的roots函數用於求多項式的全部根,其調用格式爲:
    x=roots(P)
    其中,P爲多項式的係數向量,求得的根賦給向量x,即x(1)、x(2)、…、x(n)分別代表多項式的n個根。

    例:求多項式x4+8x3-10的根。
    在這裏插入圖片描述

    若已知多項式的全部根,則可以用poly函數建立起該多項式,其調用格式爲:
    P=poly(x)
    若x爲具有n個元素的向量,則poly(x)建立以x爲其根的多項式,且將該多項式的係數賦給向量P。

    例:f(x)=3x5+4x3-5x2-7.2x+5
    ① 計算f(x)=0 的全部根。
    ② 由方程f(x)=0的根構造一個多項式g(x),並與f(x)進行對比。
    在這裏插入圖片描述

3. 數據插值

  • 如果要得到這些離散點以外的其他點的數值,就需要根據這些已知數據進行插值。

  • 根據被插值函數的自變量個數,插值問題分爲一維插值、二維插值和多維插值等;根據是用分段直線、多項式或樣條函數來作爲插值函數,插值問題又分爲線性插值、多項式插值和樣條插值等。
    MATLAB提供了一維、二維、N維數據插值函數interp1、interp2和interpn,以及3次樣條插值函數spline等。

  • 3.1 一維數據插值
    如果被插值函數是一個單變量函數,則數據插值問題稱爲一維插值。一維插值採用的方法有線性方法、最近方法、3次多項式和3次樣條插值。在MATLAB中,實現這些插值的函數是interp1,其調用格式爲:
    Y1=interp1(X,Y,X1,method)
    函數根據X、Y的值,計算函數在X1處的值。其中,X、Y是兩個等長的已知向量,分別描述採樣點和採樣值。若同一個採樣點有多種採樣值,則Y可以爲矩陣,Y的每一列對應一組採樣。X1是一個向量或標量,描述欲插值的點,Y1是一個與X1等長的插值結果。
    method用於指定插值方法,允許的取值有:
    ① ‘linear’:線性插值。線性插值是默認的插值方法,它是把與插值點靠近的兩個數據點用直線連接,然後在直線上選取對應插值點的數據。
    ② ‘nearest’:最近點插值。根據插值點與已知數據點的遠近程度進行插值。插值點優先選擇較近的數據點進行插值操作。
    ③ ‘pchip’:分段3次Hermite插值。MATLAB中有一個專門的3次Hermite插值函數pchip(X,Y,X1),其功能及使用方法與函數interp1(X,Y,X1,‘pchip’)相同。
    ④ ‘spline’:3次樣條插值。所謂3次樣條插值,是指在每個分段(子區間)內構造一個3次多項式,使其插值函數除滿足插值條件外,還要求在各節點處具有光滑的條件。MATLAB中有一個專門的3次樣條插值函數spline(X,Y,X1),其功能及使用方法與函數interp1(X,Y,X1,‘spline’)相同。

    例:給出概率積分的數據表,用不同的插值方法計算f(0.472)。
    在這裏插入圖片描述在這裏插入圖片描述
    在這裏插入圖片描述

3.2 二維數據插值

  • 當函數依賴於兩個自變量變化時,其採樣點就應該是一個由這兩個參數組成的一個平面區域,插值函數也是一個二維函數。對依賴於兩個參數的函數進行插值的問題稱爲二維插值問題。同樣,在MATLAB中,提供瞭解決二維插值問題的函數interp2,其調用格式爲:
    Z1=interp2(X,Y,Z,X1,Y1,method)
    其中,X、Y是兩個向量,分別描述兩個參數的採樣點,Z是與參數採樣點對應的函數值,X1、Y1是兩個向量或標量,描述欲插值的點。Z1是根據相應的插值方法得到的插值結果。 method的取值與一維插值函數相同。X、Y、Z也可以是矩陣形式。

    例:設z=x2+y2,對z函數在[0,1]×[0,2]區域內進行插值。
    在這裏插入圖片描述

4. 曲線擬合

  • 1.曲線擬合原理
    與數值插值類似,曲線擬合的目的也是用一個較簡單的函數去逼近一個複雜的或未知的函數,所依據的條件都是在一個區間或一個區域上的有限個採樣點的函數值。
    數值插值要求逼近函數在採樣點與被逼近函數相等,但由於實驗或測量中的誤差,所獲得的數據不一定準確。在這種情況下,如果強求逼近函數通過各採樣插值點,顯然是不夠合理的。
    爲此,構造函數y=g(x)去逼近f(x),這裏不要求曲線g(x)嚴格通過採樣點,但希望g(x)能儘量地靠近這些點,就是使誤差δi=g(xi)-f(xi)(i=1,2,…,n)在某種意義下達到最小。
    MATLAB曲線擬合的最優標準是採用常見的最小二乘原理 ,即使得擬合多項式在各節點處的偏差平方和達到最小。

  • 2.曲線擬合的實現
    在MATLAB中,用polyfit函數來求得最小二乘擬合多項式的係數,再用polyval函數按所得的多項式計算所給出的點上的函數近似值。
    polyfit函數的調用格式爲:
    P=polyfit(X,Y,m)
    [P,S]=polyfit(X,Y,m)
    [P,S,mu]=polyfit(X,Y,m)
    函數根據採樣點X和採樣點函數值Y,產生一個m次多項式P及其在採樣點的誤差向量S。其中,X、Y是兩個等長的向量,P是一個長度爲m+1的向量,P的元素爲多項式係數。mu是一個二元向量,mu(1)是mean(X),而mu(2)是std(X)。
    可以用polyval函數按所得的多項式計算X各點上多項式的值。

    例: 用一個3次多項式在區間[0,2π]內逼近函數。在給定區間上,均勻地選擇50個採樣點,並計算採樣點的函數值,然後利用3次多項式逼近。
    在這裏插入圖片描述
    下面利用繪圖的方法將多項式p(x)和sinx進行比較:
    在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章