計(jì)算機(jī)仿真技術(shù)與CAD-基于MATLAB的電氣工程(第2版) 課件 第5章MATLAB高級(jí)操作_第1頁(yè)
計(jì)算機(jī)仿真技術(shù)與CAD-基于MATLAB的電氣工程(第2版) 課件 第5章MATLAB高級(jí)操作_第2頁(yè)
計(jì)算機(jī)仿真技術(shù)與CAD-基于MATLAB的電氣工程(第2版) 課件 第5章MATLAB高級(jí)操作_第3頁(yè)
計(jì)算機(jī)仿真技術(shù)與CAD-基于MATLAB的電氣工程(第2版) 課件 第5章MATLAB高級(jí)操作_第4頁(yè)
計(jì)算機(jī)仿真技術(shù)與CAD-基于MATLAB的電氣工程(第2版) 課件 第5章MATLAB高級(jí)操作_第5頁(yè)
已閱讀5頁(yè),還剩81頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1本章內(nèi)容

MATLAB的矩陣處理;

MATLAB的數(shù)據(jù)處理;

MATLAB的方程求解;

MATLAB的函數(shù)運(yùn)算;

MATLAB圖形用戶界面(GUI)的簡(jiǎn)單設(shè)計(jì)

MATLAB編譯器的基本應(yīng)用方法。第5章MATLAB高級(jí)操作操作2MATLAB除可進(jìn)行基本的數(shù)值運(yùn)算和符號(hào)運(yùn)算外,還可進(jìn)行復(fù)雜的數(shù)學(xué)運(yùn)算。它將數(shù)值分析、矩陣計(jì)算、科學(xué)數(shù)據(jù)可視化以及非線性動(dòng)態(tài)系統(tǒng)的建模和仿真等諸多強(qiáng)大功能集成在一個(gè)易于使用的視窗環(huán)境中,為科學(xué)研究、工程設(shè)計(jì)以及必須進(jìn)行有效數(shù)值計(jì)算的眾多科學(xué)領(lǐng)域提供了一種全面的解決方案,并在很大程度上擺脫了傳統(tǒng)非交互式程序設(shè)計(jì)語(yǔ)言(如C、Fortran)的編輯模式,代表了當(dāng)今國(guó)際科學(xué)計(jì)算軟件的先進(jìn)水平。35.1MATLAB的矩陣處理

以矩陣為基礎(chǔ)的線性代數(shù)已在許多技術(shù)領(lǐng)域得到應(yīng)用。在MATLAB中,矩陣的處理通常包括以下內(nèi)容。45.1.1矩陣行列式矩陣A={aij}的行列式定義為∣A∣=det(A)=Σ(-1)ka1k1a2k2…anknMATLAB求矩陣行列式函數(shù)的調(diào)用格式為

det(A)

計(jì)算矩陣的行列式有多種算法,在MATLAB中采用的方法為L(zhǎng)U分解法。51.矩陣求逆對(duì)于一個(gè)已知的n×n維非奇異方陣A來(lái)說(shuō),如果有一個(gè)同樣大小的C矩陣滿足

AC=CA=I式中I為單位陣,則稱C矩陣為A矩陣的逆矩陣,并記作C=A-1

。

MATLAB提供了一個(gè)求取逆矩陣的函數(shù)inv(),其調(diào)用格式為

inv(A)62.矩陣的跡假設(shè)一個(gè)方陣為

A={aij},i,j=1,2,…,n;則矩陣A的跡定義為亦即矩陣的跡為該矩陣對(duì)角線上各個(gè)元素之和。由代數(shù)理論可知矩陣的跡和該矩陣的特征值之和是相同的。在MATLAB中提供了求取矩陣跡的函數(shù)trace(),其調(diào)用方法為

trace(A)73.矩陣的秩對(duì)于n×m維的矩陣A,若矩陣所有的列向量中共有rc個(gè)線性無(wú)關(guān),則稱矩陣的列秩為rc,如果rc=m,則稱A為列滿秩矩陣,相應(yīng)地,若矩陣A的行向量中有rr個(gè)是線性無(wú)關(guān)的,則稱矩陣A的行秩為rr,如果rr=n,則稱A為行滿秩矩陣。

MATLAB提供了一個(gè)內(nèi)部函數(shù)rank()來(lái)用數(shù)值方法求取一個(gè)已知矩陣的秩,其調(diào)用格式為

k=rank(A)85.1.3矩陣的三角分解矩陣的三角分解又稱為L(zhǎng)U分解,它的目的是將一個(gè)矩陣A分解成一個(gè)下三角矩陣L和一個(gè)上三角矩陣U的乘積,亦即可以寫成A=LU。在MATLAB下也給出了矩陣的LU分解函數(shù)lu(),該函數(shù)的調(diào)用格式為

[L,U]=lu(A)95.1.4矩陣的奇異值分解

MATLAB提供了直接求取矩陣奇異值分解的函數(shù),其調(diào)用方式為[U,S,V]=svd(A)其中,A為原始矩陣;S為對(duì)角矩陣,其對(duì)角元素就是A的奇異值;而U和V均為正交矩陣,并滿足A=USVT矩陣最大奇異值σmax和最小奇異值σmin的比值又稱為該矩陣的條件數(shù),記作cond{A}即cond{A}=σmax/σmin,矩陣的條件數(shù)越大,則對(duì)參數(shù)變化越敏感。在MATLAB下也提供了求取矩陣條件數(shù)的函數(shù)cond(),其調(diào)用格式為

cond(A)105.1.5矩陣的范數(shù)

