MATLAB05數(shù)據(jù)分析與計算(閱讀)課件_第1頁
MATLAB05數(shù)據(jù)分析與計算(閱讀)課件_第2頁
MATLAB05數(shù)據(jù)分析與計算(閱讀)課件_第3頁
MATLAB05數(shù)據(jù)分析與計算(閱讀)課件_第4頁
MATLAB05數(shù)據(jù)分析與計算(閱讀)課件_第5頁
已閱讀5頁,還剩105頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

5.1數(shù)據(jù)簡單統(tǒng)計處理5.2多項式計算5.3線性方程組求解5.4非線性方程數(shù)值求解5.5函數(shù)極值5.6數(shù)值積分第5講數(shù)據(jù)分析與計算問題5.1數(shù)據(jù)簡單統(tǒng)計處理第5講數(shù)據(jù)分析與計算問題15.1數(shù)據(jù)統(tǒng)計處理5.1.1最大值和最小值MATLAB提供的求數(shù)據(jù)序列的最大值和最小值的函數(shù)分別為max和min,兩個函數(shù)的調用格式和操作過程類似。1.求向量的最大值和最小值求一個向量X的最大值的函數(shù)有兩種調用格式,分別是:(1)y=max(X):返回向量X的最大值存入y,如果X中包含復數(shù)元素,則按模取最大值。5.1數(shù)據(jù)統(tǒng)計處理2(2)[y,I]=max(X):返回向量X的最大值存入y,最大值的序號存入I,如果X中包含復數(shù)元素,則按模取最大值。求向量X的最小值的函數(shù)是min(X),用法和max(X)完全相同。例5-1求向量x的最大值。命令如下:x=[-43,72,9,16,23,47];y=max(x)%求向量x中的最大值[y,l]=max(x)%求向量x中的最大值及其該元素的位置(2)[y,I]=max(X):返回向量X的最大值存入y,32.求矩陣的最大值和最小值求矩陣A的最大值的函數(shù)有3種調用格式,分別是:(1)max(A):返回一個行向量,向量的第i個元素是矩陣A的第i列上的最大值。(2)[Y,U]=max(A):返回行向量Y和U,Y向量記錄A的每列的最大值,U向量記錄每列最大值的行號。2.求矩陣的最大值和最小值4(3)max(A,[],dim):dim取1或2。dim取1時,該函數(shù)和max(A)完全相同;dim取2時,該函數(shù)返回一個列向量,其第i個元素是A矩陣的第i行上的最大值。求最小值的函數(shù)是min,其用法和max完全相同。例5-2分別求3×4矩陣x中各列和各行元素中的最大值,并求整個矩陣的最大值和最小值。(3)max(A,[],dim):dim取1或2。dim取53.兩個向量或矩陣對應元素的比較函數(shù)max和min還能對兩個同型的向量或矩陣進行比較,調用格式為:(1)U=max(A,B):A,B是兩個同型的向量或矩陣,結果U是與A,B同型的向量或矩陣,U的每個元素等于A,B對應元素的較大者。(2)U=max(A,n):n是一個標量,結果U是與A同型的向量或矩陣,U的每個元素等于A對應元素和n中的較大者。min函數(shù)的用法和max完全相同。例5-3求兩個2×3矩陣x,y所有同一位置上的較大元素構成的新矩陣p。3.兩個向量或矩陣對應元素的比較65.1.2求和與求積數(shù)據(jù)序列求和與求積的函數(shù)是sum和prod,其使用方法類似。設X是一個向量,A是一個矩陣,函數(shù)的調用格式為:sum(X):返回向量X各元素的和。prod(X):返回向量X各元素的乘積。sum(A):返回一個行向量,其第i個元素是A的第i列的元素和。5.1.2求和與求積7prod(A):返回一個行向量,其第i個元素是A的第i列的元素乘積。sum(A,dim):當dim為1時,該函數(shù)等同于sum(A);當dim為2時,返回一個列向量,其第i個元素是A的第i行的各元素之和。prod(A,dim):當dim為1時,該函數(shù)等同于prod(A);當dim為2時,返回一個列向量,其第i個元素是A的第i行的各元素乘積。例5-4求矩陣A的每行元素的乘積和全部元素的乘積。prod(A):返回一個行向量,其第i個元素是A的第i列的元85.1.3平均值和中值求數(shù)據(jù)序列平均值的函數(shù)是mean,求數(shù)據(jù)序列中值的函數(shù)是median。兩個函數(shù)的調用格式為:mean(X):返回向量X的算術平均值。median(X):返回向量X的中值。mean(A):返回一個行向量,其第i個元素是A的第i列的算術平均值。median(A):返回一個行向量,其第i個元素是A的第i列的中值。mean(A,dim):當dim為1時,該函數(shù)等同于mean(A);當dim為2時,返回一個列向量,其第i個元素是A的第i行的算術平均值。median(A,dim):當dim為1時,該函數(shù)等同于median(A);當dim為2時,返回一個列向量,其第i個元素是A的第i行的中值。例5-5分別求向量x與y的平均值和中值。5.1.3平均值和中值95.1.4累加和與累乘積在MATLAB中,使用cumsum和cumprod函數(shù)能方便地求得向量和矩陣元素的累加和與累乘積向量,函數(shù)的調用格式為:cumsum(X):返回向量X累加和向量。cumprod(X):返回向量X累乘積向量。cumsum(A):返回一個矩陣,其第i列是A的第i列的累加和向量。cumprod(A):返回一個矩陣,其第i列是A的第i列的累乘積向量。cumsum(A,dim):當dim為1時,該函數(shù)等同于cumsum(A);當dim為2時,返回一個矩陣,其第i行是A的第i行的累加和向量。cumprod(A,dim):當dim為1時,該函數(shù)等同于cumprod(A);當dim為2時,返回一個向量,其第i行是A的第i行的累乘積向量。例5-6求s的值。5.1.4累加和與累乘積105.1.5排序MATLAB中對向量X是排序函數(shù)是sort(X),函數(shù)返回一個對X中的元素按升序排列的新向量。sort函數(shù)也可以對矩陣A的各列或各行重新排序,其調用格式為:[Y,I]=sort(A,dim)其中dim指明對A的列還是行進行排序。若dim=1,則按列排;若dim=2,則按行排。Y是排序后的矩陣,而I記錄Y中的元素在A中位置。5.1.5排序11例5-9對二維矩陣做各種排序。例5-9對二維矩陣做各種排序。12§5.2多項式5.2.1多項式的建立1、多項式的表示(1)一般都是按未知量的降冪排列各項之和(2)在MATLAB中,用它的系數(shù)矢量來表示多項式:注意:若ai中有的為0,這個0不能省略,必須在系數(shù)矢量中。2、創(chuàng)建多項式的方法(1)系數(shù)矢量直接輸入法在命令窗口直接輸入多項式的系數(shù)矢量,再利用轉換函數(shù)Poly2sym將多項式由系數(shù)矢量形式轉換為符號形式?!?.2多項式5.2.1多項式的建立(2)在MATLAB中13

