第6章MATLAB數(shù)值計(jì)算61-數(shù)據(jù)處理與多項(xiàng)式計(jì)算62-數(shù)值微積分63-課件_第1頁
第6章MATLAB數(shù)值計(jì)算61-數(shù)據(jù)處理與多項(xiàng)式計(jì)算62-數(shù)值微積分63-課件_第2頁
第6章MATLAB數(shù)值計(jì)算61-數(shù)據(jù)處理與多項(xiàng)式計(jì)算62-數(shù)值微積分63-課件_第3頁
第6章MATLAB數(shù)值計(jì)算61-數(shù)據(jù)處理與多項(xiàng)式計(jì)算62-數(shù)值微積分63-課件_第4頁
第6章MATLAB數(shù)值計(jì)算61-數(shù)據(jù)處理與多項(xiàng)式計(jì)算62-數(shù)值微積分63-課件_第5頁
已閱讀5頁,還剩161頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第6章MATLAB數(shù)值計(jì)算6.1數(shù)據(jù)處理與多項(xiàng)式計(jì)算6.2數(shù)值微積分6.3離散傅立葉變換6.4線性方程組求解6.5非線性方程與最優(yōu)化問題求解6.6常微分方程的數(shù)值求解6.7稀疏矩陣第6章MATLAB數(shù)值計(jì)算16.1數(shù)據(jù)處理與多項(xiàng)式計(jì)算

6.1.1數(shù)據(jù)統(tǒng)計(jì)與分析1.求矩陣最大元素和最小元素MATLAB提供的求數(shù)據(jù)序列的最大值和最小值的函數(shù)分別為max和min,兩個(gè)函數(shù)的調(diào)用格式和操作過程類似。(1)求向量的最大值和最小值y=max(X):返回向量X的最大值存入y,如果X中包含復(fù)數(shù)元素,則按模取最大值。6.1數(shù)據(jù)處理與多項(xiàng)式計(jì)算2[y,I]=max(X):返回向量X的最大值存入y,最大值的序號(hào)存入I,如果X中包含復(fù)數(shù)元素,則按模取最大值。求向量X的最小值的函數(shù)是min(X),用法和max(X)完全相同。例求向量x的最大值。命令如下:x=[-43,72,9,16,23,47];y=max(x)%求向量x中的最大值[y,l]=max(x)%求向量x中的最大值及其該元素的位置[y,I]=max(X):返回向量X的最大值存入y,3(2)求矩陣的最大值和最小值求矩陣A的最大值的函數(shù)有3種調(diào)用格式,分別是:max(A):返回一個(gè)行向量,向量的第i個(gè)元素是矩陣A的第i列上的最大值。[Y,U]=max(A):返回行向量Y和U,Y向量記錄A的每列的最大值,U向量記錄每列最大值的行號(hào)。(2)求矩陣的最大值和最小值4max(A,[],dim):dim取1或2。dim取1時(shí),該函數(shù)和max(A)完全相同;dim取2時(shí),該函數(shù)返回一個(gè)列向量,其第i個(gè)元素是A矩陣的第i行上的最大值。求最小值的函數(shù)是min,其用法和max完全相同。例6.1分別矩陣A中各列和各行元素中的最大值,并求整個(gè)矩陣的最大值和最小值。max(A,[],dim):dim取1或2。dim取5(3)兩個(gè)向量或矩陣對(duì)應(yīng)元素的比較函數(shù)max和min還能對(duì)兩個(gè)同型的向量或矩陣進(jìn)行比較,調(diào)用格式為:U=max(A,B):A,B是兩個(gè)同型的向量或矩陣,結(jié)果U是與A,B同型的向量或矩陣,U的每個(gè)元素等于A,B對(duì)應(yīng)元素的較大者。U=max(A,n):n是一個(gè)標(biāo)量,結(jié)果U是與A同型的向量或矩陣,U的每個(gè)元素等于A對(duì)應(yīng)元素和n中的較大者。min函數(shù)的用法和max完全相同。例求兩個(gè)2×3矩陣x,y所有同一位置上的較大元素構(gòu)成的新矩陣p。(3)兩個(gè)向量或矩陣對(duì)應(yīng)元素的比較62.求矩陣的平均值和中值求數(shù)據(jù)序列平均值的函數(shù)是mean,求數(shù)據(jù)序列中值的函數(shù)是median。兩個(gè)函數(shù)的調(diào)用格式為:mean(X):返回向量X的算術(shù)平均值。median(X):返回向量X的中值。mean(A):返回一個(gè)行向量,其第i個(gè)元素是A的第i列的算術(shù)平均值。median(A):返回一個(gè)行向量,其第i個(gè)元素是A的第i列的中值。mean(A,dim):當(dāng)dim為1時(shí),該函數(shù)等同于mean(A);當(dāng)dim為2時(shí),返回一個(gè)列向量,其第i個(gè)元素是A的第i行的算術(shù)平均值。median(A,dim):當(dāng)dim為1時(shí),該函數(shù)等同于median(A);當(dāng)dim為2時(shí),返回一個(gè)列向量,其第i個(gè)元素是A的第i行的中值。2.求矩陣的平均值和中值73.矩陣元素求和與求積數(shù)據(jù)序列求和與求積的函數(shù)是sum和prod,其使用方法類似。設(shè)X是一個(gè)向量,A是一個(gè)矩陣,函數(shù)的調(diào)用格式為:sum(X):返回向量X各元素的和。prod(X):返回向量X各元素的乘積。sum(A):返回一個(gè)行向量,其第i個(gè)元素是A的第i列的元素和。3.矩陣元素求和與求積8prod(A):返回一個(gè)行向量,其第i個(gè)元素是A的第i列的元素乘積。sum(A,dim):當(dāng)dim為1時(shí),該函數(shù)等同于sum(A);當(dāng)dim為2時(shí),返回一個(gè)列向量,其第i個(gè)元素是A的第i行的各元素之和。prod(A,dim):當(dāng)dim為1時(shí),該函數(shù)等同于prod(A);當(dāng)dim為2時(shí),返回一個(gè)列向量,其第i個(gè)元素是A的第i行的各元素乘積。例6.2求矩陣A的每行元素的乘積和全部元素的乘積。prod(A):返回一個(gè)行向量,其第i個(gè)元素是A的第i列的元94.矩陣元素累加和與累乘積在MATLAB中,使用cumsum和cumprod函數(shù)能方便地求得向量和矩陣元素的累加和與累乘積向量,函數(shù)的調(diào)用格式為:cumsum(X):返回向量X累加和向量。cumprod(X):返回向量X累乘積向量。cumsum(A):返回一個(gè)矩陣,其第i列是A的第i列的累加和向量。cumprod(A):返回一個(gè)矩陣,其第i列是A的第i列的累乘積向量。cumsum(A,dim):當(dāng)dim為1時(shí),該函數(shù)等同于cumsum(A);當(dāng)dim為2時(shí),返回一個(gè)矩陣,其第i行是A的第i行的累加和向量。cumprod(A,dim):當(dāng)dim為1時(shí),該函數(shù)等同于cumprod(A);當(dāng)dim為2時(shí),返回一個(gè)向量,其第i行是A的第i行的累乘積向量。4.矩陣元素累加和與累乘積105.求標(biāo)準(zhǔn)方差在MATLAB中,提供了計(jì)算數(shù)據(jù)序列的標(biāo)準(zhǔn)方差的函數(shù)std。對(duì)于向量X,std(X)返回一個(gè)標(biāo)準(zhǔn)方差。對(duì)于矩陣A,std(A)返回一個(gè)行向量,它的各個(gè)元素便是矩陣A各列或各行的標(biāo)準(zhǔn)方差。std函數(shù)的一般調(diào)用格式為:Y=std(A,flag,dim)其中dim取1或2。當(dāng)dim=1時(shí),求各列元素的標(biāo)準(zhǔn)方差;當(dāng)dim=2時(shí),則求各行元素的標(biāo)準(zhǔn)方差。flag取0或1,當(dāng)flag=0時(shí),按σ1所列公式計(jì)算標(biāo)準(zhǔn)方差,當(dāng)flag=1時(shí),按σ2所列公式計(jì)算標(biāo)準(zhǔn)方差。缺省flag=0,dim=1。例6.4對(duì)二維矩陣x,從不同維方向求出其標(biāo)準(zhǔn)方差。5.求標(biāo)準(zhǔn)方差116.相關(guān)系數(shù)MATLAB提供了corrcoef函數(shù),可以求出數(shù)據(jù)的相關(guān)系數(shù)矩陣。corrcoef函數(shù)的調(diào)用格式為:corrcoef(X):返回從矩陣X形成的一個(gè)相關(guān)系數(shù)矩陣。此相關(guān)系數(shù)矩陣的大小與矩陣X一樣。它把矩陣X的每列作為一個(gè)變量,然后求它們的相關(guān)系數(shù)。corrcoef(X,Y):在這里,X,Y是向量,它們與corrcoef([X,Y])的作用一樣。6.相關(guān)系數(shù)12例6.5生成滿足正態(tài)分布的10000×5隨機(jī)矩陣,然后求各列元素的均值和標(biāo)準(zhǔn)方差,再求這5列隨機(jī)數(shù)據(jù)的相關(guān)系數(shù)矩陣。命令如下:X=randn(10000,5);M=mean(X)D=std(X)R=corrcoef(X)例6.5生成滿足正態(tài)分布的10000×5隨機(jī)矩陣,然后求137.排序MATLAB中對(duì)向量X是排序函數(shù)是sort(X),函數(shù)返回一個(gè)對(duì)X中的元素按升序排列的新向量。sort函數(shù)也可以對(duì)矩陣A的各列或各行重新排序,其調(diào)用格式為:[Y,I]=sort(A,dim)其中dim指明對(duì)A的列還是行進(jìn)行排序。若dim=1,則按列排;若dim=2,則按行排。Y是排序后的矩陣,而I記錄Y中的元素在A中位置。7.排序146.1.2數(shù)據(jù)插值1.一維數(shù)據(jù)插值在MATLAB中,實(shí)現(xiàn)這些插值的函數(shù)是interp1,其調(diào)用格式為:Y1=interp1(X,Y,X1,'method')函數(shù)根據(jù)X,Y的值,計(jì)算函數(shù)在X1處的值。X,Y是兩個(gè)等長的已知向量,分別描述采樣點(diǎn)和樣本值,X1是一個(gè)向量或標(biāo)量,描述欲插值的點(diǎn),Y1是一個(gè)與X1等長的插值結(jié)果。method是插值方法,允許的取值有‘linear’、‘nearest’、‘cubic’、‘spline’。6.1.2數(shù)據(jù)插值15注意:X1的取值范圍不能超出X的給定范圍,否則,會(huì)給出“NaN”錯(cuò)誤。