N=norm(A,選項(xiàng))選項(xiàng)意義無(wú)矩陣的最大奇異值,即‖A‖22與默認(rèn)方式相同,亦為‖A‖21矩陣的1-范數(shù),即‖A‖1inf或‘inf’矩陣的無(wú)窮范數(shù),即‖A‖∞‘fro’矩陣的F-范數(shù),即‖A‖F(xiàn)=sqrt(∑(ATA)ii)-inf只可用于向量,‖A‖-∞=min(∑ai)數(shù)值p對(duì)向量可取任何整數(shù),而對(duì)矩陣只可取1,2,inf或’fro’表5-1矩陣范數(shù)函數(shù)的選項(xiàng)定義

115.1.6矩陣的特征值與特征向量

[V,D]=eig(A)其中A為要處理的矩陣,D為一個(gè)對(duì)角矩陣,其對(duì)角線上的元素為矩陣A的特征值,而每個(gè)特征值對(duì)應(yīng)的V矩陣的列為該特征值的特征向量,該矩陣是一個(gè)滿秩矩陣,它滿足AV=VD,且每個(gè)特征向量各元素的平方和(即2范數(shù))均為1。9)矩陣的特征多項(xiàng)式、特征方程和特征根

MATLAB提供了求取矩陣特征多項(xiàng)式系數(shù)的函數(shù)poly(),其調(diào)用格式為

P=poly(A)12其中A為給定的矩陣,返回值P為一個(gè)行向量,其各個(gè)分量為矩陣A的降冪排列的特征多項(xiàng)式系數(shù)。即

P=[a

0

a

1…

a

n]MATLAB中根據(jù)矩陣特征多項(xiàng)式求特征根的函數(shù)為roots(),其調(diào)用格式為

V=roots(P)其中P為特征多項(xiàng)式的系數(shù)向量,而V為特征多項(xiàng)式的解,即原始矩陣的特征根。135.1.7矩陣的特征多項(xiàng)式、特征方程和特征根

對(duì)于給定的n×n階矩陣A,稱多項(xiàng)式f(s)=det(sI-

A)=a0sn+a1sn-1+…+an-1s+an為矩陣A的特征多項(xiàng)式,其中系數(shù)a0,a1,…,an稱為矩陣的特征多項(xiàng)式系數(shù)。

MATLAB提供了求取矩陣特征多項(xiàng)式系數(shù)的函數(shù)poly(),其調(diào)用格式為p=poly(A)其中,A為給定的矩陣;返回值p為一個(gè)行向量,其各個(gè)分量為矩陣A的降冪排列的特征多項(xiàng)式系數(shù)。即p=[a

0,a

1,…,an]14

令特征多項(xiàng)式等于零所構(gòu)成的方程稱為該矩陣的特征方程,而特征方程的根稱為該矩陣的特征根。

MATLAB中根據(jù)矩陣特征多項(xiàng)式求特征根的運(yùn)算同樣可利用前面介紹過(guò)的多項(xiàng)式求解函數(shù)roots()來(lái)實(shí)現(xiàn)

,其調(diào)用格式為r=roots(p)其中,p為特征多項(xiàng)式的系數(shù)向量;而r為特征多項(xiàng)式的解,即原始矩陣的特征根。15例5-1

求的特征多項(xiàng)式、特征根及其模值。解

MATLAB命令如下>>A=[123;456;789];p=poly(A),r=roots(p)',abs(r)結(jié)果顯示:p=1.0000-15.0000-18.0000-0.0000r=16.1168-1.1168-0.0000ans=16.11681.11680.0000165.2MATLAB的數(shù)據(jù)處理

數(shù)據(jù)處理中,通常遇到的問(wèn)題就是數(shù)據(jù)的導(dǎo)入。一般用于處理的數(shù)據(jù)規(guī)模都比較大,在利用MATLAB進(jìn)行數(shù)據(jù)處理前,需要把這些數(shù)據(jù)導(dǎo)入到MATLAB工作區(qū)。

MATLAB提供了數(shù)據(jù)輸入向?qū)В沟眠@一過(guò)程變得十分容易。單擊MATLAB主界面中的File→ImportData命令或MATLAB主頁(yè)(HOME)中的Variable→ImportData命令,就會(huì)打開數(shù)據(jù)輸入向?qū)Т翱?,按照該窗口提示進(jìn)行操作,就可以很方便地把文件中的數(shù)據(jù)導(dǎo)入到MATLAB工作空間中。另外,許多圖形界面的分析工具也有數(shù)據(jù)輸入向?qū)А?75.2.1數(shù)據(jù)插值數(shù)據(jù)插值就是根據(jù)已知一組離散的數(shù)據(jù)點(diǎn)集,在某兩個(gè)點(diǎn)之間預(yù)測(cè)函數(shù)值的方法。插值運(yùn)算是根據(jù)數(shù)據(jù)的分布規(guī)律,找到一個(gè)函數(shù)表達(dá)式可以連接已知的各點(diǎn),并用這一函數(shù)表達(dá)式預(yù)測(cè)兩點(diǎn)之間任意位置上的函數(shù)值。插值運(yùn)算可以分為內(nèi)插和外插兩種。只對(duì)已知數(shù)據(jù)點(diǎn)集內(nèi)部的點(diǎn)進(jìn)行的插值運(yùn)算稱為內(nèi)插,內(nèi)插可以根據(jù)已知數(shù)據(jù)點(diǎn)的分布,構(gòu)建能夠代表分布特性的函數(shù)關(guān)系,比較準(zhǔn)確地估計(jì)插值點(diǎn)上的函數(shù)值;當(dāng)插值點(diǎn)落在已知數(shù)據(jù)外部時(shí)的插值稱為外插,利用外插估計(jì)的函數(shù)值一般誤差較大。18

在MATLAB中,數(shù)值插值方法包括一維線性插值方法、二維線性插值方法、三維線性插值方法和三次樣條插值方法等。