(2)特征多項式輸入法n階方陣的特征多項式系數(shù)矢量一定是n+1階的,同時特征多項式系數(shù)矢量的第一個元素必須為1。例.求矩陣A=[123;456;789]的特征多項式系數(shù),并轉換為多項式形式?!稟=[123;456;789];》P=poly(A)》f=poly2sym(P)(2)特征多項式輸入法例.求矩陣A=[123;414(3)由根矢量創(chuàng)建多項式已知一個多項式的全部根X求多項式系數(shù)的函數(shù)是poly(X),該函數(shù)返回以X為全部根的一個多項式P,當X是一個長度為m的向量時,P是一個長度為m+1的向量。例.由根矢量[-0.5-0.3+0.4i-0.3-0.4i]創(chuàng)建多項式》R=[-0.5-0.3+0.4i-0.3-0.4i];》P=poly(R)》f=poly2sym(P)(3)由根矢量創(chuàng)建多項式例.由根矢量[-0.5-0.3+155.2.2多項式的四則運算1.多項式的加減運算2.多項式乘法運算函數(shù)conv(P1,P2)用于求多項式P1和P2的乘積。這里,P1、P2是兩個多項式系數(shù)向量。例6-16求多項式x4+8x3-10與多項式2x2-x+3的乘積。5.2.2多項式的四則運算163.多項式除法函數(shù)[Q,r]=deconv(P1,P2)用于對多項式P1和P2作除法運算。其中Q返回多項式P1除以P2的商式,r返回P1除以P2的余式。這里,Q和r仍是多項式系數(shù)向量。deconv是conv的逆函數(shù),即有P1=conv(P2,Q)+r。例5-17求多項式x^4+8x^3-10除以多項式2x^2-x+3的結果。3.多項式除法例5-17求多項式x^4+8x^3-10除175.2.3多項式的導函數(shù)對多項式求導數(shù)的函數(shù)是:p=polyder(P):求多項式P的導函數(shù)p=polyder(P,Q):求P·Q的導函數(shù)[p,q]=polyder(P,Q):求P/Q的導函數(shù),導函數(shù)的分子存入p,分母存入q。上述函數(shù)中,參數(shù)P,Q是多項式的向量表示,結果p,q也是多項式的向量表示。5.2.3多項式的導函數(shù)18例5-18求有理分式的導數(shù)。命令如下:P=[1];Q=[1,0,5];[p,q]=polyder(P,Q)例5-18求有理分式的導數(shù)。195.2.4多項式的求值MATLAB提供了兩種求多項式值的函數(shù):

polyval與polyvalm,它們的輸入?yún)?shù)均為多項式系數(shù)向量P和自變量x。兩者的區(qū)別在于前者是代數(shù)多項式求值,而后者是矩陣多項式求值。5.2.4多項式的求值201.代數(shù)多項式求值polyval函數(shù)用來求代數(shù)多項式的值,其調用格式為:Y=polyval(P,x)若x為一數(shù)值,則求多項式在該點的值;若x為向量或矩陣,則對向量或矩陣中的每個元素求其多項式的值。例5-19已知多項式x4+8x3-10,分別取x=1.2和一個2×3矩陣為自變量計算該多項式的值。1.代數(shù)多項式求值212.矩陣多項式求值polyvalm函數(shù)用來求矩陣多項式的值,其調用格式與polyval相同,但含義不同。polyvalm函數(shù)要求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))例5-20仍以多項式x4+8x^3-10為例,取一個2×2矩陣為自變量分別用polyval和polyvalm計算該多項式的值。2.矩陣多項式求值225.2.5多項式求根n次多項式具有n個根,當然這些根可能是實根,也可能含有若干對共軛復根。MATLAB提供的roots函數(shù)用于求多項式的全部根,其調用格式為:x=roots(P)其中P為多項式的系數(shù)向量,求得的根賦給向量x,即x(1),x(2),…,x(n)分別代表多項式的n個根。5.2.5多項式求根23例5-21求多項式x4+8x3-10的根。命令如下:A=[1,8,0,0,-10];x=roots(A)若已知多項式的全部根,則可以用poly函數(shù)建立起該多項式,其調用格式為:P=poly(x)若x為具有n個元素的向量,則poly(x)建立以x為其根的多項式,且將該多項式的系數(shù)賦給向量P。例5-21求多項式x4+8x3-10的根。24例5-22已知f(x)(1)計算f(x)=0的全部根。(2)由方程f(x)=0的根構造一個多項式g(x),并與f(x)進行對比。命令如下:P=[3,0,4,-5,-7.2,5];X=roots(P)%求方程f(x)=0的根G=poly(X)%求多項式g(x)例5-22已知f(x)255.3線性方程組求解5.3.1直接解法1.利用左除運算符的直接解法對于線性方程組Ax=b,可以利用左除運算符“\”求解:x=A\b5.3線性方程組求解26例5-23用直接解法求解下列線性方程組。命令如下:A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];b=[13,-9,6,0]';x=A\b例5-23用直接解法求解下列線性方程組。272.利用矩陣的分解求解線性方程組