例6.7給出概率積分的數(shù)據(jù)表如表6.1所示,用不同的插值方法計(jì)算f(0.472)。

例6.8某檢測參數(shù)f隨時(shí)間t的采樣結(jié)果如表5.1,用數(shù)據(jù)插值法計(jì)算t=2,7,12,17,22,17,32,37,42,47,52,57時(shí)的f值。注意:X1的取值范圍不能超出X的給定范圍,否則,會(huì)給出“Na162.二維數(shù)據(jù)插值在MATLAB中,提供了解決二維插值問題的函數(shù)interp2,其調(diào)用格式為:Z1=interp2(X,Y,Z,X1,Y1,'method')其中X,Y是兩個(gè)向量,分別描述兩個(gè)參數(shù)的采樣點(diǎn),Z是與參數(shù)采樣點(diǎn)對(duì)應(yīng)的函數(shù)值,X1,Y1是兩個(gè)向量或標(biāo)量,描述欲插值的點(diǎn)。Z1是根據(jù)相應(yīng)的插值方法得到的插值結(jié)果。method的取值與一維插值函數(shù)相同。X,Y,Z也可以是矩陣形式。同樣,X1,Y1的取值范圍不能超出X,Y的給定范圍,否則,會(huì)給出“NaN”錯(cuò)誤。2.二維數(shù)據(jù)插值17例6.9設(shè)z=x2+y2,對(duì)z函數(shù)在[0,1]×[0,2]區(qū)域內(nèi)進(jìn)行插值。例6.10某實(shí)驗(yàn)對(duì)一根長10米的鋼軌進(jìn)行熱源的溫度傳播測試。用x表示測量點(diǎn)0:2.5:10(米),用h表示測量時(shí)間0:30:60(秒),用T表示測試所得各點(diǎn)的溫度(℃)。試用線性插值求出在一分鐘內(nèi)每隔10秒、鋼軌每隔0.5米處的溫度。例6.9設(shè)z=x2+y2,對(duì)z函數(shù)在[0,1]×[0,2186.1.3曲線擬合在MATLAB中,用polyfit函數(shù)來求得最小二乘擬合多項(xiàng)式的系數(shù),再用polyval函數(shù)按所得的多項(xiàng)式計(jì)算所給出的點(diǎn)上的函數(shù)近似值。polyfit函數(shù)的調(diào)用格式為:[P,S]=polyfit(X,Y,m)函數(shù)根據(jù)采樣點(diǎn)X和采樣點(diǎn)函數(shù)值Y,產(chǎn)生一個(gè)m次多項(xiàng)式P及其在采樣點(diǎn)的誤差向量S。其中X,Y是兩個(gè)等長的向量,P是一個(gè)長度為m+1的向量,P的元素為多項(xiàng)式系數(shù)。polyval函數(shù)的功能是按多項(xiàng)式的系數(shù)計(jì)算x點(diǎn)多項(xiàng)式的值。6.1.3曲線擬合19例6.11用一個(gè)3次多項(xiàng)式在區(qū)間[0,2π]內(nèi)逼近函數(shù)。命令如下:X=linspace(0,2*pi,50);Y=sin(X);P=polyfit(X,Y,3)%得到3次多項(xiàng)式的系數(shù)和誤差例6.11用一個(gè)3次多項(xiàng)式在區(qū)間[0,2π]內(nèi)逼近函數(shù)。206.1.4多項(xiàng)式計(jì)算1.多項(xiàng)式的四則運(yùn)算(1)多項(xiàng)式的加減運(yùn)算(2)多項(xiàng)式乘法運(yùn)算函數(shù)conv(P1,P2)用于求多項(xiàng)式P1和P2的乘積。這里,P1、P2是兩個(gè)多項(xiàng)式系數(shù)向量。6.1.4多項(xiàng)式計(jì)算21(3)多項(xiàng)式除法函數(shù)[Q,r]=deconv(P1,P2)用于對(duì)多項(xiàng)式P1和P2作除法運(yùn)算。其中Q返回多項(xiàng)式P1除以P2的商式,r返回P1除以P2的余式。這里,Q和r仍是多項(xiàng)式系數(shù)向量。deconv是conv的逆函數(shù),即有P1=conv(P2,Q)+r。(3)多項(xiàng)式除法222.多項(xiàng)式的導(dǎo)函數(shù)對(duì)多項(xiàng)式求導(dǎo)數(shù)的函數(shù)是:p=polyder(P):求多項(xiàng)式P的導(dǎo)函數(shù)p=polyder(P,Q):求P·Q的導(dǎo)函數(shù)[p,q]=polyder(P,Q):求P/Q的導(dǎo)函數(shù),導(dǎo)函數(shù)的分子存入p,分母存入q。上述函數(shù)中,參數(shù)P,Q是多項(xiàng)式的向量表示,結(jié)果p,q也是多項(xiàng)式的向量表示。2.多項(xiàng)式的導(dǎo)函數(shù)233.多項(xiàng)式求值MATLAB提供了兩種求多項(xiàng)式值的函數(shù):polyval與polyvalm,它們的輸入?yún)?shù)均為多項(xiàng)式系數(shù)向量P和自變量x。兩者的區(qū)別在于前者是代數(shù)多項(xiàng)式求值,而后者是矩陣多項(xiàng)式求值。3.多項(xiàng)式求值24(1)代數(shù)多項(xiàng)式求值polyval函數(shù)用來求代數(shù)多項(xiàng)式的值,其調(diào)用格式為:Y=polyval(P,x)若x為一數(shù)值,則求多項(xiàng)式在該點(diǎn)的值;若x為向量或矩陣,則對(duì)向量或矩陣中的每個(gè)元素求其多項(xiàng)式的值。例6.14已知多項(xiàng)式x4+8x3-10,分別取x=1.2和一個(gè)2×3矩陣為自變量計(jì)算該多項(xiàng)式的值。(1)代數(shù)多項(xiàng)式求值25(2)矩陣多項(xiàng)式求值polyvalm函數(shù)用來求矩陣多項(xiàng)式的值,其調(diào)用格式與polyval相同,但含義不同。polyvalm函數(shù)要求x為方陣,它以方陣為自變量求多項(xiàng)式的值。設(shè)A為方陣,P代表多項(xiàng)式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))例6.15仍以多項(xiàng)式x4+8x3-10為例,取一個(gè)2×2矩陣為自變量分別用polyval和polyvalm計(jì)算該多項(xiàng)式的值。(2)矩陣多項(xiàng)式求值264.多項(xiàng)式求根n次多項(xiàng)式具有n個(gè)根,當(dāng)然這些根可能是實(shí)根,也可能含有若干對(duì)共軛復(fù)根。MATLAB提供的roots函數(shù)用于求多項(xiàng)式的全部根,其調(diào)用格式為:x=roots(P)其中P為多項(xiàng)式的系數(shù)向量,求得的根賦給向量x,即x(1),x(2),…,x(n)分別代表多項(xiàng)式的n個(gè)根。4.多項(xiàng)式求根27例6.16求多項(xiàng)式x4+8x3-10的根。命令如下:A=[1,8,0,0,-10];x=roots(A)若已知多項(xiàng)式的全部根,則可以用poly函數(shù)建立起該多項(xiàng)式,其調(diào)用格式為:P=poly(x)若x為具有n個(gè)元素的向量,則poly(x)建立以x為其根的多項(xiàng)式,且將該多項(xiàng)式的系數(shù)賦給向量P。例6.16求多項(xiàng)式x4+8x3-10的根。28例6.17已知f(x)(1)計(jì)算f(x)=0的全部根。(2)由方程f(x)=0的根構(gòu)造一個(gè)多項(xiàng)式g(x),并與f(x)進(jìn)行對(duì)比。命令如下:P=[3,0,4,-5,-7.2,5];X=roots(P)%求方程f(x)=0的根G=poly(X)%求多項(xiàng)式g(x)例6.17已知f(x)296.2數(shù)值微積分6.2.1數(shù)值微分1.數(shù)值差分與差商2.數(shù)值微分的實(shí)現(xiàn)在MATLAB中,沒有直接提供求數(shù)值導(dǎo)數(shù)的函數(shù),只有計(jì)算向前差分的函數(shù)diff,其調(diào)用格式為:DX=diff(X):計(jì)算向量X的向前差分,DX(i)=X(i+1)-X(i),i=1,2,…,n-1。DX=diff(X,n):計(jì)算X的n階向前差分。例如,diff(X,2)=diff(diff(X))。DX=diff(A,n,dim):計(jì)算矩陣A的n階差分,dim=1時(shí)(缺省狀態(tài)),按列計(jì)算差分;dim=2,按行計(jì)算差分。6.2數(shù)值微積分6.2.1數(shù)值微分30例6.18設(shè)x由[0,2π]間均勻分布的10個(gè)點(diǎn)組成,求sinx的1~3階差分。命令如下:X=linspace(0,2*pi,10);Y=sin(X);DY=diff(Y);%計(jì)算Y的一階差分D2Y=diff(Y,2);%計(jì)算Y的二階差分,也可用命令diff(DY)計(jì)算D3Y=diff(Y,3);%計(jì)算Y的三階差分,也可用diff(D2Y)或diff(DY,2)例6.18設(shè)x由[0,2π]間均勻分布的10個(gè)點(diǎn)組成,求31例6.19用不同的方法求函數(shù)f(x)的數(shù)值導(dǎo)數(shù),并在同一個(gè)坐標(biāo)系中做出f'(x)的圖像。程序如下:f=inline('sqrt(x.^3+2*x.^2-x+12)+(x+5).^(1/6)+5*x+2');g=inline('(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ù)dpdpx=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,'-');%作圖例6.19用不同的方法求函數(shù)f(x)的數(shù)值導(dǎo)數(shù),并在同一326.2.2數(shù)值積分1.數(shù)值積分基本原理求解定積分的數(shù)值方法多種多樣,如簡單的梯形法、辛普生(Simpson)法、牛頓-柯特斯(Newton-Cotes)法等都是經(jīng)常采用的方法。它們的基本思想都是將整個(gè)積分區(qū)間[a,b]分成n個(gè)子區(qū)間[xi,xi+1],i=1,2,…,n,其中x1=a,xn+1=b。這樣求定積分問題就分解為求和問題。6.2.2數(shù)值積分332.數(shù)值積分的實(shí)現(xiàn)(1)被積函數(shù)是一個(gè)解析式MATLAB提供了quad函數(shù)和quadl函數(shù)來求定積分。它們的調(diào)用格式為:quad(filename,a,b,tol,trace)quadl(filename,a,b,tol,trace)2.數(shù)值積分的實(shí)現(xiàn)34例6.20用兩種不同的方法求定積分。先建立一個(gè)函數(shù)文件ex.m:functionex=ex(x)ex=exp(-x.^2);然后在MATLAB命令窗口,輸入命令:formatlongI=quad('ex',0,1)%注意函數(shù)名應(yīng)加字符引號(hào)I=0.74682418072642I=quadl('ex',0,1)I=0.74682413398845也可不建立關(guān)于被積函數(shù)的函數(shù)文件,而使用語句函數(shù)(內(nèi)聯(lián)函數(shù))求解,命令如下:g=inline('exp(-x.^2)');%定義一個(gè)語句函數(shù)g(x)=exp(-x^2)I=quadl(g,0,1)%注意函數(shù)名不加'號(hào)I=0.74682413398845formatshort例6.20用兩種不同的方法求定積分。35(2)被積函數(shù)由一個(gè)表格定義在科學(xué)實(shí)驗(yàn)和工程應(yīng)用中,函數(shù)關(guān)系往往是不知道的,只有實(shí)驗(yàn)測定的一組樣本點(diǎn)和樣本值,這時(shí),就無法使用quad函數(shù)計(jì)算其定積分。在MATLAB中,對(duì)由表格形式定義的函數(shù)關(guān)系的求定積分問題用trapz(X,Y)函數(shù)。其中向量X、Y定義函數(shù)關(guān)系Y=f(X)。X、Y是兩個(gè)等長的向量:X=(x1,x2,…,xn),Y=(y1,y2,…,yn),并且x1<x2<…<xn,積分區(qū)間是[x1,xn]。(2)被積函數(shù)由一個(gè)表格定義36例6.21用trapz函數(shù)計(jì)算定積分。在MATLAB命令窗口,輸入命令:X=0:0.01:1;Y=exp(-X.^2);trapz(X,Y)ans=0.7468例6.21用trapz函數(shù)計(jì)算定積分。37(3)二重積分?jǐn)?shù)值求解使用MATLAB提供的dblquad函數(shù)就可以直接求出上述二重定積分的數(shù)值解。該函數(shù)的調(diào)用格式為:I=dblquad(f,a,b,c,d,tol,trace)該函數(shù)求f(x,y)在[a,b]×[c,d]區(qū)域上的二重定積分。參數(shù)tol,trace的用法與函數(shù)quad完全相同。(3)二重積分?jǐn)?shù)值求解38調(diào)用函數(shù)quad8求定積分:formatlong;fx=inline('exp(-x)');[I,n]=quad8(fx,1,2.5,1e-10)I=0.28579444254754n=33調(diào)用函數(shù)quad8求定積分:39例6.22計(jì)算二重定積分。(1)建立一個(gè)函數(shù)文件fxy.m:functionf=fxy(x,y)globalki;ki=ki+1;%ki用于統(tǒng)計(jì)被積函數(shù)的調(diào)用次數(shù)f=exp(-x.^2/2).*sin(x.^2+y);(2)調(diào)用dblquad函數(shù)求解。globalki;ki=0;I=dblquad('fxy',-2,2,-1,1)kiI=1.57449318974494ki=1038