(1)一維線性插值對(duì)于一維線性數(shù)據(jù),可以通過(guò)插值或查表來(lái)求得離散點(diǎn)之間的數(shù)據(jù)值。在MATLAB中,一維線性插值可用函數(shù)interp1()來(lái)實(shí)現(xiàn),其調(diào)用格式為yi=interp1(x,y,xi,'method','extrap')或yi=interp1(x,y,xi,'method',extrapval)19

另外,已知數(shù)據(jù)點(diǎn)不等間距分布時(shí),函數(shù)interp1q()比函數(shù)interp1()執(zhí)行速度快,因?yàn)榍罢卟粰z查已知數(shù)據(jù)是否等間距,不過(guò)函數(shù)interp1q()要求x必須單調(diào)遞增。當(dāng)x為單調(diào)且等間距時(shí),可以使用快速插值法,此時(shí)可將'method'參數(shù)的值設(shè)置為'nearest','linear'或'cubic'。例>>x=linspace(0,2*pi,80);y=sin(x);>>x1=[0.5,1.4,2.6,4.2],y1=interp1(x,y,x1,'cubic')結(jié)果顯示:x1=0.50001.40002.60004.2000y1=0.47940.98550.5155-0.871620(2)二維線性插值和三維線性插值與一維線性插值一樣,二維線性插值也可以通過(guò)插值或查表來(lái)求得離散點(diǎn)之間的數(shù)據(jù)值。在MATLAB中,二維線性插值可用函數(shù)interp2()來(lái)實(shí)現(xiàn),其調(diào)用格式為zi=interp2(x,y,z,xi,yi,'method')

二維插值中已知數(shù)據(jù)點(diǎn)集(x,y)必須是柵格格式,一般用函數(shù)meshgrid()產(chǎn)生。函數(shù)interp2()要求(x,y)必須是嚴(yán)格單調(diào)的,即單調(diào)遞增或者單調(diào)遞減。另外,若已知點(diǎn)集(x,y)在平面上分布不是等間距時(shí),函數(shù)interp2()首先通過(guò)一定的變換將其轉(zhuǎn)換為等間距的。當(dāng)輸入點(diǎn)集(x,y)已經(jīng)是等間距分布的話,可以在method參數(shù)前加星號(hào)“*”,即如'*cubic',這樣輸入?yún)?shù)可以提高插值速度。21>>[x,y]=meshgrid(-5:0.5:5);z=peaks(x,y);%產(chǎn)生已知數(shù)據(jù)的柵格點(diǎn)及其函數(shù)值>>[x1,y1]=meshgrid(-5:0.1:5);z1=interp2(x,y,z,x1,y1);%產(chǎn)生更精細(xì)數(shù)據(jù)柵格點(diǎn)及其插值>>subplot(1,2,1);mesh(x,y,z);%繪制(x,y,z)已知數(shù)據(jù)的柵格圖>>subplot(1,2,2);mesh(x1,y1,z1);%繪制(x1,y1,z1)插值數(shù)據(jù)的柵格圖結(jié)果顯示如圖5-1所示。例22

與一維線性插值和二維線性插值一樣,三維線性插值也可以通過(guò)插值或查表來(lái)求得離散點(diǎn)之間的數(shù)據(jù)值。在MATLAB中,三維線性插值可用函數(shù)interp3()來(lái)實(shí)現(xiàn),其使用方法與函數(shù)interp1()和函數(shù)interp2()基本類似,這里就不詳細(xì)介紹了。

(3)三次樣條插值使用高階多項(xiàng)式的插值常常會(huì)產(chǎn)生病變的結(jié)果,而三次樣條插值就能消除這種病變。在三次樣條插值中,要尋找3次多項(xiàng)式,以逼近每對(duì)數(shù)據(jù)點(diǎn)之間的曲線。在MATLAB中,三次樣條插值利用函數(shù)spline()來(lái)實(shí)現(xiàn),其調(diào)用格式為yi=spline(x,y,xi)235.2.2曲線擬合曲線擬合的主要功能是尋求平滑的曲線來(lái)最好地表現(xiàn)測(cè)量數(shù)據(jù),從這些測(cè)量數(shù)據(jù)中尋求兩個(gè)函數(shù)變量之間的關(guān)系或者變化趨勢(shì),最后得到曲線擬合的函數(shù)表達(dá)式。在MATLAB中,多項(xiàng)式函數(shù)的擬合可用函數(shù)polyfit()來(lái)實(shí)現(xiàn),其調(diào)用格式為[p,s]=polyfit(x,y,n)24例5-2

用6階多項(xiàng)式對(duì)[0,2*pi]區(qū)間上的f(x)=sin(t)函數(shù)進(jìn)行擬合。解

MATLAB命令如下>>x=linspace(0,2*pi,80);y=sin(x);>>p=polyfit(x,y,6),y1=polyval(p,x);plot(x,y,'ro',x,y1)

執(zhí)行后可得如下結(jié)果和如圖5-11所示的曲線。p=-0.0000-0.00560.0878-0.39700.27460.87330.0122因此所求正弦函數(shù)的6階擬合多項(xiàng)式為f(x)=-0.0056x5+0.0878x4-0.3970x3+0.2746x2+0.8733x+0.012225

265.2.3數(shù)據(jù)分析

MATLAB強(qiáng)大的數(shù)組運(yùn)算功能,決定了它很容易對(duì)一大批數(shù)據(jù)進(jìn)行一般的數(shù)據(jù)分析,如求數(shù)組的極值、平均值、中值、和、積、標(biāo)準(zhǔn)差、方差、協(xié)方差和排序等。1.隨機(jī)數(shù)

在MATLAB中提供了兩個(gè)用來(lái)產(chǎn)生隨機(jī)數(shù)組的函數(shù)rand()和randn()。其調(diào)用格式為A=rand(n,m)A=randn(n,m)272.最大值和最小值