矩陣分解是指根據(jù)一定的原理用某種算法將一個矩陣分解成若干個矩陣的乘積。常見的矩陣分解有LU分解、QR分解、Cholesky分解,以及Schur分解、Hessenberg分解、奇異分解等。2.利用矩陣的分解求解線性方程組28(1)LU分解矩陣的LU分解就是將一個矩陣表示為一個交換下三角矩陣和一個上三角矩陣的乘積形式。線性代數(shù)中已經證明,只要方陣A是非奇異的,LU分解總是可以進行的。MATLAB提供的lu函數(shù)用于對矩陣進行LU分解,其調用格式為:[L,U]=lu(X):產生一個上三角陣U和一個變換形式的下三角陣L(行交換),使之滿足X=LU。注意,這里的矩陣X必須是方陣。[L,U,P]=lu(X):產生一個上三角陣U和一個下三角陣L以及一個置換矩陣P,使之滿足PX=LU。當然矩陣X同樣必須是方陣。實現(xiàn)LU分解后,線性方程組Ax=b的解x=U\(L\b)或x=U\(L\Pb),這樣可以大大提高運算速度。(1)LU分解29例5-24用LU分解求解例5-23中的線性方程組。命令如下:A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];b=[13,-9,6,0]';[L,U]=lu(A);x=U\(L\b)或采用LU分解的第2種格式,命令如下:[L,U,P]=lu(A);x=U\(L\P*b)例5-24用LU分解求解例5-23中的線性方程組。30(2)QR分解對矩陣X進行QR分解,就是把X分解為一個正交矩陣Q和一個上三角矩陣R的乘積形式。QR分解只能對方陣進行。MATLAB的函數(shù)qr可用于對矩陣進行QR分解,其調用格式為:[Q,R]=qr(X):產生一個一個正交矩陣Q和一個上三角矩陣R,使之滿足X=QR。[Q,R,E]=qr(X):產生一個一個正交矩陣Q、一個上三角矩陣R以及一個置換矩陣E,使之滿足XE=QR。實現(xiàn)QR分解后,線性方程組Ax=b的解x=R\(Q\b)或x=E(R\(Q\b))。(2)QR分解31例5-25用QR分解求解例5-23中的線性方程組。命令如下:A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];b=[13,-9,6,0]';[Q,R]=qr(A);x=R\(Q\b)或采用QR分解的第2種格式,命令如下:[Q,R,E]=qr(A);x=E*(R\(Q\b))例5-25用QR分解求解例5-23中的線性方程組。32(3)Cholesky分解如果矩陣X是對稱正定的,則Cholesky分解將矩陣X分解成一個下三角矩陣和上三角矩陣的乘積。設上三角矩陣為R,則下三角矩陣為其轉置,即X=R'R。MATLAB函數(shù)chol(X)用于對矩陣X進行Cholesky分解,其調用格式為:R=chol(X):產生一個上三角陣R,使R'R=X。若X為非對稱正定,則輸出一個出錯信息。[R,p]=chol(X):這個命令格式將不輸出出錯信息。當X為對稱正定的,則p=0,R與上述格式得到的結果相同;否則p為一個正整數(shù)。如果X為滿秩矩陣,則R為一個階數(shù)為q=p-1的上三角陣,且滿足R'R=X(1:q,1:q)。實現(xiàn)Cholesky分解后,線性方程組Ax=b變成R‘Rx=b,所以x=R\(R’\b)。(3)Cholesky分解33例5-26用Cholesky分解求解例5-23中的線性方程組。命令如下:A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];b=[13,-9,6,0]';R=chol(A)???Errorusing==>cholMatrixmustbepositivedefinite命令執(zhí)行時,出現(xiàn)錯誤信息,說明A為非正定矩陣。例5-26用Cholesky分解求解例5-23中的線性方程345.3.2迭代解法迭代解法非常適合求解大型系數(shù)矩陣的方程組。在數(shù)值分析中,迭代解法主要包括Jacobi迭代法、Gauss-Serdel迭代法、超松弛迭代法和兩步迭代法。1.Jacobi迭代法對于線性方程組Ax=b,如果A為非奇異方陣,即aii≠0(i=1,2,…,n),則可將A分解為A=D-L-U,其中D為對角陣,其元素為A的對角元素,L與U為A的下三角陣和上三角陣,于是Ax=b化為:x=D-1(L+U)x+D-1b與之對應的迭代公式為:x(k+1)=D-1(L+U)x(k)+D-1b這就是Jacobi迭代公式。如果序列{x(k+1)}收斂于x,則x必是方程Ax=b的解。5.3.2迭代解法35Jacobi迭代法的MATLAB函數(shù)文件Jacobi.m如下:function[y,n]=jacobi(A,b,x0,eps)ifnargin==3eps=1.0e-6;elseifnargin<3errorreturnendD=diag(diag(A));%求A的對角矩陣L=-tril(A,-1);%求A的下三角陣U=-triu(A,1);%求A的上三角陣B=D\(L+U);f=D\b;y=B*x0+f;n=1;%迭代次數(shù)whilenorm(y-x0)>=epsx0=y;y=B*x0+f;n=n+1;endJacobi迭代法的MATLAB函數(shù)文件Jacobi.m如下36例5-5用Jacobi迭代法求解下列線性方程組。設迭代初值為0,迭代精度為10-6。在命令中調用函數(shù)文件Jacobi.m,命令如下:A=[10,-1,0;-1,10,-2;0,-2,10];b=[9,7,6]';[x,n]=jacobi(A,b,[0,0,0]',1.0e-6)例5-5用Jacobi迭代法求解下列線性方程組。設迭代初372.Gauss-Serdel迭代法在Jacobi迭代過程中,計算時,已經得到,不必再用,即原來的迭代公式Dx(k+1)=(L+U)x(k)+b可以改進為Dx(k+1)=Lx(k+1)+Ux(k)+b,于是得到:x(k+1)=(D-L)-1Ux(k)+(D-L)-1b該式即為Gauss-Serdel迭代公式。和Jacobi迭代相比,Gauss-Serdel迭代用新分量代替舊分量,精度會高些。2.Gauss-Serdel迭代法38Gauss-Serdel迭代法的MATLAB函數(shù)文件gauseidel.m如下:function[y,n]=gauseidel(A,b,x0,eps)ifnargin==3eps=1.0e-6;elseifnargin<3errorreturnendD=diag(diag(A));%求A的對角矩陣L=-tril(A,-1);%求A的下三角陣U=-triu(A,1);%求A的上三角陣G=(D-L)\U;f=(D-L)\b;y=G*x0+f;n=1;%迭代次數(shù)whilenorm(y-x0)>=epsx0=y;y=G*x0+f;n=n+1;endGauss-Serdel迭代法的MATLAB函數(shù)文件gaus39例5-6用Gauss-Serdel迭代法求解下列線性方程組。設迭代初值為0,迭代精度為10-6。在命令中調用函數(shù)文件gauseidel.m,命令如下:A=[10,-1,0;-1,10,-2;0,-2,10];b=[9,7,6]';[x,n]=gauseidel(A,b,[0,0,0]',1.0e-6)例5-6用Gauss-Serdel迭代法求解下列線性方程40例5-7分別用Jacobi迭代和Gauss-Serdel迭代法求解下列線性方程組,看是否收斂。命令如下:a=[1,2,-2;1,1,1;2,2,1];b=[9;7;6];[x,n]=jacobi(a,b,[0;0;0])[x,n]=gauseidel(a,b,[0;0;0])例5-7分別用Jacobi迭代和Gauss-Serdel415.4非線性方程數(shù)值求解5.4.1單變量非線性方程求解