例6.22計(jì)算二重定積分。406.3離散傅立葉變換6.3.1離散傅立葉變換算法簡要6.3.2離散傅立葉變換的實(shí)現(xiàn)一維離散傅立葉變換函數(shù),其調(diào)用格式與功能為:(1)fft(X):返回向量X的離散傅立葉變換。設(shè)X的長度(即元素個(gè)數(shù))為N,若N為2的冪次,則為以2為基數(shù)的快速傅立葉變換,否則為運(yùn)算速度很慢的非2冪次的算法。對(duì)于矩陣X,fft(X)應(yīng)用于矩陣的每一列。6.3離散傅立葉變換41(2)fft(X,N):計(jì)算N點(diǎn)離散傅立葉變換。它限定向量的長度為N,若X的長度小于N,則不足部分補(bǔ)上零;若大于N,則刪去超出N的那些元素。對(duì)于矩陣X,它同樣應(yīng)用于矩陣的每一列,只是限定了向量的長度為N。(3)fft(X,[],dim)或fft(X,N,dim):這是對(duì)于矩陣而言的函數(shù)調(diào)用格式,前者的功能與FFT(X)基本相同,而后者則與FFT(X,N)基本相同。只是當(dāng)參數(shù)dim=1時(shí),該函數(shù)作用于X的每一列;當(dāng)dim=2時(shí),則作用于X的每一行。(2)fft(X,N):計(jì)算N點(diǎn)離散傅立葉變換。它限定向量42值得一提的是,當(dāng)已知給出的樣本數(shù)N0不是2的冪次時(shí),可以取一個(gè)N使它大于N0且是2的冪次,然后利用函數(shù)格式fft(X,N)或fft(X,N,dim)便可進(jìn)行快速傅立葉變換。這樣,計(jì)算速度將大大加快。相應(yīng)地,一維離散傅立葉逆變換函數(shù)是ifft。ifft(F)返回F的一維離散傅立葉逆變換;ifft(F,N)為N點(diǎn)逆變換;ifft(F,[],dim)或ifft(F,N,dim)則由N或dim確定逆變換的點(diǎn)數(shù)或操作方向。值得一提的是,當(dāng)已知給出的樣本數(shù)N0不是2的冪次時(shí),可以取一43例6.23給定數(shù)學(xué)函數(shù)x(t)=12sin(2π×10t+π/4)+5cos(2π×40t)取N=128,試對(duì)t從0~1秒采樣,用fft作快速傅立葉變換,繪制相應(yīng)的振幅-頻率圖。在0~1秒時(shí)間范圍內(nèi)采樣128點(diǎn),從而可以確定采樣周期和采樣頻率。由于離散傅立葉變換時(shí)的下標(biāo)應(yīng)是從0到N-1,故在實(shí)際應(yīng)用時(shí)下標(biāo)應(yīng)該前移1。又考慮到對(duì)離散傅立葉變換來說,其振幅|F(k)|是關(guān)于N/2對(duì)稱的,故只須使k從0到N/2即可。例6.23給定數(shù)學(xué)函數(shù)44程序如下:N=128;%采樣點(diǎn)數(shù)T=1;%采樣時(shí)間終點(diǎn)t=linspace(0,T,N);%給出N個(gè)采樣時(shí)間ti(I=1:N)x=12*sin(2*pi*10*t+pi/4)+5*cos(2*pi*40*t);%求各采樣點(diǎn)樣本值xdt=t(2)-t(1);%采樣周期f=1/dt;%采樣頻率(Hz)X=fft(x);%計(jì)算x的快速傅立葉變換XF=X(1:N/2+1);%F(k)=X(k)(k=1:N/2+1)f=f*(0:N/2)/N;%使頻率軸f從零開始plot(f,abs(F),'-*')%繪制振幅-頻率圖xlabel('Frequency');ylabel('|F(k)|')程序如下:456.4線性方程組求解6.4.1直接解法1.利用左除運(yùn)算符的直接解法對(duì)于線性方程組Ax=b,可以利用左除運(yùn)算符“\”求解:x=A\b6.4線性方程組求解46例6.24用直接解法求解下列線性方程組。命令如下: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例6.24用直接解法求解下列線性方程組。472.利用矩陣的分解求解線性方程組矩陣分解是指根據(jù)一定的原理用某種算法將一個(gè)矩陣分解成若干個(gè)矩陣的乘積。常見的矩陣分解有LU分解、QR分解、Cholesky分解,以及Schur分解、Hessenberg分解、奇異分解等。2.利用矩陣的分解求解線性方程組48(1)LU分解矩陣的LU分解就是將一個(gè)矩陣表示為一個(gè)交換下三角矩陣和一個(gè)上三角矩陣的乘積形式。線性代數(shù)中已經(jīng)證明,只要方陣A是非奇異的,LU分解總是可以進(jìn)行的。MATLAB提供的lu函數(shù)用于對(duì)矩陣進(jìn)行LU分解,其調(diào)用格式為:[L,U]=lu(X):產(chǎn)生一個(gè)上三角陣U和一個(gè)變換形式的下三角陣L(行交換),使之滿足X=LU。注意,這里的矩陣X必須是方陣。[L,U,P]=lu(X):產(chǎn)生一個(gè)上三角陣U和一個(gè)下三角陣L以及一個(gè)置換矩陣P,使之滿足PX=LU。當(dāng)然矩陣X同樣必須是方陣。實(shí)現(xiàn)LU分解后,線性方程組Ax=b的解x=U\(L\b)或x=U\(L\Pb),這樣可以大大提高運(yùn)算速度。(1)LU分解49例6.25用LU分解求解例6.24中的線性方程組。命令如下: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)例6.25用LU分解求解例6.24中的線性方程組。50(2)QR分解對(duì)矩陣X進(jìn)行QR分解,就是把X分解為一個(gè)正交矩陣Q和一個(gè)上三角矩陣R的乘積形式。QR分解只能對(duì)方陣進(jìn)行。MATLAB的函數(shù)qr可用于對(duì)矩陣進(jìn)行QR分解,其調(diào)用格式為:[Q,R]=qr(X):產(chǎn)生一個(gè)一個(gè)正交矩陣Q和一個(gè)上三角矩陣R,使之滿足X=QR。[Q,R,E]=qr(X):產(chǎn)生一個(gè)一個(gè)正交矩陣Q、一個(gè)上三角矩陣R以及一個(gè)置換矩陣E,使之滿足XE=QR。實(shí)現(xiàn)QR分解后,線性方程組Ax=b的解x=R\(Q\b)或x=E(R\(Q\b))。(2)QR分解51例6.26用QR分解求解例6.24中的線性方程組。命令如下: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))例6.26用QR分解求解例6.24中的線性方程組。52(3)Cholesky分解如果矩陣X是對(duì)稱正定的,則Cholesky分解將矩陣X分解成一個(gè)下三角矩陣和上三角矩陣的乘積。設(shè)上三角矩陣為R,則下三角矩陣為其轉(zhuǎn)置,即X=R'R。MATLAB函數(shù)chol(X)用于對(duì)矩陣X進(jìn)行Cholesky分解,其調(diào)用格式為:R=chol(X):產(chǎn)生一個(gè)上三角陣R,使R'R=X。若X為非對(duì)稱正定,則輸出一個(gè)出錯(cuò)信息。[R,p]=chol(X):這個(gè)命令格式將不輸出出錯(cuò)信息。當(dāng)X為對(duì)稱正定的,則p=0,R與上述格式得到的結(jié)果相同;否則p為一個(gè)正整數(shù)。如果X為滿秩矩陣,則R為一個(gè)階數(shù)為q=p-1的上三角陣,且滿足R'R=X(1:q,1:q)。實(shí)現(xiàn)Cholesky分解后,線性方程組Ax=b變成R‘Rx=b,所以x=R\(R’\b)。(3)Cholesky分解53例6.27用Cholesky分解求解例6.24中的線性方程組。命令如下: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í)行時(shí),出現(xiàn)錯(cuò)誤信息,說明A為非正定矩陣。例6.27用Cholesky分解求解例6.24中的線性方546.4.2迭代解法迭代解法非常適合求解大型系數(shù)矩陣的方程組。在數(shù)值分析中,迭代解法主要包括Jacobi迭代法、Gauss-Serdel迭代法、超松弛迭代法和兩步迭代法。1.Jacobi迭代法對(duì)于線性方程組Ax=b,如果A為非奇異方陣,即aii≠0(i=1,2,…,n),則可將A分解為A=D-L-U,其中D為對(duì)角陣,其元素為A的對(duì)角元素,L與U為A的下三角陣和上三角陣,于是Ax=b化為:x=D-1(L+U)x+D-1b與之對(duì)應(yīng)的迭代公式為:x(k+1)=D-1(L+U)x(k)+D-1b這就是Jacobi迭代公式。如果序列{x(k+1)}收斂于x,則x必是方程Ax=b的解。6.4.2迭代解法55Jacobi迭代法的MATLAB函數(shù)文件Jacobi.m如下:function[y,n]=jacobi(A,b,x0,eps)ifnargin==3eps=1.0e-6;elseifnargin<3errorreturnendD=diag(diag(A));%求A的對(duì)角矩陣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如下56例6.28用Jacobi迭代法求解線性方程組。設(shè)迭代初值為0,迭代精度為10-6。在命令中調(diào)用函數(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)例6.28用Jacobi迭代法求解線性方程組。設(shè)迭代初值572.Gauss-Serdel迭代法在Jacobi迭代過程中,計(jì)算時(shí),已經(jīng)得到,不必再用,即原來的迭代公式Dx(k+1)=(L+U)x(k)+b可以改進(jìn)為Dx(k+1)=Lx(k+1)+Ux(k)+b,于是得到:x(k+1)=(D-L)-1Ux(k)+(D-L)-1b該式即為Gauss-Serdel迭代公式。和Jacobi迭代相比,Gauss-Serdel迭代用新分量代替舊分量,精度會(huì)高些。2.Gauss-Serdel迭代法58Gauss-Serdel迭代法的MATLAB函數(shù)文件gauseidel.m如下:function[y,n]=gauseidel(A,b,x0,eps)ifnargin==3eps=1.0e-6;elseifnargin<3errorreturnendD=diag(diag(A));%求A的對(duì)角矩陣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ù)文件gaus59例6.29用Gauss-Serdel迭代法求解下列線性方程組。設(shè)迭代初值為0,迭代精度為10-6。在命令中調(diào)用函數(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)例6.29用Gauss-Serdel迭代法求解下列線性方60例6.30分別用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])例6.30分別用Jacobi迭代和Gauss-Serde616.4.3求線性方程組的通解線性方程組的求解分為兩類:一類是求方程組的惟一解即特解,另一類是求方程組的無窮解即通解。這里對(duì)線性方程組