如果給定一組數(shù)據(jù){xi},i=1,2,…,n,則可利用MATLAB將這些數(shù)據(jù)用一個(gè)向量表示出來(lái),即x=[x1,x2,…,xn]

利用MATLAB的函數(shù)max()和min()便可求出這組數(shù)據(jù)的最大值和最小值,命令格式如下[xmax,i]=max(x)和[xmin,i]=min(x)

對(duì)于函數(shù)max()和min()也可以采用以下格式:z=max(x,y)和z=min(x,y)283.平均值利用MATLAB的函數(shù)mean()可求出向量或矩陣的平均值,命令格式如下y=mean(x)4.中值

利用MATLAB的函數(shù)median()可求出向量或矩陣的中值,命令格式如下y=median(x)295.求和

利用MATLAB的函數(shù)sum()可求出向量或矩陣中元素的和,命令格式如下y=sum(x)6.求積利用MATLAB的函數(shù)prod()可求出向量或矩陣中元素的積,命令格式如下y=prod(x)307.標(biāo)準(zhǔn)差

利用MATLAB的函數(shù)std()可求出向量或矩陣中元素的標(biāo)準(zhǔn)差,命令格式如下y=std(x)8.方差

利用MATLAB的函數(shù)var()可求出向量或矩陣中元素的方差,命令格式如下y=var(x)319.協(xié)方差

利用MATLAB的函數(shù)cov()可求出向量或矩陣中元素的協(xié)方差,命令格式如下y=cov(x)10.相關(guān)性

分析多組數(shù)據(jù)之間的相關(guān)性,也是數(shù)據(jù)統(tǒng)計(jì)分析的重要部分。利用MATLAB的函數(shù)corrcoef()可求出兩組向量或矩陣的相關(guān)系數(shù)或相關(guān)系數(shù)陣,調(diào)用格式如下z=corrcoef(x,y)或z=corrcoef(A)其中,x,y為向量;A為矩陣;z為兩組向量或矩陣的相關(guān)系數(shù)或相關(guān)系數(shù)陣。3211.按實(shí)部或幅值對(duì)特征值進(jìn)行排序利用MATLAB中的函數(shù)esort()和dsort(),可對(duì)特征值按實(shí)部或幅值進(jìn)行排序,函數(shù)的調(diào)用格式為

[s,ndx]=esort(p)或[s,ndx]=dsort(p)

另外,函數(shù)sort()用于對(duì)元素按升序進(jìn)行排序。33

另外,在MATLAB的圖形窗口中,利用Tools→Statistics命令,也可打開數(shù)據(jù)分析圖形界面。在該界面中,不僅顯示了待分析的數(shù)據(jù)集,而且顯示了數(shù)據(jù)的最小值、最大值、平均值、中位值、標(biāo)準(zhǔn)差和范圍等。選中該界面中各項(xiàng)統(tǒng)計(jì)量后的復(fù)選框,則可以將它們顯示到繪圖窗口中。345.3.1代數(shù)方程求解利用MATLAB中求函數(shù)f(.)零點(diǎn)的函數(shù)fzero()和fsolve(),可以方便地求得非線性方程f(.)=0的解,它們的調(diào)用格式分別為

[x,fval]=fzero(fun,x0)

[x,fval]=fsolve(fun,x0)5.3MATLAB的方程求解35例5-3

試求函數(shù)f=sin(x)在數(shù)值區(qū)間[0,2*pi]中的零點(diǎn)。解

①為了更好地選擇函數(shù)在[0,2*pi]之間零點(diǎn)的初值,首先利用以下MATLAB命令,繪制函數(shù)的曲線,如圖5-5所示。>>x=0:0.01:2*pi;y=sin(x);plot(x,y);>>holdon;line([0,7],[0,0])36②由圖5-15可知,在區(qū)間[0,2*pi]上,函數(shù)的零點(diǎn)有3個(gè),分別位于0、3和6附近,求解這3個(gè)零點(diǎn)的MATLAB命令如下>>x1=fzero('sin(x)',0);x2=fzero('sin(x)',[2,4]);>>x3=fzero('sin(x)',6);x=[x1,x2,x3]結(jié)果顯示:x=03.14166.2832

結(jié)果表明,函數(shù)f=sin(x)在[0,2*pi]范圍內(nèi)有3個(gè)零點(diǎn),它們分別為0、3.1416和6.2832。一般來(lái)講,多元函數(shù)的零點(diǎn)問(wèn)題比一元函數(shù)的零點(diǎn)問(wèn)題更難解決,但當(dāng)零點(diǎn)大致位置和性質(zhì)比較好預(yù)測(cè)時(shí),也可以使用數(shù)值方法搜索精確的零點(diǎn)。37例5-4

試求以下非線性方程組,在(1,1,1)附近的數(shù)值解。解首先根據(jù)三元方程編寫一個(gè)函數(shù)ex5_4.m%ex5_4.mfunctionq=ex5_4(p)q(1)=sin(p(1))+p(2)^2+log(p(3))-7;q(2)=3*p(1)+2*p(2)-p(3)^3+1;q(3)=p(1)+p(2)+p(3)-5;然后利用下面的命令在初值x0=1,y0=1,z0=1下調(diào)用fsolve()函數(shù)直接求出方程的解。>>x=fsolve('ex5_4',[111])結(jié)果顯示:

x=0.63312.39341.973538例5-5

試求線性方程組的解。

解首先根據(jù)兩元方程編寫一個(gè)函數(shù)ex5_5.m%ex5_5.mfunctionz=ex5_5(p)z(1)=p(1)-p(2);z(2)=p(1)+p(2)-6;然后利用下面的命令在任意給的初值x0=0,y0=0下調(diào)用fsolve()函數(shù)直接求出方程的解。>>x=fsolve('ex5_5',[00])結(jié)果顯示:

x=3.00003.000039特別指出,對(duì)線性方程Ax=B在A的逆存在的條件下,有更簡(jiǎn)單的求解方法。在MATLAB下對(duì)以上線性方程,可利用以下命令進(jìn)行求解。x=inv(A)*B

例如對(duì)于例5-5也可利用以下命令,得到以上結(jié)果。

>>A=[1-1;11];b=[0;6];x=inv(A)*b405.3.2微分方程求解

MATLAB中提供了求解常微分方程的函數(shù)ode45(),其調(diào)用格式為x=ode45(fun,[t0,tf],x0,tol)例5-6

求微分方程在初始條件:下的解。解首先將以上微分方程寫成一階微分方程組令,則可得41

然后根據(jù)以上微分方程組編寫一個(gè)函數(shù)ex5_6.m。%ex5_6.mfunctiondx=ex5_6(t,x)dx=[x(2);(1-x(1)^2)*x(2)-x(1)];最后利用以下的MATLAB命令,即可求出微分方程在時(shí)間區(qū)間[0,30]上的解曲線,如圖5-6所示。>>[t,x]=ode45('ex5_6',[0,30],[1;0]);>>plot(t,x(:,1),t,x(:,2));xlabel('t');ylabel('x(t)')425.4.1函數(shù)極值在MATLAB中,提供了兩個(gè)基于單純形算法求解多元函數(shù)極小值的函數(shù)fmins()(僅適用于MATLAB6.5及以前的版本)和fminsearch(),以及一個(gè)基于擬牛頓法求解多元函數(shù)極小值的函數(shù)fminunc(),其調(diào)用格式分別為x=fmins(fun,x0,options)x=fminsearch(fun,x0,options)x=fminunc(fun,x0,options)

在調(diào)用以上函數(shù)時(shí),首先應(yīng)該寫一個(gè)描述f(·)的函數(shù),其格式為y=fun(x)

5.4MATLAB的函數(shù)運(yùn)算43

例5-7求函數(shù)在數(shù)值區(qū)間(-3,3)中的極小值。解①為了更好地選擇函數(shù)極值點(diǎn)處的初值,首先利用以下MATLAB命令,在區(qū)間(-3,3)繪制題給函數(shù)曲線,如圖5-7所示。

>>x=-3:0.1:3;y=3.*x-x.^3;plot(x,y)由圖5-14可見(jiàn),函數(shù)在區(qū)間(-3,3)中僅有1個(gè)極小值,且位于-1附近,因此-2,-1或0均可選作極小值點(diǎn)的初值,其結(jié)果均是一樣的。同理,0,1或2均可選作極大值點(diǎn)的初值。44②然后根據(jù)方程編寫一個(gè)函數(shù)ex5_7.m%ex5_7.mfunctiony=ex5_7(x)y=3*x-x^3;③最后利用下面的命令調(diào)用fminsearch()函數(shù)求方程的解。

>>[x,fmin]=fminsearch('ex5_7',0)圖5-7函數(shù)曲線或>>x=fminsearch('ex1_17',0),fmin=ex5_7(x)運(yùn)行結(jié)果:x=-1.0000fmin=-2

結(jié)果表明,函數(shù)在x=-1時(shí)有極小值fmin=-2。45

以上函數(shù)的極值問(wèn)題,也可直接利用以下命令得到與上面相同的結(jié)果。

>>f='3*x-x^3',[x,fmin]=fminsearch(f,0)或>>[x,fmin]=fminsearch('3*x-x^3',0)>>[x,fmin]=fminbnd('ex1_17',-2,0)>>[x,fmin]=fminbnd('3*x-x^3',-2,0)46

因?yàn)楹瘮?shù)的極小值問(wèn)題等價(jià)于函數(shù)的極大值問(wèn)題,所以利用函數(shù)fminsearch()也可用來(lái)求解函數(shù)的極大值,這時(shí)只需在所求函數(shù)前加一負(fù)號(hào)即可。例求函數(shù)的極大值,可利用以下命令>>f='-(3*x-x^3)',[x,fmin]=fminsearch(f,0);x>>fmax=-fmin或>>f='-(3*x-x^3)',x=fminsearch(f,0),fmax=3*x-x^3運(yùn)行結(jié)果:x=1.0000fmax=2

結(jié)果表明,函數(shù)在x=1時(shí)有極大值fmax=2。475.4.2函數(shù)積分對(duì)于函數(shù)f(x)的定積分MATLAB,采用自適應(yīng)變步長(zhǎng)方法給出了quad()函數(shù)來(lái)求取定積分,該函數(shù)的調(diào)用格式為y=quad(fun,a,b,tol)48例5-8

試求以下函數(shù)的積分解這一無(wú)窮定積分可以由有限積分來(lái)近似,一般情況下,選擇積分的上下限為±15就能保證相當(dāng)?shù)木取J紫雀鶕?jù)給定的被積分函數(shù)編寫下面的函數(shù)ex5_8.m%ex5_8.mfunctionf=ex5_8(x)f=1/sqrt(2*pi)*exp(-x.^2/2);然后通過(guò)下面的MATLAB語(yǔ)句可求出所需函數(shù)的定積分

>>formatlong;y=quad('ex5_8',-15,15)結(jié)果顯示:

y=1.00000007247356449

以上函數(shù)的積分問(wèn)題,也可直接利用以下命令得到與上面相同的結(jié)果。

>>formatlong;y=quad('1/sqrt(2*pi)*exp(-x.^2/2)',-15,15)或>>formatlong;f='1/sqrt(2*pi)*exp(-x.^2/2)';y=quad(f,-15,15)