在MATLAB中提供了一個fzero函數(shù),可以用來求單變量非線性方程的根。該函數(shù)的調用格式為:z=fzero('fname',x0,tol,trace)其中fname是待求根的函數(shù)文件名,x0為搜索的起點。一個函數(shù)可能有多個根,但fzero函數(shù)只給出離x0最近的那個根。tol控制結果的相對精度,缺省時取tol=eps,trace指定迭代信息是否在運算中顯示,為1時顯示,為0時不顯示,缺省時取trace=0。5.4非線性方程數(shù)值求解42例5-8求f(x)=x-10x+2=0在x0=0.5附近的根。步驟如下:(1)建立函數(shù)文件funx.m。functionfx=funx(x)fx=x-10.^x+2;(2)調用fzero函數(shù)求根。z=fzero('funx',0.5)z=0.3758例5-8求f(x)=x-10x+2=0在x0=0435.4.2非線性方程組的求解對于非線性方程組F(X)=0,用fsolve函數(shù)求其數(shù)值解。fsolve函數(shù)的調用格式為:X=fsolve('fun',X0,option)其中X為返回的解,fun是用于定義需求解的非線性方程組的函數(shù)文件名,X0是求根過程的初值,option為最優(yōu)化工具箱的選項設定。最優(yōu)化工具箱提供了20多個選項,用戶可以使用optimset命令將它們顯示出來。如果想改變其中某個選項,則可以調用optimset()函數(shù)來完成。例如,Display選項決定函數(shù)調用時中間結果的顯示方式,其中‘off’為不顯示,‘iter’表示每步都顯示,‘final’只顯示最終結果。optimset(‘Display’,‘off’)將設定Display選項為‘off’。5.4.2非線性方程組的求解44例5-27求下列非線性方程組在(0.5,0.5)附近的數(shù)值解。(1)建立函數(shù)文件myfun.m。functionq=myfun(p)x=p(1);y=p(2);q(1)=x-0.6*sin(x)-0.3*cos(y);q(2)=y-0.6*cos(x)+0.3*sin(y);(2)在給定的初值x0=0.5,y0=0.5下,調用fsolve函數(shù)求方程的根。x=fsolve('myfun',[0.5,0.5]',optimset('Display','off'))x=0.63540.3734例5-27求下列非線性方程組在(0.5,0.5)45將求得的解代回原方程,可以檢驗結果是否正確,命令如下:q=myfun(x)q=1.0e-009*0.23750.2957可見得到了較高精度的結果。將求得的解代回原方程,可以檢驗結果是否正確,命令如下:465.5函數(shù)極值

MATLAB提供了基于單純形算法求解函數(shù)極值的函數(shù)fmin和fmins,它們分別用于單變量函數(shù)和多變量函數(shù)的最小值,其調用格式為:x=fmin('fname',x1,x2)x=fmins('fname',x0)這兩個函數(shù)的調用格式相似。其中fmin函數(shù)用于求單變量函數(shù)的最小值點。fname是被最小化的目標函數(shù)名,x1和x2限定自變量的取值范圍。fmins函數(shù)用于求多變量函數(shù)的最小值點,x0是求解的初始值向量。5.5函數(shù)極值47MATLAB沒有專門提供求函數(shù)最大值的函數(shù),但只要注意到-f(x)在區(qū)間(a,b)上的最小值就是f(x)在(a,b)的最大值,所以fmin(f,x1,x2)返回函數(shù)f(x)在區(qū)間(x1,x2)上的最大值。MATLAB沒有專門提供求函數(shù)最大值的函數(shù),但只要注意到-f48例5-28求f(x)=x3-2x-5在[0,5]內的最小值點。(1)建立函數(shù)文件mymin.m。functionfx=mymin(x)fx=x.^3-2*x-5;(2)調用fmin函數(shù)求最小值點。x=fmin('mymin',0,5)x=0.8165例5-28求f(x)=x3-2x-5在[0,5]495.6數(shù)值積分5.6.1數(shù)值積分基本原理

求解定積分的數(shù)值方法多種多樣,如簡單的梯形法、辛普生(Simpson)法、牛頓-柯特斯(Newton-Cotes)法等都是經常采用的方法。它們的基本思想都是將整個積分區(qū)間[a,b]分成n個子區(qū)間[xi,xi+1],i=1,2,…,n,其中x1=a,xn+1=b。這樣求定積分問題就分解為求和問題。5.6數(shù)值積分505.6.2數(shù)值積分的實現(xiàn)方法1.變步長辛普生法基于變步長辛普生法,MATLAB給出了quad函數(shù)來求定積分。該函數(shù)的調用格式為:[I,n]=quad('fname',a,b,tol,trace)其中fname是被積函數(shù)名。a和b分別是定積分的下限和上限。tol用來控制積分精度,缺省時取tol=0.001。trace控制是否展現(xiàn)積分過程,若取非0則展現(xiàn)積分過程,取0則不展現(xiàn),缺省時取trace=0。返回參數(shù)I即定積分值,n為被積函數(shù)的調用次數(shù)。5.6.2數(shù)值積分的實現(xiàn)方法51例8-1求定積分。(1)建立被積函數(shù)文件fesin.m。functionf=fesin(x)f=exp(-0.5*x).*sin(x+pi/6);(2)調用數(shù)值積分函數(shù)quad求定積分。[S,n]=quad('fesin',0,3*pi)S=0.9008n=77例8-1求定積分。521.已知某班的5名學生的三門課成績列表如下:學生序號 12345 高等數(shù)學 7889647368 外語 8377807870 MATLAB語言 8291788268 試寫出有關命令,先分別找出三門課的最高分及其學生序號;然后找出三門課總分的最高分及其學生序號。2.針對上小題的成績表,求出其三門課總分存入數(shù)組ZF,再利用SORT命令對之按降序排序,同時把相應的學生序號存入數(shù)組XH。上機作業(yè):

1.已知某班的5名學生的三門課成績列表如下:上機作業(yè):533.今有多項式P1(x)=x4-2x+1,P2(x)=x2+4x-0.5,要求先求得P(x)=P1(x)+P2(x),然后計算xi=0.2*i各點上的P(xi)(i=0,1,2,…,5)值。4.試編一個m程序,將一維數(shù)組x中的N個數(shù)按顛倒的次序重新存儲。如N=5,原來x為:x=[13579]而經過顛倒處理后x中數(shù)據(jù)的次序應該為:x=[97531]上機作業(yè):

3.今有多項式P1(x)=x4-2x+1,P2(x)=x2+545、解方程組Ax=b,分別用求逆解法與直接解法求其解。6、編一個m程序,求N階方陣A的行列式的值。上機作業(yè):

5、解方程組Ax=b,分別用求逆解法與直接解法求其解。上機作555.1數(shù)據(jù)簡單統(tǒng)計處理5.2多項式計算5.3線性方程組求解5.4非線性方程數(shù)值求解5.5函數(shù)極值5.6數(shù)值積分第5講數(shù)據(jù)分析與計算問題5.1數(shù)據(jù)簡單統(tǒng)計處理第5講數(shù)據(jù)分析與計算問題565.1數(shù)據(jù)統(tǒng)計處理5.1.1最大值和最小值MATLAB提供的求數(shù)據(jù)序列的最大值和最小值的函數(shù)分別為max和min,兩個函數(shù)的調用格式和操作過程類似。1.求向量的最大值和最小值求一個向量X的最大值的函數(shù)有兩種調用格式,分別是:(1)y=max(X):返回向量X的最大值存入y,如果X中包含復數(shù)元素,則按模取最大值。5.1數(shù)據(jù)統(tǒng)計處理57(2)[y,I]=max(X):返回向量X的最大值存入y,最大值的序號存入I,如果X中包含復數(shù)元素,則按模取最大值。求向量X的最小值的函數(shù)是min(X),用法和max(X)完全相同。例5-1求向量x的最大值。命令如下:x=[-43,72,9,16,23,47];y=max(x)%求向量x中的最大值[y,l]=max(x)%求向量x中的最大值及其該元素的位置(2)[y,I]=max(X):返回向量X的最大值存入y,582.求矩陣的最大值和最小值求矩陣A的最大值的函數(shù)有3種調用格式,分別是:(1)max(A):返回一個行向量,向量的第i個元素是矩陣A的第i列上的最大值。(2)[Y,U]=max(A):返回行向量Y和U,Y向量記錄A的每列的最大值,U向量記錄每列最大值的行號。2.求矩陣的最大值和最小值59(3)max(A,[],dim):dim取1或2。dim取1時,該函數(shù)和max(A)完全相同;dim取2時,該函數(shù)返回一個列向量,其第i個元素是A矩陣的第i行上的最大值。求最小值的函數(shù)是min,其用法和max完全相同。例5-2分別求3×4矩陣x中各列和各行元素中的最大值,并求整個矩陣的最大值和最小值。(3)max(A,[],dim):dim取1或2。dim取603.兩個向量或矩陣對應元素的比較函數(shù)max和min還能對兩個同型的向量或矩陣進行比較,調用格式為:(1)U=max(A,B):A,B是兩個同型的向量或矩陣,結果U是與A,B同型的向量或矩陣,U的每個元素等于A,B對應元素的較大者。(2)U=max(A,n):n是一個標量,結果U是與A同型的向量或矩陣,U的每個元素等于A對應元素和n中的較大者。min函數(shù)的用法和max完全相同。例5-3求兩個2×3矩陣x,y所有同一位置上的較大元素構成的新矩陣p。3.兩個向量或矩陣對應元素的比較615.1.2求和與求積數(shù)據(jù)序列求和與求積的函數(shù)是sum和prod,其使用方法類似。設X是一個向量,A是一個矩陣,函數(shù)的調用格式為:sum(X):返回向量X各元素的和。prod(X):返回向量X各元素的乘積。sum(A):返回一個行向量,其第i個元素是A的第i列的元素和。5.1.2求和與求積62prod(A):返回一個行向量,其第i個元素是A的第i列的元素乘積。sum(A,dim):當dim為1時,該函數(shù)等同于sum(A);當dim為2時,返回一個列向量,其第i個元素是A的第i行的各元素之和。prod(A,dim):當dim為1時,該函數(shù)等同于prod(A);當dim為2時,返回一個列向量,其第i個元素是A的第i行的各元素乘積。例5-4求矩陣A的每行元素的乘積和全部元素的乘積。prod(A):返回一個行向量,其第i個元素是A的第i列的元635.1.3平均值和中值求數(shù)據(jù)序列平均值的函數(shù)是mean,求數(shù)據(jù)序列中值的函數(shù)是median。兩個函數(shù)的調用格式為:mean(X):返回向量X的算術平均值。median(X):返回向量X的中值。mean(A):返回一個行向量,其第i個元素是A的第i列的算術平均值。median(A):返回一個行向量,其第i個元素是A的第i列的中值。mean(A,dim):當dim為1時,該函數(shù)等同于mean(A);當dim為2時,返回一個列向量,其第i個元素是A的第i行的算術平均值。median(A,dim):當dim為1時,該函數(shù)等同于median(A);當dim為2時,返回一個列向量,其第i個元素是A的第i行的中值。例5-5分別求向量x與y的平均值和中值。5.1.3平均值和中值645.1.4累加和與累乘積在MATLAB中,使用cumsum和cumprod函數(shù)能方便地求得向量和矩陣元素的累加和與累乘積向量,函數(shù)的調用格式為:cumsum(X):返回向量X累加和向量。cumprod(X):返回向量X累乘積向量。cumsum(A):返回一個矩陣,其第i列是A的第i列的累加和向量。cumprod(A):返回一個矩陣,其第i列是A的第i列的累乘積向量。cumsum(A,dim):當dim為1時,該函數(shù)等同于cumsum(A);當dim為2時,返回一個矩陣,其第i行是A的第i行的累加和向量。cumprod(A,dim):當dim為1時,該函數(shù)等同于cumprod(A);當dim為2時,返回一個向量,其第i行是A的第i行的累乘積向量。例5-6求s的值。5.1.4累加和與累乘積655.1.5排序MATLAB中對向量X是排序函數(shù)是sort(X),函數(shù)返回一個對X中的元素按升序排列的新向量。sort函數(shù)也可以對矩陣A的各列或各行重新排序,其調用格式為:[Y,I]=sort(A,dim)其中dim指明對A的列還是行進行排序。若dim=1,則按列排;若dim=2,則按行排。Y是排序后的矩陣,而I記錄Y中的元素在A中位置。5.1.5排序66例5-9對二維矩陣做各種排序。例5-9對二維矩陣做各種排序。67§5.2多項式5.2.1多項式的建立1、多項式的表示(1)一般都是按未知量的降冪排列各項之和(2)在MATLAB中,用它的系數(shù)矢量來表示多項式:注意:若ai中有的為0,這個0不能省略,必須在系數(shù)矢量中。2、創(chuàng)建多項式的方法(1)系數(shù)矢量直接輸入法在命令窗口直接輸入多項式的系數(shù)矢量,再利用轉換函數(shù)Poly2sym將多項式由系數(shù)矢量形式轉換為符號形式?!?.2多項式5.2.1多項式的建立(2)在MATLAB中68

(2)特征多項式輸入法n階方陣的特征多項式系數(shù)矢量一定是n+1階的,同時特征多項式系數(shù)矢量的第一個元素必須為1。例.求矩陣A=[123;456;789]的特征多項式系數(shù),并轉換為多項式形式?!稟=[123;456;789];》P=poly(A)》f=poly2sym(P)(2)特征多項式輸入法例.求矩陣A=[123;469(3)由根矢量創(chuàng)建多項式已知一個多項式的全部根X求多項式系數(shù)的函數(shù)是poly(X),該函數(shù)返回以X為全部根的一個多項式P,當X是一個長度為m的向量時,P是一個長度為m+1的向量。例.由根矢量[-0.5-0.3+0.4i-0.3-0.4i]創(chuàng)建多項式》R=[-0.5-0.3+0.4i-0.3-0.4i];》P=poly(R)》f=poly2sym(P)(3)由根矢量創(chuàng)建多項式例.由根矢量[-0.5-0.3+705.2.2多項式的四則運算1.多項式的加減運算2.多項式乘法運算函數(shù)conv(P1,P2)用于求多項式P1和P2的乘積。這里,P1、P2是兩個多項式系數(shù)向量。例6-16求多項式x4+8x3-10與多項式2x2-x+3的乘積。5.2.2多項式的四則運算713.多項式除法函數(shù)[Q,r]=deconv(P1,P2)用于對多項式P1和P2作除法運算。其中Q返回多項式P1除以P2的商式,r返回P1除以P2的余式。這里,Q和r仍是多項式系數(shù)向量。deconv是conv的逆函數(shù),即有P1=conv(P2,Q)+r。例5-17求多項式x^4+8x^3-10除以多項式2x^2-x+3的結果。3.多項式除法例5-17求多項式x^4+8x^3-10除725.2.3多項式的導函數(shù)對多項式求導數(shù)的函數(shù)是:p=polyder(P):求多項式P的導函數(shù)p=polyder(P,Q):求P·Q的導函數(shù)[p,q]=polyder(P,Q):求P/Q的導函數(shù),導函數(shù)的分子存入p,分母存入q。上述函數(shù)中,參數(shù)P,Q是多項式的向量表示,結果p,q也是多項式的向量表示。5.2.3多項式的導函數(shù)73例5-18求有理分式的導數(shù)。命令如下:P=[1];Q=[1,0,5];[p,q]=polyder(P,Q)例5-18求有理分式的導數(shù)。745.2.4多項式的求值MATLAB提供了兩種求多項式值的函數(shù):

polyval與polyvalm,它們的輸入?yún)?shù)均為多項式系數(shù)向量P和自變量x。兩者的區(qū)別在于前者是代數(shù)多項式求值,而后者是矩陣多項式求值。5.2.4多項式的求值751.代數(shù)多項式求值polyval函數(shù)用來求代數(shù)多項式的值,其調用格式為:Y=polyval(P,x)若x為一數(shù)值,則求多項式在該點的值;若x為向量或矩陣,則對向量或矩陣中的每個元素求其多項式的值。例5-19已知多項式x4+8x3-10,分別取x=1.2和一個2×3矩陣為自變量計算該多項式的值。1.代數(shù)多項式求值762.矩陣多項式求值polyvalm函數(shù)用來求矩陣多項式的值,其調用格式與polyval相同,但含義不同。polyvalm函數(shù)要求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))例5-20仍以多項式x4+8x^3-10為例,取一個2×2矩陣為自變量分別用polyval和polyvalm計算該多項式的值。2.矩陣多項式求值775.2.5多項式求根n次多項式具有n個根,當然這些根可能是實根,也可能含有若干對共軛復根。MATLAB提供的roots函數(shù)用于求多項式的全部根,其調用格式為:x=roots(P)其中P為多項式的系數(shù)向量,求得的根賦給向量x,即x(1),x(2),…,x(n)分別代表多項式的n個根。5.2.5多項式求根78例5-21求多項式x4+8x3-10的根。命令如下:A=[1,8,0,0,-10];x=roots(A)若已知多項式的全部根,則可以用poly函數(shù)建立起該多項式,其調用格式為:P=poly(x)若x為具有n個元素的向量,則poly(x)建立以x為其根的多項式,且將該多項式的系數(shù)賦給向量P。例5-21求多項式x4+8x3-10的根。79例5-22已知f(x)(1)計算f(x)=0的全部根。(2)由方程f(x)=0的根構造一個多項式g(x),并與f(x)進行對比。命令如下:P=[3,0,4,-5,-7.2,5];X=roots(P)%求方程f(x)=0的根G=poly(X)%求多項式g(x)例5-22已知f(x)805.3線性方程組求解5.3.1直接解法1.利用左除運算符的直接解法對于線性方程組Ax=b,可以利用左除運算符“\”求解:x=A\b5.3線性方程組求解81例5-23用直接解法求解下列線性方程組。命令如下:A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];b=[13,-9,6,0]';x=A\b例5-23用直接解法求解下列線性方程組。822.利用矩陣的分解求解線性方程組