Ax=b的求解理論作一個(gè)歸納。(1)當(dāng)系數(shù)矩陣A是一個(gè)滿秩方陣時(shí),方程Ax=b稱為恰定方程,方程有惟一解x=A-1b,這是最基本的一種情況。一般用x=A\b求解速度更快。(2)當(dāng)方程組右端向量b=0時(shí),方程稱為齊次方程組。齊次方程組總有零解,因此稱解x=0為平凡解。當(dāng)系數(shù)矩陣A的秩小于n(n為方程組中未知變量的個(gè)數(shù))時(shí),齊次方程組有無窮多個(gè)非平凡解,其通解中包含n-rank(A)個(gè)線性無關(guān)的解向量,用MATLAB的函數(shù)null(A,'r')可求得基礎(chǔ)解系。6.4.3求線性方程組的通解62(3)當(dāng)方程組右端向量b≠0時(shí),系數(shù)矩陣的秩rank(A)與其增廣矩陣的秩rank([A,b])是判斷其是否有解的基本條件:①當(dāng)rank(A)=rank([A,b])=n時(shí),方程組有惟一解:x=A\b或x=pinv(A)*b。②當(dāng)rank(A)=rank([A,b])<n時(shí),方程組有無窮多個(gè)解,其通解=方程組的一個(gè)特解+對(duì)應(yīng)的齊次方程組Ax=0的通解??梢杂肁\b求得方程組的一個(gè)特解,用null(A,'r')求得該方程組所對(duì)應(yīng)的齊次方程組的基礎(chǔ)解系,基礎(chǔ)解系中包含n-rank(A)個(gè)線性無關(guān)的解向量。③當(dāng)rank(A)<rank([A,b])時(shí),方程組無解。(3)當(dāng)方程組右端向量b≠0時(shí),系數(shù)矩陣的秩rank(A)與63有了上面這些討論,可以設(shè)計(jì)一個(gè)求解線性方程組的函數(shù)文件line_solution.m。在例中可以調(diào)用line_solution.m文件來解線性方程組。