另外,MATLAB給出一種利用插值運(yùn)算來(lái)更精確更快速求出所需要的定積分的函數(shù)quadl(),該函數(shù)的調(diào)用格式為y=quadl(fun,a,b,tol)其中,tol的默認(rèn)值為10-6,其他參數(shù)的定義及使用方法和quad()幾乎一致。該函數(shù)可以更準(zhǔn)確地求出積分的值,且一般情況下函數(shù)調(diào)用的步數(shù)明顯小于quad()。50

對(duì)于上例,使用quadl()函數(shù)可得如下結(jié)果。

>>formatlong;f='1/sqrt(2*pi)*exp(-x.^2/2)';y=quadl(f,-15,15)結(jié)果顯示:

y=1.000000000003378

在二維情況下求積分實(shí)質(zhì)上是求函數(shù)曲線與坐標(biāo)軸之間所夾的封閉圖形的面積,故利用MATLAB的trapz()函數(shù),也可求取定積分。例如對(duì)上例有

>>formatlong;x=-15:0.01:15;y=ex5_8(x);area=trapz(x,y)結(jié)果顯示:

area=1.00000000000000515.5MATLAB的文件I/O

在MATLAB中,提供了許多有關(guān)文件的輸入和輸出函數(shù),它們具有直接對(duì)磁盤文件進(jìn)行訪問(wèn)的功能,使用這些函數(shù)可以很方便地實(shí)現(xiàn)各種格式的讀取工作,不僅可以進(jìn)行高層次的程序設(shè)計(jì),也可以對(duì)低層次的文件進(jìn)行讀寫操作,這樣就增加了MATLAB程序設(shè)計(jì)的靈活性和兼容性。525.5.1處理二進(jìn)制文件對(duì)于MATLAB而言,二進(jìn)制文件是相對(duì)比較容易處理的。和后面介紹的文本文件相比較,這些文件是比較容易和MATLAB進(jìn)行交互的。對(duì)于和MATLAB同等層次的文件,可以使用load、save等命令對(duì)該文件進(jìn)行操作,具體的操作方法前面已經(jīng)介紹。這里將主要介紹如何在MATLAB中讀取低層次的數(shù)據(jù)文件方法,這些函數(shù)可以對(duì)多種類型的數(shù)據(jù)文件進(jìn)行操作,常用的函數(shù)如表5-2所示。

53表5-2二進(jìn)制文件I/O函數(shù)函數(shù)說(shuō)明函數(shù)說(shuō)明fopen()打開文件或獲取已打開文件的信息fscanf()按指定格式讀入文件中數(shù)據(jù)fclose()關(guān)閉文件fprintf()按指定格式將數(shù)據(jù)寫回文件feof()測(cè)試光標(biāo)是否到達(dá)文件末尾fread()以二進(jìn)制方式讀入文件中數(shù)據(jù)ferror()查詢文件操作錯(cuò)誤fwrite()以二進(jìn)制方式將數(shù)據(jù)寫回文件ftell()返回文件中光標(biāo)位置fgetl()返回不包括行尾終止符字符串fseek()設(shè)置文件中光標(biāo)位置fgets()返回包括行尾終止符的字符串frewind()將光標(biāo)位置移動(dòng)到文件頭541.文件的打開和關(guān)閉在對(duì)文件進(jìn)行處理的所有工作當(dāng)中,打開文件或者關(guān)閉文件都是十分基礎(chǔ)的工作。

MATLAB利用函數(shù)fopen()打開或獲取低層次文件的信息,該函數(shù)的調(diào)用格式為[fid,message]=fopen('filename','mode')其中,filename表示打開的文件名;mode表示打開文件的方式,。55

在打開文件后,如果完成了對(duì)應(yīng)的讀寫操作,應(yīng)該利用fclose()函數(shù)來(lái)關(guān)閉該文件,否則打開過(guò)多的文件,將會(huì)造成系統(tǒng)資源的浪費(fèi)。該函數(shù)的調(diào)用格式為status=fclose(fid)其中,fid為使用fopen()函數(shù)得到的文件句柄(或文件標(biāo)識(shí));status為使用fclose()函數(shù)得到的結(jié)果,如status=0表示關(guān)閉文件的操作成功,否則得到的結(jié)果為status=-1。56

例如用戶想新建一個(gè)名為myfile.txt的文件,對(duì)其進(jìn)行讀寫操作,則可以利用以下MATLAB命令

>>[myfid,message]=fopen('myfile.txt','w')結(jié)果顯示:

myfid=3message=''

完成了對(duì)該文件的讀取操作后,用戶可以調(diào)用fclose(myfid)命令來(lái)關(guān)閉該文件。572.讀取M文件常見(jiàn)的二進(jìn)制文件包括.m、.dat等文件,在MATLAB中可以使用函數(shù)fread()來(lái)讀取對(duì)應(yīng)的文件,該函數(shù)的調(diào)用格式為[A,count]=fread(fid,size,'precision')其中,fid為打開文件的句柄;size表示讀取二進(jìn)制文件的大小,其中當(dāng)size為n時(shí)表示讀取文件前面的n個(gè)整數(shù)并寫入到向量中,size為inf時(shí)表示讀取文件直到結(jié)尾。58例5-9利用函數(shù)fread()讀取M文件的內(nèi)容。解首先利用MATLAB的M文件編輯器編寫具有以下內(nèi)容的M文件,并將其以ex5_9.m保存。%ex5_9.ma=3;b=6;c=a*b然后利用以下MATLAB命令讀取該文件。>>fidex5_9=fopen('ex5_9.m','r+');A=fread(fidex5_9)結(jié)果顯示:A=9761…429859