矩陣分解是指根據(jù)一定的原理用某種算法將一個矩陣分解成若干個矩陣的乘積。常見的矩陣分解有LU分解、QR分解、Cholesky分解,以及Schur分解、Hessenberg分解、奇異分解等。2.利用矩陣的分解求解線性方程組83(1)LU分解矩陣的LU分解就是將一個矩陣表示為一個交換下三角矩陣和一個上三角矩陣的乘積形式。線性代數(shù)中已經證明,只要方陣A是非奇異的,LU分解總是可以進行的。MATLAB提供的lu函數(shù)用于對矩陣進行LU分解,其調用格式為:[L,U]=lu(X):產生一個上三角陣U和一個變換形式的下三角陣L(行交換),使之滿足X=LU。注意,這里的矩陣X必須是方陣。[L,U,P]=lu(X):產生一個上三角陣U和一個下三角陣L以及一個置換矩陣P,使之滿足PX=LU。當然矩陣X同樣必須是方陣。實現(xiàn)LU分解后,線性方程組Ax=b的解x=U\(L\b)或x=U\(L\Pb),這樣可以大大提高運算速度。(1)LU分解84例5-24用LU分解求解例5-23中的線性方程組。命令如下:A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];b=[13,-9,6,0]';[L,U]=lu(A);x=U\(L\b)或采用LU分解的第2種格式,命令如下:[L,U,P]=lu(A);x=U\(L\P*b)例5-24用LU分解求解例5-23中的線性方程組。85(2)QR分解對矩陣X進行QR分解,就是把X分解為一個正交矩陣Q和一個上三角矩陣R的乘積形式。QR分解只能對方陣進行。MATLAB的函數(shù)qr可用于對矩陣進行QR分解,其調用格式為:[Q,R]=qr(X):產生一個一個正交矩陣Q和一個上三角矩陣R,使之滿足X=QR。[Q,R,E]=qr(X):產生一個一個正交矩陣Q、一個上三角矩陣R以及一個置換矩陣E,使之滿足XE=QR。實現(xiàn)QR分解后,線性方程組Ax=b的解x=R\(Q\b)或x=E(R\(Q\b))。(2)QR分解86例5-25用QR分解求解例5-23中的線性方程組。命令如下:A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];b=[13,-9,6,0]';[Q,R]=qr(A);x=R\(Q\b)或采用QR分解的第2種格式,命令如下:[Q,R,E]=qr(A);x=E*(R\(Q\b))例5-25用QR分解求解例5-23中的線性方程組。87(3)Cholesky分解如果矩陣X是對稱正定的,則Cholesky分解將矩陣X分解成一個下三角矩陣和上三角矩陣的乘積。設上三角矩陣為R,則下三角矩陣為其轉置,即X=R'R。MATLAB函數(shù)chol(X)用于對矩陣X進行Cholesky分解,其調用格式為:R=chol(X):產生一個上三角陣R,使R'R=X。若X為非對稱正定,則輸出一個出錯信息。[R,p]=chol(X):這個命令格式將不輸出出錯信息。當X為對稱正定的,則p=0,R與上述格式得到的結果相同;否則p為一個正整數(shù)。如果X為滿秩矩陣,則R為一個階數(shù)為q=p-1的上三角陣,且滿足R'R=X(1:q,1:q)。實現(xiàn)Cholesky分解后,線性方程組Ax=b變成R‘Rx=b,所以x=R\(R’\b)。(3)Cholesky分解88例5-26用Cholesky分解求解例5-23中的線性方程組。命令如下:A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];b=[13,-9,6,0]';R=chol(A)???Errorusing==>cholMatrixmustbepositivedefinite命令執(zhí)行時,出現(xiàn)錯誤信息,說明A為非正定矩陣。例5-26用Cholesky分解求解例5-23中的線性方程895.3.2迭代解法迭代解法非常適合求解大型系數(shù)矩陣的方程組。在數(shù)值分析中,迭代解法主要包括Jacobi迭代法、Gauss-Serdel迭代法、超松弛迭代法和兩步迭代法。1.Jacobi迭代法對于線性方程組Ax=b,如果A為非奇異方陣,即aii≠0(i=1,2,…,n),則可將A分解為A=D-L-U,其中D為對角陣,其元素為A的對角元素,L與U為A的下三角陣和上三角陣,于是Ax=b化為:x=D-1(L+U)x+D-1b與之對應的迭代公式為:x(k+1)=D-1(L+U)x(k)+D-1b這就是Jacobi迭代公式。如果序列{x(k+1)}收斂于x,則x必是方程Ax=b的解。5.3.2迭代解法90Jacobi迭代法的MATLAB函數(shù)文件Jacobi.m如下:function[y,n]=jacobi(A,b,x0,eps)ifnargin==3eps=1.0e-6;elseifnargin<3errorreturnendD=diag(diag(A));%求A的對角矩陣L=-tril(A,-1);%求A的下三角陣U=-triu(A,1);%求A的上三角陣B=D\(L+U);f=D\b;y=B*x0+f;n=1;%迭代次數(shù)whilenorm(y-x0)>=epsx0=y;y=B*x0+f;n=n+1;endJacobi迭代法的MATLAB函數(shù)文件Jacobi.m如下91例5-5用Jacobi迭代法求解下列線性方程組。設迭代初值為0,迭代精度為10-6。在命令中調用函數(shù)文件Jacobi.m,命令如下:A=[10,-1,0;-1,10,-2;0,-2,10];b=[9,7,6]';[x,n]=jacobi(A,b,[0,0,0]',1.0e-6)例5-5用Jacobi迭代法求解下列線性方程組。設迭代初922.Gauss-Serdel迭代法在Jacobi迭代過程中,計算時,已經得到,不必再用,即原來的迭代公式Dx(k+1)=(L+U)x(k)+b可以改進為Dx(k+1)=Lx(k+1)+Ux(k)+b,于是得到:x(k+1)=(D-L)-1Ux(k)+(D-L)-1b該式即為Gauss-Serdel迭代公式。和Jacobi迭代相比,Gauss-Serdel迭代用新分量代替舊分量,精度會高些。2.Gauss-Serdel迭代法93Gauss-Serdel迭代法的MATLAB函數(shù)文件gauseidel.m如下:function[y,n]=gauseidel(A,b,x0,eps)ifnargin==3eps=1.0e-6;elseifnargin<3errorreturnendD=diag(diag(A));%求A的對角矩陣L=-tril(A,-1);%求A的下三角陣U=-triu(A,1);%求A的上三角陣G=(D-L)\U;f=(D-L)\b;y=G*x0+f;n=1;%迭代次數(shù)whilenorm(y-x0)>=epsx0=y;y=G*x0+f;n=n+1;endGauss-Serdel迭代法的MATLAB函數(shù)文件gaus94例5-6用Gauss-Serdel迭代法求解下列線性方程組。設迭代初值為0,迭代精度為10-6。在命令中調用函數(shù)文件gauseidel.m,命令如下:A=[10,-1,0;-1,10,-2;0,-2,10];b=[9,7,6]';[x,n]=gauseidel(A,b,[0,0,0]',1.0e-6)例5-6用Gauss-Serdel迭代法求解下列線性方程95例5-7分別用Jacobi迭代和Gauss-Serdel迭代法求解下列線性方程組,看是否收斂。命令如下:a=[1,2,-2;1,1,1;2,2,1];b=[9;7;6];[x,n]=jacobi(a,b,[0;0;0])[x,n]=gauseidel(a,b,[0;0;0])例5-7分別用Jacobi迭代和Gauss-Serdel965.4非線性方程數(shù)值求解5.4.1單變量非線性方程求解