有了上面這些討論,可以設(shè)計(jì)一個(gè)求解線性方程組的函數(shù)文件646.5非線性方程與最優(yōu)化問題求解6.5.1非線性方程數(shù)值求解1.單變量非線性方程求解在MATLAB中提供了一個(gè)fzero函數(shù),可以用來求單變量非線性方程的根。該函數(shù)的調(diào)用格式為:z=fzero('fname',x0,tol,trace)其中fname是待求根的函數(shù)文件名,x0為搜索的起點(diǎn)。一個(gè)函數(shù)可能有多個(gè)根,但fzero函數(shù)只給出離x0最近的那個(gè)根。tol控制結(jié)果的相對(duì)精度,缺省時(shí)取tol=eps,trace指定迭代信息是否在運(yùn)算中顯示,為1時(shí)顯示,為0時(shí)不顯示,缺省時(shí)取trace=0。6.5非線性方程與最優(yōu)化問題求解65例6.33求f(x)在x0=-5和x0=1作為迭代初值時(shí)的零點(diǎn)。先建立函數(shù)文件fz.m:functionf=fz(x)f=x-1/x+5;然后調(diào)用fzero函數(shù)求根。:fzero('fz',-5)%以-5作為迭代初值ans=-5.1926fzero('fz',1)%以1作為迭代初值ans=0.1926

例6.33求f(x)在x0=-5和x0=1作為迭代初值時(shí)662.非線性方程組的求解對(duì)于非線性方程組F(X)=0,用fsolve函數(shù)求其數(shù)值解。fsolve函數(shù)的調(diào)用格式為:X=fsolve('fun',X0,option)其中X為返回的解,fun是用于定義需求解的非線性方程組的函數(shù)文件名,X0是求根過程的初值,option為最優(yōu)化工具箱的選項(xiàng)設(shè)定。最優(yōu)化工具箱提供了20多個(gè)選項(xiàng),用戶可以使用optimset命令將它們顯示出來。如果想改變其中某個(gè)選項(xiàng),則可以調(diào)用optimset()函數(shù)來完成。例如,Display選項(xiàng)決定函數(shù)調(diào)用時(shí)中間結(jié)果的顯示方式,其中‘off’為不顯示,‘iter’表示每步都顯示,‘final’只顯示最終結(jié)果。optimset(‘Display’,‘off’)將設(shè)定Display選項(xiàng)為‘off’。2.非線性方程組的求解67例6.34求下列方程組在(1,1,1)附近的解并對(duì)結(jié)果進(jìn)行驗(yàn)證。首先建立函數(shù)文件myfun.m。functionF=myfun(X)x=X(1);y=X(2);z=X(3);F(1)=sin(x)+y+z^2*exp(x);F(2)=x+y+z;F(3)=x*y*z;在給定的初值x0=1,y0=1,z0=1下,調(diào)用fsolve函數(shù)求方程的根。X=fsolve('myfun',[1,1,1],optimset('Display','off'))X=0.0224-0.0224-0.0000