從上面的結(jié)果可以看出,盡管打開的文件中是程序代碼,但是使用fread()讀取該文件后,得到的是數(shù)值數(shù)組。利用以下命令可以得到該文件的程序代碼。>>disp(char(A'));結(jié)果顯示:a=3;b=6;c=a*b

從結(jié)果的角度來(lái)看,上面的命令代碼和“typeex5_9.m”是相同的,相當(dāng)于將該文件中的所有代碼都顯示出來(lái)。603.讀取TXT文件

TXT文件也是比較常見(jiàn)的二進(jìn)制文件,以下通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)介紹如何在MATLAB中讀取TXT文件。例5-10

在MATLAB中讀取ex5_10.txt文件的內(nèi)容。解首先將以上M文件ex5_9.m更名為ex5_10.txt,然后利用以下MATLAB命令。>>fidex5_10=fopen('ex5_10.txt','r');>>A=fread(fidex5_10,'*char');sprintf(A)結(jié)果顯示:ans=a=3;b=6;c=a*b614.寫入二進(jìn)制文件在MATLAB中,如果用戶希望按照指定的二進(jìn)制文件格式,將矩陣的元素寫入文件中,可以使用函數(shù)fwrite()來(lái)完成。該函數(shù)的調(diào)用格式為fwrite(fid,A,'precision')其中,fid為打開文件的句柄;A表示寫入數(shù)據(jù)的向量或矩陣;precision用來(lái)控制二進(jìn)制數(shù)據(jù)轉(zhuǎn)換成為MATLAB矩陣時(shí)的精度。62例5-11

在MATLAB中使用函數(shù)fwrite()來(lái)寫入二進(jìn)制文件。解MATLAB命令。>>fidex5_11=fopen('ex5_11.txt','w');A=[123;456]>>fwrite(fidex5_11,A,'int32');fclose(fidex5_11);>>fidex5_11=fopen('ex5_11.txt','r');>>B=fread(fidex5_11,[2,3],'int32'),fclose(fidex5_11);結(jié)果顯示:A=123456B=123456635.5.2處理文本文件

MATLAB的數(shù)據(jù)I/O操作支持多種數(shù)據(jù)格式,它們包括:文本數(shù)據(jù)、圖形數(shù)據(jù)、音頻和視頻數(shù)據(jù)、電子表格數(shù)據(jù)和科學(xué)數(shù)據(jù)。針對(duì)不同數(shù)據(jù)類型的數(shù)據(jù)文件,提供了多種處理函數(shù),分別用于處理各種格式的數(shù)據(jù)文件。其中文本文件的讀取函數(shù)如表5-3所示。文本文件中數(shù)據(jù)是按照ASCII碼存儲(chǔ)的字符或數(shù)字,它們可以顯示在任何文本編輯器中。64表5-3文本文件I/O函數(shù)函數(shù)說(shuō)明csvread()以逗號(hào)為分隔符,將文本文件數(shù)據(jù)讀入MATLAB工作區(qū)csvwrite()以逗號(hào)為分隔符,將MATLAB工作區(qū)變量寫入文本文件dlmread()以指定的ASCII碼為分隔符,將文本文件數(shù)據(jù)讀入MATLAB工作區(qū)dlmwrite()以指定的ASCII碼為分隔符,將MATLAB工作區(qū)變量寫入文本文件textread()按指定格式,將文本文件數(shù)據(jù)讀入MATLAB工作區(qū)textwrite()按指定格式,將MATLAB工作區(qū)變量寫入文本文件651.讀取文本文件在MATLAB中,提供了多個(gè)函數(shù)來(lái)讀取文本文件中的數(shù)據(jù),其中比較常見(jiàn)的函數(shù)有csvread()、csvread()和csvread(),這些函數(shù)有各自的使用范圍和特點(diǎn)。它們的調(diào)用格式分別為A=csvread('filename',row,col)A=dlmread('filename',delimiter)A=textread('filename','format',N)662.寫入文本文件利用函數(shù)csvwrite()、csvwrite()和csvread()可將數(shù)據(jù)寫入文本文件,它們的調(diào)用格式分別為csvwrite('filename',A,row,col)dlmwrite('filename',A,'-append',delimiter)67

例5-12

在MATLAB中使用函數(shù)csvwrite()或dlmwrite()來(lái)寫入文本文件。解MATLAB命令。>>A=[123;456];csvwrite('ex5_12.dat',A);typeex5_12.dat>>B=csvread('ex5_12.dat'),C=dlmread('ex5_12.dat')或>>A=[123;456];dlmwrite('ex5_12.txt',A);typeex5_12.txt;>>B=csvread('ex5_12.txt',0,0),C=dlmread('ex5_12.txt')結(jié)果顯示:1,2,34,5,6B=123456C=123456685.6MATLAB的圖形界面

作為強(qiáng)大的科學(xué)計(jì)算軟件,MATLAB也提供了圖形用戶界面(GUI)的設(shè)計(jì)和開發(fā)功能。MATLAB中的基本圖形用戶界面對(duì)象分為3類:用戶界面控件對(duì)象(uicontrol)、下拉式菜單對(duì)象(uimenu)和內(nèi)容式菜單對(duì)象(uicontextmenu)。其中,函數(shù)uicontrol()能建立按鈕、列表框、編輯框等圖形用戶界面對(duì)象;uimenu()能建立下拉式菜單和子菜單等圖形用戶界面對(duì)象;uicontextmenu()能建立內(nèi)容式菜單用戶界面對(duì)象。695.6.1啟動(dòng)GUIBuilder

在MATLAB中,可以用以下幾種方法啟動(dòng)GUIBuilder。

(1)在MATLAB操作界面的命令窗口中直接鍵入guide命令;

(2)在MATLAB6.x/7.x操作界面中,利用菜單命令File

New

GUI,或單擊左下角“Start”菜單中,“MATLAB”子菜單中的“GUIDE(GUIBuilder)”選項(xiàng);

(3)在MATLAB8.x/9.x操作界面的主頁(yè)(HOME)中,利用新建(New)菜單下的圖形用戶界面(GUI)命令。70

選擇以上任意一種方法,便可首先打開GUI設(shè)計(jì)工具的對(duì)象設(shè)計(jì)編輯器界面,如圖所示。

圖5-8GUI設(shè)計(jì)工具的模板界面圖5-9對(duì)象設(shè)計(jì)編輯器界面71

用鼠標(biāo)拖拉對(duì)象設(shè)計(jì)區(qū)(LayoutArea)左邊的按鈕,便可在對(duì)象設(shè)計(jì)區(qū)依次生成PushButton(按鈕)、Slider(滑塊)、RadioButton(單選按鈕)、CheckBox(復(fù)選框)、EditText(可編輯文本)、StaticText(靜態(tài)文本)、Pop-upMenu(彈出式菜單)、ListBox(列表框)、ToggleButton(切換按鈕)、Table(表)、Axes(軸)、Panel(面板)、ButtonGroup(按鈕組)和ActiveXControl(ActiveX控件)等圖形控件對(duì)象。創(chuàng)建對(duì)象后,利用鼠標(biāo)右鍵可顯示所選對(duì)象的一個(gè)彈出式菜單,在此可從中選擇某一個(gè)子菜單項(xiàng)進(jìn)行相應(yīng)的設(shè)計(jì)。通過(guò)雙擊該對(duì)象,也會(huì)顯示該對(duì)象的屬性檢查器(PropertyInspector),并對(duì)其屬性值進(jìn)行設(shè)置。5.6.2對(duì)象設(shè)計(jì)編輯器

72例5-13

利用圖形用戶界面生成一個(gè)按鈕,來(lái)執(zhí)行例3-2中的ex3_2.m程序。解

①利用BlankGUI模板,用鼠標(biāo)拖拉在對(duì)象設(shè)計(jì)區(qū)生成一個(gè)“PushButton”按鈕;②雙擊“PushButton”按鈕,顯示該按鈕的屬性檢查器(PropertyInspector),并將“String”的屬性值“PushButton”改為“繪制極坐標(biāo)方程曲線”;③利用鼠標(biāo)右鍵單擊“PushButton”按鈕,顯示該按鈕的彈出式菜單,執(zhí)行菜單中的ViewCallbacks

Callback命令,按要求給定一個(gè).fig文件名,如ex5_13后,自動(dòng)打開一個(gè)同名的M文件,同時(shí)光標(biāo)指向該按鈕的回調(diào)函數(shù)functionpushbutton1_Callback(…)命令處;73④在ex5_13.m文件中的回調(diào)函數(shù)functionpushbutton1_Callback(…)命令后,增加一條命令:ex3_2。保存ex5_13.m文件后,同時(shí)也將對(duì)象設(shè)計(jì)編輯器中的文件自動(dòng)保存為ex5_13.fig。⑤在MATLAB命令窗口中,直接輸入命令ex5_13,打開圖形用戶界面ex5_13.fig后,點(diǎn)擊其“繪制極坐標(biāo)方程曲線”按鈕,便可顯示如圖3-4所示的結(jié)果。745.7MATLAB編譯器

MATLAB在許多學(xué)科領(lǐng)域中成為計(jì)算機(jī)輔助設(shè)計(jì)與分析、算法研究和應(yīng)用開發(fā)的基本工具和首選平臺(tái)。但由于MATLAB采用偽編譯的形式,在MATLAB中編寫的程序無(wú)法脫離其工作環(huán)境而獨(dú)立運(yùn)行。針對(duì)這個(gè)問(wèn)題,Mathworks公司為MATLAB提供了應(yīng)用程序接口,允許MATLAB和其他應(yīng)用程序進(jìn)行數(shù)據(jù)交換,并且提供了C/C++數(shù)學(xué)和圖形函數(shù)庫(kù),為在其他程序設(shè)計(jì)語(yǔ)言調(diào)用MATLAB高效算法提供了可能。利用MATLAB編譯器,不僅可以把M文件編譯成MEX文件(擴(kuò)展名為.dll)或獨(dú)立應(yīng)用的EXE程序(擴(kuò)展名為.exe),減少對(duì)語(yǔ)言環(huán)境本身的依賴性;而且可以通過(guò)編譯,隱藏自己開發(fā)的算法,防止修改其內(nèi)容。755.7.1創(chuàng)建MEX文件1.利用C文件創(chuàng)建MEX文件如果要在MATLAB的當(dāng)前工作目錄中,生成一個(gè)與C源代碼程序同名的MEX文件,只需要簡(jiǎn)單地在MATLAB命令窗口輸入以下命令。>>mexfilename.c

以上命令中的filename.c為當(dāng)前工作目錄中將要?jiǎng)?chuàng)建MEX文件的C源代碼程序名。76例5-14將MATLAB的自帶文件yprime.c編譯成MEX文件.解首先將子目錄matlab\extern\examples\mex中的yprime.c文件復(fù)制到MATLAB的當(dāng)前工作目錄中,并更名為ex5_14.c,然后在MATLAB命令窗口中輸入以下命令。>>mexex5_14.c

編譯成功后,便可在MATLAB的當(dāng)前工作目錄中,生成一個(gè)MEX文件ex5_14.mex(MATLAB6.5為ex5_14.dll)。此時(shí)在MATLAB命令窗口輸入以下命令。>>y=ex5_14(1,1:4)結(jié)果顯示:y=2.00008.96854.0000-1.0947772.利用M文件創(chuàng)建MEX文件如果要在MATLAB的當(dāng)前工作目錄中,生成一個(gè)與M文件同名的MEX文件,只需要簡(jiǎn)單地在MATLAB命令窗口輸入以下命令:>>mcc-xfilename.m1)由MATLA

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論