在MATLAB中提供了一個fzero函數(shù),可以用來求單變量非線性方程的根。該函數(shù)的調用格式為:z=fzero('fname',x0,tol,trace)其中fname是待求根的函數(shù)文件名,x0為搜索的起點。一個函數(shù)可能有多個根,但fzero函數(shù)只給出離x0最近的那個根。tol控制結果的相對精度,缺省時取tol=eps,trace指定迭代信息是否在運算中顯示,為1時顯示,為0時不顯示,缺省時取trace=0。5.4非線性方程數(shù)值求解97例5-8求f(x)=x-10x+2=0在x0=0.5附近的根。步驟如下:(1)建立函數(shù)文件funx.m。functionfx=funx(x)fx=x-10.^x+2;(2)調用fzero函數(shù)求根。z=fzero('funx',0.5)z=0.3758例5-8求f(x)=x-10x+2=0在x0=0985.4.2非線性方程組的求解對于非線性方程組F(X)=0,用fsolve函數(shù)求其數(shù)值解。fsolve函數(shù)的調用格式為:X=fsolve('fun',X0,option)其中X為返回的解,fun是用于定義需求解的非線性方程組的函數(shù)文件名,X0是求根過程的初值,option為最優(yōu)化工具箱的選項設定。最優(yōu)化工具箱提供了20多個選項,用戶可以使用optimset命令將它們顯示出來。如果想改變其中某個選項,則可以調用optimset()函數(shù)來完成。例如,Display選項決定函數(shù)調用時中間結果的顯示方式,其中‘off’為不顯示,‘iter’表示每步都顯示,‘final’只顯示最終結果。optimset(‘Display’,‘off’)將設定Display選項為‘off’。5.4.2非線性方程

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論