例6.34求下列方程組在(1,1,1)附近的解并對(duì)結(jié)果進(jìn)686.5.2無約束最優(yōu)化問題求解在實(shí)際應(yīng)用中,許多科學(xué)研究和工程計(jì)算問題都可以歸結(jié)為一個(gè)最小化問題,如能量最小、時(shí)間最短等。MATLAB提供了3個(gè)求最小值的函數(shù),它們的調(diào)用格式為:(1)[x,fval]=fminbnd(filename,x1,x2,option):求一元函數(shù)在(xl,x2)區(qū)間中的極小值點(diǎn)x和最小值fval。(2)[x,fval]=fminsearch(filename,x0,option):基于單純形算法求多元函數(shù)的極小值點(diǎn)x和最小值fval。(3)[x,fval]=fminunc(filename,x0,option):基于擬牛頓法求多元函數(shù)的極小值點(diǎn)x和最小值fval。MATLAB沒有專門提供求函數(shù)最大值的函數(shù),但只要注意到-f(x)在區(qū)間(a,b)上的最小值就是f(x)在(a,b)的最大值,所以fminbnd(-f,x1,x2)返回函數(shù)f(x)在區(qū)間(x1,x2)上的最大值。6.5.2無約束最優(yōu)化問題求解69例6.36求函數(shù)在區(qū)間(-10,1)和(1,10)上的最小值點(diǎn)。首先建立函數(shù)文件fx.m:functionf=f(x)f=x-1/x+5;上述函數(shù)文件也可用一個(gè)語句函數(shù)代替:f=inline('x-1/x+5')再在MATLAB命令窗口,輸入命令:fminbnd('fx',-10,-1)%求函數(shù)在(-10,-1)內(nèi)的最小值點(diǎn)和最小值fminbnd(f,1,10)%求函數(shù)在(1,10)內(nèi)的最小值點(diǎn)。注意函數(shù)名f不用加'例6.37求函數(shù)f在(0.5,0.5,0.5)附近的最小值。建立函數(shù)文件fxyz.m:functionf=fxyz(u)x=u(1);y=u(2);z=u(3);f=x+y.^2./x/4+z.^2./y+2./z;在MALAB命令窗口,輸入命令:[U,fmin]=fminsearch('fxyz',[0.5,0.5,0.5])%求函數(shù)的最小值點(diǎn)和最小值例6.36求函數(shù)在區(qū)間(-10,1)和(1,10)上的最706.5.3有約束最優(yōu)化問題求解MATLAB最優(yōu)化工具箱提供了一個(gè)fmincon函數(shù),專門用于求解各種約束下的最優(yōu)化問題。該函數(shù)的調(diào)用格式為:[x,fval]=fmincon(filename,x0,A,b,Aeq,beq,Lbnd,Ubnd,NonF,option)其中x、fval、filename、x0和option的含義與求最小值函數(shù)相同。其余參數(shù)為約束條件,參數(shù)NonF為非線性約束函數(shù)的M文件名。如果某個(gè)約束不存在,則用空矩陣來表示。例6.38求解有約束最優(yōu)化問題。首先編寫目標(biāo)函數(shù)M文件fop.m。functionf=fop(x)f=0.4*x(2)+x(1)^2+x(2)^2-x(1)*x(2)+1/30*x(1)^3;再設(shè)定約束條件,并調(diào)用fmincon函數(shù)求解此約束最優(yōu)化問題。x0=[0.5;0.5];A=[-1,-0.5;-0.5,-1];b=[-0.4;-0.5];lb=[0;0];option=optimset;option.LargeScale='off';option.Display='off';[x,f]=fmincon('fop',x0,A,b,[],[],lb,[],[],option)6.5.3有約束最優(yōu)化問題求解716.6常微分方程的數(shù)值求解6.6.1龍格-庫塔法簡介6.6.2龍格-庫塔法的實(shí)現(xiàn)基于龍格-庫塔法,MATLAB提供了求常微分方程數(shù)值解的函數(shù),一般調(diào)用格式為:[t,y]=ode23('fname',tspan,y0)[t,y]=ode45('fname',tspan,y0)其中fname是定義f(t,y)的函數(shù)文件名,該函數(shù)文件必須返回一個(gè)列向量。tspan形式為[t0,tf],表示求解區(qū)間。y0是初始狀態(tài)列向量。t和y分別給出時(shí)間向量和相應(yīng)的狀態(tài)向量。6.6常微分方程的數(shù)值求解72例6.39設(shè)有初值問題,試求其數(shù)值解,并與精確解相比較(精確解為y(t)=)。(1)建立函數(shù)文件funt.m。functionyp=funt(t,y)yp=(y^2-t-2)/4/(t+1);(2)求解微分方程。t0=0;tf=10;y0=2;[t,y]=ode23('funt',[t0,tf],y0);%求數(shù)值解y1=sqrt(t+1)+1;%求精確解t'y'y1'y為數(shù)值解,y1為精確值,顯然兩者近似。例6.39設(shè)有初值問題,試求其數(shù)值解,并與精確解相比較(73例6.40已知一個(gè)二階線性系統(tǒng)的微分方程,繪制系統(tǒng)的時(shí)間響應(yīng)曲線和相平面圖。函數(shù)ode23和ode45是對(duì)一階常微分方程組設(shè)計(jì)的,因此對(duì)高階常微分方程,需先將它轉(zhuǎn)化為一階常微分方程組,即狀態(tài)方程。建立一個(gè)函數(shù)文件sys.m:functionxdot=sys(t,x)xdot=[-2*x(2);x(1)];取t0=0,tf=20,求微分方程的解:t0=0;tf=20;[t,x]=ode45('sys',[t0,tf],[1,0]);[t,x]subplot(1,2,1);plot(t,x(:,2));%解的曲線,即t-xsubplot(1,2,2);plot(x(:,2),x(:,1))%相平面曲線,即x-x’axisequal例6.40已知一個(gè)二階線性系統(tǒng)的微分方程,繪制系統(tǒng)的時(shí)間746.7稀疏矩陣

6.7.1矩陣存儲(chǔ)方式

MATLAB的矩陣有兩種存儲(chǔ)方式:完全存儲(chǔ)方式和稀疏存儲(chǔ)方式。

1.完全存儲(chǔ)方式

完全存儲(chǔ)方式是將矩陣的全部元素按列存儲(chǔ)。以前講到的矩陣的存儲(chǔ)方式都是按這個(gè)方式存儲(chǔ)的,此存儲(chǔ)方式對(duì)稀疏矩陣也適用。6.7稀疏矩陣

6.7.1矩陣存儲(chǔ)方式

MATLAB752.稀疏存儲(chǔ)方式

稀疏存儲(chǔ)方式僅存儲(chǔ)矩陣所有的非零元素的值及其位置,即行號(hào)和列號(hào)。在MATLAB中,稀疏存儲(chǔ)方式也是按列存儲(chǔ)的。

注意,在講稀疏矩陣時(shí),有兩個(gè)不同的概念,一是指矩陣的0元素較多,該矩陣是一個(gè)具有稀疏特征的矩陣,二是指采用稀疏方式存儲(chǔ)的矩陣。2.稀疏存儲(chǔ)方式

稀疏存儲(chǔ)方式僅存儲(chǔ)矩陣所有的非零元素的值及766.7.2稀疏存儲(chǔ)方式的產(chǎn)生

1.將完全存儲(chǔ)方式轉(zhuǎn)化為稀疏存儲(chǔ)方式

函數(shù)A=sparse(S)將矩陣S轉(zhuǎn)化為稀疏存儲(chǔ)方式的矩陣A。當(dāng)矩陣S是稀疏存儲(chǔ)方式時(shí),則函數(shù)調(diào)用相當(dāng)于A=S。

sparse函數(shù)還有其他一些調(diào)用格式:

sparse(m,n):生成一個(gè)m×n的所有元素都是0的稀疏矩陣。

sparse(u,v,S)--:u,v,S是3個(gè)等長的向量。S是要建立的稀疏矩陣的非0元素,u(i)、v(i)分別是S(i)的行和列下標(biāo),該函數(shù)建立一個(gè)max(u)行、max(v)列并以S為稀疏元素的稀疏矩陣。

此外,還有一些和稀疏矩陣操作有關(guān)的函數(shù)。例如

[u,v,S]=find(A):返回矩陣A中非0元素的下標(biāo)和元素。這里產(chǎn)生的u,v,S可作為sparse(u,v,S)的參數(shù)。

full(A):返回和稀疏存儲(chǔ)矩陣A對(duì)應(yīng)的完全存儲(chǔ)方式矩陣。6.7.2稀疏存儲(chǔ)方式的產(chǎn)生

1.將完全存儲(chǔ)方式轉(zhuǎn)化為稀772.產(chǎn)生稀疏存儲(chǔ)矩陣

只把要建立的稀疏矩陣的非0元素及其所在行和列的位置表示出來后由MATLAB自己產(chǎn)生其稀疏存儲(chǔ),這需要使用spconvert函數(shù)。調(diào)用格式為:

B=spconvert(A)

其中A為一個(gè)m×3或m×4的矩陣,其每行表示一個(gè)非0元素,m是非0元素的個(gè)數(shù),A每個(gè)元素的意義是:

(i,1)第i個(gè)非0元素所在的行。

(i,2)第i個(gè)非0元素所在的列。

(i,3)第i個(gè)非0元素值的實(shí)部。

(i,4)第i個(gè)非0元素值的虛部,若矩陣的全部元素都是實(shí)數(shù),則無須第四列。

該函數(shù)將A所描述的一個(gè)稀疏矩陣轉(zhuǎn)化為一個(gè)稀疏存儲(chǔ)矩陣。2.產(chǎn)生稀疏存儲(chǔ)矩陣

只把要建立的稀疏矩陣的非0元素及其所在78例6.42根據(jù)表示稀疏矩陣的矩陣A,產(chǎn)生一個(gè)稀疏存儲(chǔ)方式矩陣B。

命令如下:

A=[2,2,1;3,1,-1;4,3,3;5,3,8;6,6,12];

B=spconvert(A)例6.42根據(jù)表示稀疏矩陣的矩陣A,產(chǎn)生一個(gè)稀疏存儲(chǔ)方式793.帶狀稀疏存儲(chǔ)矩陣

用spdiags函數(shù)產(chǎn)生帶狀稀疏矩陣的稀疏存儲(chǔ),調(diào)用格式是:

A=spdiags(B,d,m,n)

其中,參數(shù)m,n為原帶狀矩陣的行數(shù)與列數(shù)。B為r×p階矩陣,這里r=min(m,n),p為原帶狀矩陣所有非零對(duì)角線的條數(shù),矩陣B的第i列即為原帶狀矩陣的第i條非零對(duì)角線。3.帶狀稀疏存儲(chǔ)矩陣

用spdiags函數(shù)產(chǎn)生帶狀稀疏矩陣的804.單位矩陣的稀疏存儲(chǔ)

單位矩陣只有對(duì)角線元素為1,其他元素都為0,是一種具有稀疏特征的矩陣。函數(shù)eye產(chǎn)生一個(gè)完全存儲(chǔ)方式的單位矩陣。MATLAB還有一個(gè)產(chǎn)生稀疏存儲(chǔ)方式的單位矩陣的函數(shù),這就是speye。函數(shù)speye(m,n)返回一個(gè)m×n的稀疏存儲(chǔ)單位矩陣。4.單位矩陣的稀疏存儲(chǔ)

單位矩陣只有對(duì)角線元素為1,其他元素816.7.3稀疏矩陣應(yīng)用舉例

稀疏存儲(chǔ)矩陣只是矩陣的存儲(chǔ)方式不同,它的運(yùn)算規(guī)則與普通矩陣是一樣的。所以,在運(yùn)算過程中,稀疏存儲(chǔ)矩陣可以直接參與運(yùn)算。當(dāng)參與運(yùn)算的對(duì)象不全是稀疏存儲(chǔ)矩陣時(shí),所得結(jié)果一般是完全存儲(chǔ)形式。6.7.3稀疏矩陣應(yīng)用舉例

稀疏存儲(chǔ)矩陣只是矩陣的存儲(chǔ)方82第6章MATLAB數(shù)值計(jì)算61-數(shù)據(jù)處理與多項(xiàng)式計(jì)算62-數(shù)值微積分63-課件83第6章MATLAB數(shù)值計(jì)算6.1數(shù)據(jù)處理與多項(xiàng)式計(jì)算6.2數(shù)值微積分6.3離散傅立葉變換6.4線性方程組求解6.5非線性方程與最優(yōu)化問題求解6.6常微分方程的數(shù)值求解6.7稀疏矩陣第6章MATLAB數(shù)值計(jì)算846.1數(shù)據(jù)處理與多項(xiàng)式計(jì)算

6.1.1數(shù)據(jù)統(tǒng)計(jì)與分析1.求矩陣最大元素和最小元素MATLAB提供的求數(shù)據(jù)序列的最大值和最小值的函數(shù)分別為max和min,兩個(gè)函數(shù)的調(diào)用格式和操作過程類似。(1)求向量的最大值和最小值y=max(X):返回向量X的最大值存入y,如果X中包含復(fù)數(shù)元素,則按模取最大值。6.1數(shù)據(jù)處理與多項(xiàng)式計(jì)算85[y,I]=max(X):返回向量X的最大值存入y,最大值的序號(hào)存入I,如果X中包含復(fù)數(shù)元素,則按模取最大值。求向量X的最小值的函數(shù)是min(X),用法和max(X)完全相同。例求向量x的最大值。命令如下:x=[-43,72,9,16,23,47];y=max(x)%求向量x中的最大值[y,l]=max(x)%求向量x中的最大值及其該元素的位置[y,I]=max(X):返回向量X的最大值存入y,86(2)求矩陣的最大值和最小值求矩陣A的最大值的函數(shù)有3種調(diào)用格式,分別是:max(A):返回一個(gè)行向量,向量的第i個(gè)元素是矩陣A的第i列上的最大值。[Y,U]=max(A):返回行向量Y和U,Y向量記錄A的每列的最大值,U向量記錄每列最大值的行號(hào)。(2)求矩陣的最大值和最小值87max(A,[],dim):dim取1或2。dim取1時(shí),該函數(shù)和max(A)完全相同;dim取2時(shí),該函數(shù)返回一個(gè)列向量,其第i個(gè)元素是A矩陣的第i行上的最大值。求最小值的函數(shù)是min,其用法和max完全相同。例6.1分別矩陣A中各列和各行元素中的最大值,并求整個(gè)矩陣的最大值和最小值。max(A,[],dim):dim取1或2。dim取88(3)兩個(gè)向量或矩陣對(duì)應(yīng)元素的比較函數(shù)max和min還能對(duì)兩個(gè)同型的向量或矩陣進(jìn)行比較,調(diào)用格式為:U=max(A,B):A,B是兩個(gè)同型的向量或矩陣,結(jié)果U是與A,B同型的向量或矩陣,U的每個(gè)元素等于A,B對(duì)應(yīng)元素的較大者。U=max(A,n):n是一個(gè)標(biāo)量,結(jié)果U是與A同型的向量或矩陣,U的每個(gè)元素等于A對(duì)應(yīng)元素和n中的較大者。min函數(shù)的用法和max完全相同。例求兩個(gè)2×3矩陣x,y所有同一位置上的較大元素構(gòu)成的新矩陣p。(3)兩個(gè)向量或矩陣對(duì)應(yīng)元素的比較892.求矩陣的平均值和中值求數(shù)據(jù)序列平均值的函數(shù)是mean,求數(shù)據(jù)序列中值的函數(shù)是median。兩個(gè)函數(shù)的調(diào)用格式為:mean(X):返回向量X的算術(shù)平均值。median(X):返回向量X的中值。mean(A):返回一個(gè)行向量,其第i個(gè)元素是A的第i列的算術(shù)平均值。median(A):返回一個(gè)行向量,其第i個(gè)元素是A的第i列的中值。mean(A,dim):當(dāng)dim為1時(shí),該函數(shù)等同于mean(A);當(dāng)dim為2時(shí),返回一個(gè)列向量,其第i個(gè)元素是A的第i行的算術(shù)平均值。median(A,dim):當(dāng)dim為1時(shí),該函數(shù)等同于median(A);當(dāng)dim為2時(shí),返回一個(gè)列向量,其第i個(gè)元素是A的第i行的中值。2.求矩陣的平均值和中值903.矩陣元素求和與求積數(shù)據(jù)序列求和與求積的函數(shù)是sum和prod,其使用方法類似。設(shè)X是一個(gè)向量,A是一個(gè)矩陣,函數(shù)的調(diào)用格式為:sum(X):返回向量X各元素的和。prod(X):返回向量X各元素的乘積。sum(A):返回一個(gè)行向量,其第i個(gè)元素是A的第i列的元素和。3.矩陣元素求和與求積91prod(A):返回一個(gè)行向量,其第i個(gè)元素是A的第i列的元素乘積。sum(A,dim):當(dāng)dim為1時(shí),該函數(shù)等同于sum(A);當(dāng)dim為2時(shí),返回一個(gè)列向量,其第i個(gè)元素是A的第i行的各元素之和。prod(A,dim):當(dāng)dim為1時(shí),該函數(shù)等同于prod(A);當(dāng)dim為2時(shí),返回一個(gè)列向量,其第i個(gè)元素是A的第i行的各元素乘積。例6.2求矩陣A的每行元素的乘積和全部元素的乘積。prod(A):返回一個(gè)行向量,其第i個(gè)元素是A的第i列的元924.矩陣元素累加和與累乘積在MATLAB中,使用cumsum和cumprod函數(shù)能方便地求得向量和矩陣元素的累加和與累乘積向量,函數(shù)的調(diào)用格式為:cumsum(X):返回向量X累加和向量。cumprod(X):返回向量X累乘積向量。cumsum(A):返回一個(gè)矩陣,其第i列是A的第i列的累加和向量。cumprod(A):返回一個(gè)矩陣,其第i列是A的第i列的累乘積向量。cumsum(A,dim):當(dāng)dim為1時(shí),該函數(shù)等同于cumsum(A);當(dāng)dim為2時(shí),返回一個(gè)矩陣,其第i行是A的第i行的累加和向量。cumprod(A,dim):當(dāng)dim為1時(shí),該函數(shù)等同于cumprod(A);當(dāng)dim為2時(shí),返回一個(gè)向量,其第i行是A的第i行的累乘積向量。4.矩陣元素累加和與累乘積935.求標(biāo)準(zhǔn)方差在MATLAB中,提供了計(jì)算數(shù)據(jù)序列的標(biāo)準(zhǔn)方差的函數(shù)std。對(duì)于向量X,std(X)返回一個(gè)標(biāo)準(zhǔn)方差。對(duì)于矩陣A,std(A)返回一個(gè)行向量,它的各個(gè)元素便是矩陣A各列或各行的標(biāo)準(zhǔn)方差。std函數(shù)的一般調(diào)用格式為:Y=std(A,flag,dim)其中dim取1或2。當(dāng)dim=1時(shí),求各列元素的標(biāo)準(zhǔn)方差;當(dāng)dim=2時(shí),則求各行元素的標(biāo)準(zhǔn)方差。flag取0或1,當(dāng)flag=0時(shí),按σ1所列公式計(jì)算標(biāo)準(zhǔn)方差,當(dāng)flag=1時(shí),按σ2所列公式計(jì)算標(biāo)準(zhǔn)方差。缺省flag=0,dim=1。例6.4對(duì)二維矩陣x,從不同維方向求出其標(biāo)準(zhǔn)方差。5.求標(biāo)準(zhǔn)方差946.相關(guān)系數(shù)MATLAB提供了corrcoef函數(shù),可以求出數(shù)據(jù)的相關(guān)系數(shù)矩陣。corrcoef函數(shù)的調(diào)用格式為:corrcoef(X):返回從矩陣X形成的一個(gè)相關(guān)系數(shù)矩陣。此相關(guān)系數(shù)矩陣的大小與矩陣X一樣。它把矩陣X的每列作為一個(gè)變量,然后求它們的相關(guān)系數(shù)。corrcoef(X,Y):在這里,X,Y是向量,它們與corrcoef([X,Y])的作用一樣。6.相關(guān)系數(shù)95例6.5生成滿足正態(tài)分布的10000×5隨機(jī)矩陣,然后求各列元素的均值和標(biāo)準(zhǔn)方差,再求這5列隨機(jī)數(shù)據(jù)的相關(guān)系數(shù)矩陣。命令如下:X=randn(10000,5);M=mean(X)D=std(X)R=corrcoef(X)例6.5生成滿足正態(tài)分布的10000×5隨機(jī)矩陣,然后求967.排序MATLAB中對(duì)向量X是排序函數(shù)是sort(X),函數(shù)返回一個(gè)對(duì)X中的元素按升序排列的新向量。sort函數(shù)也可以對(duì)矩陣A的各列或各行重新排序,其調(diào)用格式為:[Y,I]=sort(A,dim)其中dim指明對(duì)A的列還是行進(jìn)行排序。若dim=1,則按列排;若dim=2,則按行排。Y是排序后的矩陣,而I記錄Y中的元素在A中位置。7.排序976.1.2數(shù)據(jù)插值1.一維數(shù)據(jù)插值在MATLAB中,實(shí)現(xiàn)這些插值的函數(shù)是interp1,其調(diào)用格式為:Y1=interp1(X,Y,X1,'method')函數(shù)根據(jù)X,Y的值,計(jì)算函數(shù)在X1處的值。X,Y是兩個(gè)等長的已知向量,分別描述采樣點(diǎn)和樣本值,X1是一個(gè)向量或標(biāo)量,描述欲插值的點(diǎn),Y1是一個(gè)與X1等長的插值結(jié)果。method是插值方法,允許的取值有‘linear’、‘nearest’、‘cubic’、‘spline’。6.1.2數(shù)據(jù)插值98注意:X1的取值范圍不能超出X的給定范圍,否則,會(huì)給出“NaN”錯(cuò)誤。

例6.7給出概率積分的數(shù)據(jù)表如表6.1所示,用不同的插值方法計(jì)算f(0.472)。

例6.8某檢測參數(shù)f隨時(shí)間t的采樣結(jié)果如表5.1,用數(shù)據(jù)插值法計(jì)算t=2,7,12,17,22,17,32,37,42,47,52,57時(shí)的f值。注意:X1的取值范圍不能超出X的給定范圍,否則,會(huì)給出“Na992.二維數(shù)據(jù)插值在MATLAB中,提供了解決二維插值問題的函數(shù)interp2,其調(diào)用格式為:Z1=interp2(X,Y,Z,X1,Y1,'method')其中X,Y是兩個(gè)向量,分別描述兩個(gè)參數(shù)的采樣點(diǎn),Z是與參數(shù)采樣點(diǎn)對(duì)應(yīng)的函數(shù)值,X1,Y1是兩個(gè)向量或標(biāo)量,描述欲插值的點(diǎn)。Z1是根據(jù)相應(yīng)的插值方法得到的插值結(jié)果。method的取值與一維插值函數(shù)相同。X,Y,Z也可以是矩陣形式。同樣,X1,Y1的取值范圍不能超出X,Y的給定范圍,否則,會(huì)給出“NaN”錯(cuò)誤。2.二維數(shù)據(jù)插值100例6.9設(shè)z=x2+y2,對(duì)z函數(shù)在[0,1]×[0,2]區(qū)域內(nèi)進(jìn)行插值。例6.10某實(shí)驗(yàn)對(duì)一根長10米的鋼軌進(jìn)行熱源的溫度傳播測試。用x表示測量點(diǎn)0:2.5:10(米),用h表示測量時(shí)間0:30:60(秒),用T表示測試所得各點(diǎn)的溫度(℃)。試用線性插值求出在一分鐘內(nèi)每隔10秒、鋼軌每隔0.5米處的溫度。例6.9設(shè)z=x2+y2,對(duì)z函數(shù)在[0,1]×[0,21016.1.3曲線擬合在MATLAB中,用polyfit函數(shù)來求得最小二乘擬合多項(xiàng)式的系數(shù),再用polyval函數(shù)按所得的多項(xiàng)式計(jì)算所給出的點(diǎn)上的函數(shù)近似值。polyfit函數(shù)的調(diào)用格式為:[P,S]=polyfit(X,Y,m)函數(shù)根據(jù)采樣點(diǎn)X和采樣點(diǎn)函數(shù)值Y,產(chǎn)生一個(gè)m次多項(xiàng)式P及其在采樣點(diǎn)的誤差向量S。其中X,Y是兩個(gè)等長的向量,P是一個(gè)長度為m+1的向量,P的元素為多項(xiàng)式系數(shù)。polyval函數(shù)的功能是按多項(xiàng)式的系數(shù)計(jì)算x點(diǎn)多項(xiàng)式的值。6.1.3曲線擬合102例6.11用一個(gè)3次多項(xiàng)式在區(qū)間[0,2π]內(nèi)逼近函數(shù)。命令如下:X=linspace(0,2*pi,50);Y=sin(X);P=polyfit(X,Y,3)%得到3次多項(xiàng)式的系數(shù)和誤差例6.11用一個(gè)3次多項(xiàng)式在區(qū)間[0,2π]內(nèi)逼近函數(shù)。1036.1.4多項(xiàng)式計(jì)算1.多項(xiàng)式的四則運(yùn)算(1)多項(xiàng)式的加減運(yùn)算(2)多項(xiàng)式乘法運(yùn)算函數(shù)conv(P1,P2)用于求多項(xiàng)式P1和P2的乘積。這里,P1、P2是兩個(gè)多項(xiàng)式系數(shù)向量。6.1.4多項(xiàng)式計(jì)算104(3)多項(xiàng)式除法函數(shù)[Q,r]=deconv(P1,P2)用于對(duì)多項(xiàng)式P1和P2作除法運(yùn)算。其中Q返回多項(xiàng)式P1除以P2的商式,r返回P1除以P2的余式。這里,Q和r仍是多項(xiàng)式系數(shù)向量。deconv是conv的逆函數(shù),即有P1=conv(P2,Q)+r。(3)多項(xiàng)式除法1052.多項(xiàng)式的導(dǎo)函數(shù)對(duì)多項(xiàng)式求導(dǎo)數(shù)的函數(shù)是:p=polyder(P):求多項(xiàng)式P的導(dǎo)函數(shù)p=polyder(P,Q):求P·Q的導(dǎo)函數(shù)[p,q]=polyder(P,Q):求P/Q的導(dǎo)函數(shù),導(dǎo)函數(shù)的分子存入p,分母存入q。上述函數(shù)中,參數(shù)P,Q是多項(xiàng)式的向量表示,結(jié)果p,q也是多項(xiàng)式的向量表示。2.多項(xiàng)式的導(dǎo)函數(shù)1063.多項(xiàng)式求值MATLAB提供了兩種求多項(xiàng)式值的函數(shù):polyval與polyvalm,它們的輸入?yún)?shù)均為多項(xiàng)式系數(shù)向量P和自變量x。兩者的區(qū)別在于前者是代數(shù)多項(xiàng)式求值,而后者是矩陣多項(xiàng)式求值。3.多項(xiàng)式求值107(1)代數(shù)多項(xiàng)式求值polyval函數(shù)用來求代數(shù)多項(xiàng)式的值,其調(diào)用格式為:Y=polyval(P,x)若x為一數(shù)值,則求多項(xiàng)式在該點(diǎn)的值;若x為向量或矩陣,則對(duì)向量或矩陣中的每個(gè)元素求其多項(xiàng)式的值。例6.14已知多項(xiàng)式x4+8x3-10,分別取x=1.2和一個(gè)2×3矩陣為自變量計(jì)算該多項(xiàng)式的值。(1)代數(shù)多項(xiàng)式求值108(2)矩陣多項(xiàng)式求值polyvalm函數(shù)用來求矩陣多項(xiàng)式的值,其調(diào)用格式與polyval相同,但含義不同。polyvalm函數(shù)要求x為方陣,它以方陣為自變量求多項(xiàng)式的值。設(shè)A為方陣,P代表多項(xiàng)式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))例6.15仍以多項(xiàng)式x4+8x3-10為例,取一個(gè)2×2矩陣為自變量分別用polyval和polyvalm計(jì)算該多項(xiàng)式的值。(2)矩陣多項(xiàng)式求值1094.多項(xiàng)式求根n次多項(xiàng)式具有n個(gè)根,當(dāng)然這些根可能是實(shí)根,也可能含有若干對(duì)共軛復(fù)根。MATLAB提供的roots函數(shù)用于求多項(xiàng)式的全部根,其調(diào)用格式為:x=roots(P)其中P為多項(xiàng)式的系數(shù)向量,求得的根賦給向量x,即x(1),x(2),…,x(n)分別代表多項(xiàng)式的n個(gè)根。4.多項(xiàng)式求根110例6.16求多項(xiàng)式x4+8x3-10的根。命令如下:A=[1,8,0,0,-10];x=roots(A)若已知多項(xiàng)式的全部根,則可以用poly函數(shù)建立起該多項(xiàng)式,其調(diào)用格式為:P=poly(x)若x為具有n個(gè)元素的向量,則poly(x)建立以x為其根的多項(xiàng)式,且將該多項(xiàng)式的系數(shù)賦給向量P。例6.16求多項(xiàng)式x4+8x3-10的根。111例6.17已知f(x)(1)計(jì)算f(x)=0的全部根。(2)由方程f(x)=0的根構(gòu)造一個(gè)多項(xiàng)式g(x),并與f(x)進(jìn)行對(duì)比。命令如下:P=[3,0,4,-5,-7.2,5];X=roots(P)%求方程f(x)=0的根G=poly(X)%求多項(xiàng)式g(x)例6.17已知f(x)1126.2數(shù)值微積分6.2.1數(shù)值微分1.數(shù)值差分與差商2.數(shù)值微分的實(shí)現(xiàn)在MATLAB中,沒有直接提供求數(shù)值導(dǎo)數(shù)的函數(shù),只有計(jì)算向前差分的函數(shù)diff,其調(diào)用格式為:DX=diff(X):計(jì)算向量X的向前差分,DX(i)=X(i+1)-X(i),i=1,2,…,n-1。DX=diff(X,n):計(jì)算X的n階向前差分。例如,diff(X,2)=diff(diff(X))。DX=diff(A,n,dim):計(jì)算矩陣A的n階差分,dim=1時(shí)(缺省狀態(tài)),按列計(jì)算差分;dim=2,按行計(jì)算差分。6.2數(shù)值微積分6.2.1數(shù)值微分113例6.18設(shè)x由[0,2π]間均勻分布的10個(gè)點(diǎn)組成,求sinx的1~3階差分。命令如下:X=linspace(0,2*pi,10);Y=sin(X);DY=diff(Y);%計(jì)算Y的一階差分D2Y=diff(Y,2);%計(jì)算Y的二階差分,也可用命令diff(DY)計(jì)算D3Y=diff(Y,3);%計(jì)算Y的三階差分,也可用diff(D2Y)或diff(DY,2)例6.18設(shè)x由[0,2π]間均勻分布的10個(gè)點(diǎn)組成,求114例6.19用不同的方法求函數(shù)f(x)的數(shù)值導(dǎo)數(shù),并在同一個(gè)坐標(biāo)系中做出f'(x)的圖像。程序如下:f=inline('sqrt(x.^3+2*x.^2-x+12)+(x+5).^(1/6)+5*x+2');g=inline('(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ù)dpdpx=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,'-');%作圖例6.19用不同的方法求函數(shù)f(x)的數(shù)值導(dǎo)數(shù),并在同一1156.2.2數(shù)值積分1.數(shù)值積分基本原理求解定積分的數(shù)值方法多種多樣,如簡單的梯形法、辛普生(Simpson)法、牛頓-柯特斯(Newton-Cotes)法等都是經(jīng)常采用的方法。它們的基本思想都是將整個(gè)積分區(qū)間[a,b]分成n個(gè)子區(qū)間[xi,xi+1],i=1,2,…,n,其中x1=a,xn+1=b。這樣求定積分問題就分解為求和問題。6.2.2數(shù)值積分1162.數(shù)值積分的實(shí)現(xiàn)(1)被積函數(shù)是一個(gè)解析式MATLAB提

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論