




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第1章沒有MATLAB就沒有樂趣。MATLAB是什么Nachtigal,M.N.,Reddy,S.C.,Trefethen,L.N.(1990)。不對稱矩陣迭代有多快?方法的CopperMountain會議論文集,CopperMountainCO,1-5,1990年4月。1.1MATLAB能做什么MATLAB是一個可視化的計算程序,被廣泛地使用于從個人計算機到超級計算機范圍內(nèi)的各種計算機上。MATLAB包括命令控制、可編程,有上百個預(yù)先定義好的命令和函數(shù)。這些函數(shù)能通過用戶自定義函數(shù)進一步擴展。MATLAB有許多強有力的命令。例如,MATLAB能夠用一個單一的命令求解線性系統(tǒng),能完成大量的高級矩陣處理。MATLAB有強有力的二維、三維圖形工具。MATLAB能與其他程序一起使用。例如,MATLAB的圖形功能,可以在一個FORTRAN程序中完成可視化計算。25個不同的MATLAB工具箱可應(yīng)用于特殊的應(yīng)用領(lǐng)域。MATLAB在以下的領(lǐng)域里解決各種問題是一個十分有效的工具:?工業(yè)研究與開發(fā)。?數(shù)學(xué)教學(xué),特別是線性代數(shù)。所有基本概念都能涉及。?在數(shù)值分析和科學(xué)計算方面的教學(xué)與研究。能夠詳細地研究和比較各種算法。?在諸如電子學(xué)、控制理論和物理學(xué)等工程和科學(xué)學(xué)科方面的教學(xué)與研究。?在諸如經(jīng)濟學(xué)、化學(xué)和生物學(xué)等有計算問題的所有其他領(lǐng)域中的教學(xué)與研究。?在MATLAB中創(chuàng)建的組是矩陣,MATLAB的名字取自矩陣實驗室(MATrixLABoratory)。1.2MATLAB實例本節(jié)中的實例恰當而簡潔地展示了MATLAB能做什么。在一些實例中給出了完整的MATLAB命令;而在另一些實例中,為簡化僅給出部分命令。在本書中出現(xiàn)的MATLAB代碼用的是一種特殊的字體以區(qū)別于書中別的文字。MATLAB的輸出是斜體字,即:我們輸給MATLAB的命令是正體;MATLAB給出的輸出答案是斜體。百分符號%在MATLAB中用做注釋符號,在本書中全部都是這樣使用。采用的其他表示方法是:數(shù)量和預(yù)定義函數(shù)用斜體字,矩陣、向量和用戶自定義函數(shù)用黑體字。矩陣用大寫2MATLAB5手冊2MATLAB5手冊字母開頭命名,而向量以小寫字母開頭。細胞矩陣是如同矩陣或向量的概念,也采用黑體字,其結(jié)構(gòu)和對象也是如此。在命令表中,用斜體字表示那些可選的函數(shù)參數(shù)。例如,command(parl,par2),參數(shù)par1總是需要的,而par2是可選的。■例1.1二維和三維函數(shù)MATLAB能用于計算,并以二維和三維圖形顯示各種函數(shù)。在MATLAB函數(shù)中包括了所有主要的數(shù)學(xué)函數(shù)和大量的高級函數(shù)。(a)用簡短的MATLAB命令計算并繪制在0≤x≤6范圍內(nèi)的sin(2x)、sinx2和sin2x。x=linspace(0,6);%創(chuàng)建一個向量x。nxyxxsinx章。由此能夠很容易地在一個圖上繪制sin(2x)、sin(x2)和sin2x的曲線并正確地標記它們(圖1-1)。圖1-1同一圖上的三條曲線用mesh和隱藏線繪圖用contour繪圖用surf和用mesh和隱藏線繪圖用contour繪圖圖1-2四種方法繪制雙變量的一個函數(shù)的圖形3下載第1章MATLAB是什么3下載(c)MATLAB也能繪制一條參數(shù)曲線,例如:xy圖1-3一個參數(shù)曲線圖■■例1.2函數(shù)分析MATLAB命令fzero和fmin可以用于尋找一個函數(shù)的零點和最小值。函數(shù)xex-ex-sinx3可以用名叫func的用戶自定義函數(shù)(見2.9節(jié))表示,并存入一個名叫func.m的M文件中。這個文件由下列行組成:如果這個M文件被存放在當前的工作目錄中,或在一個稱為matlab的子目錄中,函數(shù)func就可以像預(yù)定義的MATLAB函數(shù)一樣調(diào)用。例如,調(diào)用xiszero=func(0),給出的答案是:-1用這樣定義的函數(shù),MATLAB提供了一個命令來尋找方程xex2-ex2-sinx3=0的零點。命令xsolvfzerofunc3)給出:xsolv=1.2194在本例中,命令中的第2個自變量用的是3,是開始計算的一個初始近似值。如果在-1≤x≤1.5區(qū)間內(nèi)繪制這個函數(shù),則正確答案如圖1-4所示。圖1-4在-1≤x≤1.5區(qū)間內(nèi)繪制函數(shù)xex-ex-sinx3的圖形4MATLAB5手冊4MATLAB5手冊當x在0.5和1之間時,這個函數(shù)看起來有一個極小值,為正確找出這個極小值,用命令mpoint=用于檢查MATLAB中用戶自定義函數(shù)的命令可參見第10章和第11章?!觥隼?.3線性系統(tǒng)與特征值(a)MATLAB可以用一個簡單的命令行求解線性系統(tǒng),系數(shù)矩陣A和右側(cè)b定義如下:這對應(yīng)于線性系統(tǒng)Ax=b,如下所示:這可由如下命令求解:x=A\b(b)還有許多矩陣控制命令。例如,例(a)中矩陣A的特征值很容易地可以由下列命令得到:矩陣EigenVectors的列是A的特征向量,EigenValues中對角線元素是特征值。由于矩陣A是對稱的,因此,所有的特征值都是實數(shù),三個特征向量是相互正交的。MATLAB中的基本概念是矩陣?;镜木仃嚸钤诘?章描述,更多的命令將在第4、7、■例1.4曲線擬合與插值(a)如果有兩個向量x和y表示的x-y平面上的一組點,那么,可以對它們進行插值點或者擬合一條曲線。令下載第1章MATLAB是什么下載對應(yīng)x-y平面上的9個點。首先,展示以最小二乘法擬合數(shù)據(jù)的線性函數(shù),這個可以通過MATLAB中的三個簡單的命令來實現(xiàn):結(jié)果見圖1-5(左圖)。%linc=A向量等于x點上多項式p1的值。%繪制多項式和由‘x’標記的數(shù)據(jù)。能以最小二乘法對一組點擬合高次多項式。對上面的命令行進行一點小改動就可以得到7yx其結(jié)果如圖1-5(右圖)所示。圖1-5x-y平面上對一組具有9個點的數(shù)據(jù)擬合的1次和7次多項式(b)MATLAB提供了二維和三維的內(nèi)插函數(shù)。給定一組點(xi,yi)和一些內(nèi)插點x?iMATLAB能返回通過對這些數(shù)據(jù)內(nèi)插的插入點的值,這可以有不同的方法實現(xiàn)。作為一個例子,將使用(a)中的一組點來給出在下列點中插入的值:線性插值三次樣條插值圖1-6piecewise線性函數(shù)插值(左)和三次樣條插值(右)MATLAB5手冊MATLAB5手冊xi8)在圖1-6中,分別展示了分段線性插值和三次樣條插值?!畑’標記表示原始數(shù)據(jù),點線是中間點的被插函數(shù)。有關(guān)插值和曲線擬合的詳細信息可參見第10章。■■例1.5統(tǒng)計MATLAB包含了統(tǒng)計命令。例如,很容易地求得實驗數(shù)據(jù)的平均值和中位值以及繪制統(tǒng)計頻數(shù)直方圖或直方圖。圖1-7顯示了某小鎮(zhèn)上每個人的年齡。上圖是統(tǒng)計頻數(shù)直方圖,顯示了每個年齡的人數(shù)。例如,看到兩個年齡最大的人是92歲。統(tǒng)計頻數(shù)矩形圖也表示了小鎮(zhèn)上沒有人是11歲或12歲,7歲的兒童7人。也能看出32歲以下的人與32歲以上的人一樣多,因為這是一個中間年齡。此外,平均年齡是35歲。這些也都在圖中標出。另外,下圖展出了小鎮(zhèn)上居民的年齡。例如,如果知道要列出的是第11人,那么也就知道這個人是一個小孩。因為第11個直方塊接觸x軸。這種繪圖稱為階梯圖,即沒有內(nèi)部線的直方圖。統(tǒng)計命令在第6章中描述。小鎮(zhèn)居民的統(tǒng)計頻數(shù)矩形小鎮(zhèn)居民的統(tǒng)計頻數(shù)矩形圖中間值平均年齡小鎮(zhèn)上每個人的年齡圖1-7來自小鎮(zhèn)數(shù)據(jù)的一個統(tǒng)計頻數(shù)矩形圖■■例1.6傅立葉變換與信號分析MATLAB能利用快速傅立葉變換FFT計算離散傅立葉變換,這用于信號分析和解微分方程。為了證明MATLAB的傅立葉變換,用0和1之間的隨機數(shù)干擾5sin(x)+2sin(5x)函數(shù):下載第1章MATLAB是什么下載干擾信號和原始信號如圖1-8(上)所示。然后,變換這個信號,并且刪除變換后信號中的所有高頻,即系數(shù)向量中心部分設(shè)為零。transf=fft(signal);傅立葉變換的實際部分如圖1-8(下)所示。圖1-9(上)中刪除了高頻傅立葉變換,僅低頻向量通過逆傅立葉變換而變換:filtsig=ifft(filttransf);干干擾信號和原始信號干擾信號的傅立葉變換刪刪除高頻過濾信號和原始信號圖1-9過濾傅立葉變換這個過濾的信號與原始信號一起在圖1-9(下)中展示。這個過濾的信號如期望一樣是光滑的。因為這種干擾也影響部分低頻信號,所以它與原始信號不等。在10.5節(jié)中,作為MATLAB的一部分描述了傅立葉變換,更詳細的有關(guān)信號處理工具箱■■例1.7常微分方程MATLAB可以用數(shù)字求解常微分方程。作為一個實例,展示在一個軌道上一只貓追趕一只機器玩具老鼠。貓和老鼠的位置分別用(x(t),y(t))和(X(t),Y(t))表示。貓的速度向量是和貓與老鼠之間的差向量對應(yīng)的。貓從(50,40)開始,這就給出了如下的微分方程系統(tǒng):wwawa式中w是老鼠的速度,a是貓和老鼠在t時刻相距的距離,由下式給出:這個系統(tǒng)的解如圖1-10所示,從圖中可以看到由于老鼠跑得太快,貓并沒有成功地抓到老鼠。MATLAB5手冊MATLAB5手冊貓和老鼠貓貓圖1-10貓捉機器玩具老鼠。小圓是老鼠的終點,十字是貓的終點在11.2節(jié)中描述了如何使用MATLAB求解一般的常微分方程問題?!觥隼?.8偏微分方程在MATLAB中有許多用于不同應(yīng)用領(lǐng)域的工具箱。這里,作為一個例子給出PDE工具箱,這個工具箱能通過使用有限元方法(theFiniteElementMethod)解橢圓方程、拋物線方程和雙曲線方程。區(qū)域要分成大量的三角形子區(qū)域,對每個三角形,其解由一個簡單函數(shù)估計。所用的三角形越多,其偏差就越小。求解這個區(qū)域里的橢圓問題-u=sin(2y+/2)cos(2x+/2),如圖1-11所示。拉普拉斯算子是,邊界條件u=0,也可由PDE工具箱所做的三角形子區(qū)域給出。這個問題的解可以用可視化等高線以二維繪制,如圖1-12所示。圖1-11PDE工具箱采用FEM的三角形子區(qū)域■例1.9MATLAB中的編程PDEPDE解圖1-12PDE工具箱計算的等高線解的圖示■MATLAB是可編程的。命令序列可以在文本編輯器上寫入,然后可以調(diào)用MATLAB命令窗口上的用戶定義函數(shù)或程序。文件的名字必須要有擴展名.m,這個文件就稱為M文件。這些M文件可以用相同的方法象標準MATLAB函數(shù)一樣使用。(a)階乘n!=1×2×3×…×n可以用不同的方法計算。這里,展示一個遞歸的用戶定義函數(shù):下載第1章MATLAB是什么下載這個M文件名叫factorial.m,對這個函數(shù)的調(diào)用如下所示:fourfactorial=factorial(4)(b)在MATLAB中可以使用面向?qū)ο蟮某绦蛟O(shè)計。有一個類world,用來模擬一個小世界內(nèi)的生與死。對于一個要在這個世界出生的個人來說,他需要一些鄰居,但太多的鄰居會構(gòu)成生存危機。類world的命令是在目錄@world中的文件world.m中。%這是命令方式。iv屬于類的這種方法在目錄@world中定義,但不在這里說明。現(xiàn)在,人們可以通過下列命令產(chǎn)生一個對象w:現(xiàn)在重復(fù)■例1.10圖形用戶界面圖1-1310年后世界w上的人口■MATLAB提供了一個設(shè)計易于使用的程序的機會。程序能夠在一個控制圖上由按鈕、彈出菜單、可編輯文本等控制,這部分在14.3節(jié)中描述。在14.4節(jié)中,演示了一個由瑞典科學(xué)家MVTLVBS手冊MVTLVBS手冊設(shè)計的圖形用戶界面的實例。這個程序用于解決非等距網(wǎng)格的一個模型方程。■1.3MATLAB幫助本書打算展示MATLAB中可用的命令,并解釋如何使用MATLAB。對于讀者,多數(shù)時候這已足夠,但對想學(xué)習(xí)更多內(nèi)容的讀者來說,在MATLAB中可以使用幫助。在系統(tǒng)提示符下,鍵入help命令,MATLAB給出這個命令的解釋。在MATLAB5中也包含了一個強有力的HTML格式的幫助數(shù)據(jù)庫。這使得尋找一個命令更容易,依參考而得到幫助。當給出helpdesk命令時,一個瀏覽器如NetscapeNavigator或MicrosoftInternetExplorer就運行,即載入一個索引頁。如果這還不能滿足,可向MathWorks公司訂購MATLAB的完整手冊,具體方法參見前言。退出和中斷特殊的功能鍵退出和中斷特殊的功能鍵第2章MATLAB啟動首先描述如何啟動和如何退出MATLAB,這一點很重要。然后描述如何進行分配和計算,也演示如何儲存結(jié)果、獲得幫助和定義你自己的函數(shù)。本章的部分內(nèi)容對MATLAB老用戶可以跳過不讀,但是,建議快速瀏覽本章,也建議參見附錄A“MATLAB初步”。2.1啟動和退出MATLAB不同的計算機系統(tǒng),MATLAB的啟動也不一樣。在Windows和Macintosh系統(tǒng)中,程序通常通過點擊一個圖標而啟動。在UNIX系統(tǒng)中,程序是通過在命令行系統(tǒng)提示符后鍵入如下字符啟動:如果上述工作有問題,可請教系統(tǒng)管理員。當啟動MATLAB時,如果matlabrc.m和startup.m文件存在,則執(zhí)行這些文件。在這些文件中,為滿足個人需要,用戶可以給定命令以調(diào)整MATLAB,例如,constants用于設(shè)置圖形等。在一個多用戶系統(tǒng)上,系統(tǒng)管理員存儲matlabrc.m文件,但你也能為自己的使用創(chuàng)建文件startup.m,參見例2.20(c)。要退出MATLAB,鍵入quit或exit。命命令集1exitexit,quitCtrl-c結(jié)束MATLAB會話。程序完成,如果沒有明確保存,則變量中的數(shù)據(jù)丟失。參見2.8節(jié)。中斷一個MATLAB任務(wù)。例如,當MATLAB正在計算或打印時,中斷一個任務(wù),但會話并沒有結(jié)束。除此之外,對一些系統(tǒng)有指定的菜單選擇。例如,在Windows和Macintosh系統(tǒng)中,在文件菜單下可以找到選項quit。當編輯或執(zhí)行MATLAB時,下列的快捷鍵十分有用。通常因為不同的平臺使用不同的鍵,因此,給定了一些替換鍵。在你的系統(tǒng)上試一下這些鍵,注意哪些鍵組合使用。命命令集2→或Ctrl_f恢復(fù)前面的命令?;謴?fù)當前命令之后鍵入的命令。向右移動一個字符。向左移動一個字符。刪除字符。向左移動一個字。向右移動一個字。__MATLAB5手冊__MATLAB5手冊下載CtrleCtrlkcedit移動到行的第一個字符。移動到行尾。刪除到行尾。在不同的快捷鍵間轉(zhuǎn)換。鍵入helpcedit可得到更多的信息。2.2MATLAB中矩陣和多維矩陣介紹MATLAB中數(shù)據(jù)的基本格式是矩陣。二維矩陣是一個帶有以行和列排列的元素的矩形表。如果一個2×3的矩陣如下:第1行是(123),第2列是■矩陣的元素,即數(shù)aij,通常是實數(shù),但也可以是復(fù)數(shù)。一個aji是指第i行、第j列的數(shù)。在例2.1中,有a21=4。在本章,僅涉及數(shù)值矩陣,即矩陣包含的僅是數(shù)字。包含字符文本的矩陣(見命令集4)和細胞矩陣,在5.5節(jié)中介紹,這些矩陣包含了不同類型的數(shù)據(jù)。當矩陣僅由一行組成時,它是一個特例,就是一個行向量。如果矩陣僅有一列,就是一個列向量。向量是矩陣的特例。向量中元素的數(shù)量是向量的長度。在MATLAB中,一個變量可以通過給它分配一個值來定義,如下所示:在expression之后按回車鍵。表達式可以是由數(shù)字、變量、操作符和函數(shù)等組成。定義一個變量的另一個方法是輸入expression項,然后MATLAB對預(yù)定義變量ans(answer的縮寫)分配這個表達式值。二維矩陣的分配可以有多種方法實現(xiàn)。最簡單的方法是由方括號[](參見helpparen)包圍的逐行給定元素。如果定義一個標量,則方括號就不需要了。相同行中的元素是由一行或多個空格‘’或一個逗號‘,’分隔,列由分號‘;’或回車鍵分隔。沒有結(jié)尾分號的每個命令在屏幕上顯示出其結(jié)果。若結(jié)尾帶分號,就執(zhí)行計算,但計算結(jié)果并不顯示。在MATLAB中使用的標點符號的一覽表可以通過輸入helppunct得到。一個變量的值可以通過輸入它的名字和按回車鍵獲得,MATLAB以顯示這個變量的名字和值作為回答。如果這個變量并不存在,就顯示一個錯誤信息。顯示一個變量內(nèi)容的另一個方法可參見5.1.3節(jié)。一個矩陣或一個向量的指定元素是由指定它的索引來決定。例如:二維矩陣:如果這個變量是一個向量,就只允許有一個索引。如何處理多維矩陣將在例2.3中討論。第2章MATLAB啟動第2章MATLAB啟動(a)一個標量的指定。如果寫入x=7,則在屏幕上打印如下:7(b)如果僅寫入7,則結(jié)果變?yōu)椋篴ns=7(c)2×3維情況下一個矩陣的定義可以通過逐行給出其元素:452還在屏幕上給出如下結(jié)果:A=123456(d)也可以在同一行上用分號來分隔行以給出所有的元素:A=[12;3456];在命令后的一個分號禁止打印出結(jié)果。(e)一個行向量和一個列向量的定義:(f)顯示一個變量的值。輸入colvec,MATLAB顯示:(g)逐個元素地分配矩陣:得到的結(jié)果是:17■三維矩陣和其他數(shù)據(jù)結(jié)構(gòu)在函數(shù)自變量中依次使用行、列和頁維數(shù)次序。對于多維矩陣有兩個索引原理,最自然的就是矩陣索引,它給出了每個元素在每一維中的一個位置,例如,在上例中的行和列的索引。圖2-1給出了可視化的3×3×2的三維矩陣的不同元素的索引。另一個索引原理是線性索引方法。一些命令把整個矩陣說明為一個長列元素,例子之一是reshape(詳見命令集37)。如果所有的元素被放在一行上,那么對各元素給定的一個線性索引號說明了一個指定矩陣的索引給出的某個位置,如圖2-2所示。創(chuàng)建一個多維矩陣有多種方法。MVTLVBS手冊MVTLVBS手冊圖2-1一個3×3×2矩陣的元素索引圖2-2一個3×3×2矩陣的線性索引(a)有兩個二維矩陣A和B可以很容易地構(gòu)造一個三維矩陣C:(b)為改變C中的一個元素,可以輸入:■MATLAB允許在同一命令行上定義多個變量,也可以在按回車鍵之前通過輸入三個點“……”以便在下一行繼續(xù)輸入。(a)在一行上的幾個命令:(b)一個長的命令可以分成幾行書寫:■MATLAB記憶不同矩陣變量的維數(shù)。為了獲得一個變量的維數(shù),可以使用命ize和length。第2章MATLAB現(xiàn)在,令A(yù)是一個m×n×…×p矩陣,x是m×1矩陣(一個列向量)或是1×n矩陣(一個行向量),MATLAB有如下的命令集:命令集3變量大小ndimssub2ind(size,m,n,…)(size,ind)給出包含A的維數(shù)的一個行向量。在這個返回向量中的第一個元素是行數(shù),隨后是列數(shù)、頁數(shù)等。給出A的維數(shù)、m行數(shù)和n列數(shù),即兩個標量。如果給出的自變量少,則后邊的維數(shù)加入最后一個在數(shù)組dim中給出A的維數(shù)。給出向量x的大小或長度的一個行向量。如果x是一個列向量,則第1個元素是m,第2個元素是1。如果x是一個行向量,則第1個元素是1,第2個元素是n。給出一個向量的長度,即如果x是一個行向量,那么這個向量的長度就是n;如果x是一個列向量,那么這個向量的長度就是m。length(size(A))。用線性索引ind對元素給出索引(m,n,…),要把圖像矩陣說明為多維,其參數(shù)size必須是一個向注意有時用字dimemsion代替維數(shù)和長度,通常它可以表示與一個向量范數(shù)相關(guān)的長度和與一個矩陣范數(shù)相關(guān)的矩陣的維數(shù)??墒?,在本書中,維數(shù)和長度的使用與size和length有相同的含義。當這個長度概念以其他意義使用時,就要說明。(a)命令thesize1=size(A),式中的A與例2.2(c)中的相同,結(jié)果為:23命令thesize2=size(C),式中的C是例2.3中的三維矩陣,得到:thesize2=233(b)檢查圖2-2中的信息是否正確,可以使用:■MVTLVBS手冊數(shù)據(jù)類型和轉(zhuǎn)換函數(shù)邏輯函數(shù)MVTLVBS手冊數(shù)據(jù)類型和轉(zhuǎn)換函數(shù)邏輯函數(shù)2.3MATLAB中的變量在MATLAB中,變量名可以有19個字符。字母A~Z、a~z、數(shù)字和下劃線‘_’可以作為變量名,但第一個字符必須是一個字母。預(yù)定義函數(shù)名也可以像一個變量名那樣使用,但函數(shù)只有在變量由命令clear刪除后才能使用,所以,不主張這樣使用。MATLAB是區(qū)分大小字母的,如矩陣a和A是不一樣的。MATLAB命令通常是用小寫字母書寫。例如,命令abs(A)給出了A的絕對值,但ABS(A)會導(dǎo)致在屏幕上顯示如下錯誤信息:在變量使用之前,用戶不需要指定一個變量的數(shù)據(jù)類型,也不必聲明變量。MATLAB有許多不同的數(shù)據(jù)類型,這對決定變量的大小和形式是有價值的,特別適合于混合數(shù)據(jù)類型、矩陣、細胞矩陣、結(jié)構(gòu)和對象。對于每一種數(shù)據(jù)類型,有一個名字相同的、可以把變量轉(zhuǎn)換到那種類型的函數(shù)。所用的不同的基本數(shù)據(jù)類型如下所示。命命令集4ddoublecharsparseunit8是一個雙精度浮點數(shù),每個存儲的雙精度數(shù)用64位。用于存儲字符,每個存儲的字符用16位。用于存儲稀疏矩陣,由一個sparse使用的內(nèi)存是4+(非零元素數(shù)*16)。是一個無符號的8位整型數(shù)。數(shù)學(xué)函數(shù)并不對使用到的這種數(shù)據(jù)類型進行定義,如存儲圖像。混合數(shù)據(jù)類型在第5章和第12章中描述。在MATLAB中,有許多功能可以幫助找出一個變量是否是一個特殊類型。也有一個特殊的邏輯向量,它是由命令repmat生成(見第4.1節(jié))。命命令集5如果x是一個細胞矩陣,返回1;否則為0。可參見第5.5節(jié)。如果x在一個結(jié)構(gòu)中是一個域,返回1;否則為0??蓞⒁姷?2.5節(jié)。返回一個與x相同大小的向量,這個x包含有限元的位置為1,其他位置為0。如果x是一個邏輯向量,返回1;否則為0。如果x是一個數(shù)值向量,返回1;否則為0。如果x是一個字符串,返回1;否則為0。可參見第5.1節(jié)。如果x是一個結(jié)構(gòu),返回1;否則為0??蓞⒁姷?2.5節(jié)。如果x是一個對象,返回1;否則為0。可參見第12.6節(jié)。返回一個可以使用的邏輯向量,例如邏輯索引或邏輯測試。如果一個函數(shù)是要應(yīng)用到一個矩陣中的隔一個元素上,那么可以這樣做:17第2章17使用repmat創(chuàng)建x:為使用濾波器,給出下面的命令:為使用與函數(shù)round一起的過濾器,可輸入:命令repmat產(chǎn)生塊矩陣,第4.1節(jié)將進一步對此進行描述?!鲈贛ATLAB中有許多如下的預(yù)定義變量:命令集6MATLAB命令集6ans分配最新計算表達式的值,這個表達式并沒有給定一個名字。eps返回機器精度,定義1與最接近可代表的浮點數(shù)之間的差。eps數(shù)在一些命令中用作偏差。用戶可以設(shè)定一個新的eps值,但要注意這個eps值不能由命令clear恢復(fù)。realmax返回計算機能處理的最大浮點數(shù)。realmin返回計算機能處理的最小的非零浮點數(shù)。pi制數(shù)來表示其精度。inf定義為1/0。當出現(xiàn)被零除時,MATLAB就返回inf,并不中斷執(zhí)行而繼續(xù)計算。NaNMATLAB5手冊變量列表MATLAB5手冊變量列表ii,jnarginnargout定義為-1,虛數(shù)單位。可以為i和j分配其他值,它們將不再是預(yù)定義常數(shù)??梢杂蒫lear命令恢復(fù)。給出在一個函數(shù)調(diào)用中輸入自變量的個數(shù),可參見第12.3節(jié)。給出在一個函數(shù)調(diào)用中輸出自變量的個數(shù),可參見第12.3節(jié)。為尋找哪個變量可以被定義,可以使用下列命令集:命命令集7who列出已定義的變量。Whoglobal與who相同,但僅列出全局變量。參見第12.3節(jié)。給出所有以a開頭的變量的一個列表。whos給出比命令who更詳細的列表,如顯示矩陣的維數(shù)。whosglobal與whos相同,但僅列出全局變量,可參見第12.3節(jié)。exist(namestr)根據(jù)在字符串namestr中的變量的定義,返回不同的值。關(guān)于字符串更多的信息可參見第5章。這里要注意的重要的一點是變量名應(yīng)在引號‘’之間給出。函數(shù)返回值的情況是:1)表示namestr是一個變量名;2)表示namestr是一個M文件名(參見第2.9節(jié));3)表示namestr是一個MEX文件名(參見第15章);4)表示namestr是一個編譯的SIMULINK函數(shù);5)表示namestr是一個預(yù)定義的MATLAB函數(shù)名。inmem返回一個帶字符串的細胞向量,這個字符串包含目前在內(nèi)存中的函數(shù)、M文件。如果給出兩個輸出參數(shù),則第二個包含了一個目前在內(nèi)存中的MEX文件的列表。workspace對由whos得到的信息給出一個圖形界面。命令clear被集成在這如果不被用戶刪除或重命名,每個被定義的變量將在整個過程中保留。要刪除變量,系統(tǒng)會勸告如要處理大矩陣可用命令clear。命令集命令集8cclear刪除所有變量并恢復(fù)除eps外的所有預(yù)定義變量??蓞⒁娒罴?11當運行文件時的僅刪除變量1name2刪除變量name1、name2、…刪除所有a開頭的變量。第2章packpack重組和壓縮已分配的內(nèi)存碎塊。當MATLAB的內(nèi)存滿后,可以使用?所有變量都會保存在磁盤上的一個臨時文件pack.tmp中;?刪除主內(nèi)存中的內(nèi)容;?所有變量將從pack.tmp加載到主內(nèi)存中;?刪除文件pack.tmp。packfilename用文件filename作臨時文件,重組和壓縮已分配內(nèi)存。注意MATLAB中的命令實際上可以看作函數(shù),把字符串看作自變量,這就意味著有hoglobal與who(‘global’)等價。其他的例題可在本書的其他幾個地方找到,例如axisspuare與axis(‘square’)在第13.3節(jié)中可找到。由于命令自變量可以通過使用字符串控制命令而產(chǎn)生,使用函數(shù)/字符串公式的可能性使得MATLAB編程語言十分靈活,參見第5章。2.4算術(shù)表達式和數(shù)學(xué)函數(shù)在MATLAB中通常的慣例是書寫數(shù)字。對十進制數(shù),使用科學(xué)記數(shù)法可以書寫十分大和MATLAB有算術(shù)運算符的擴展集,它們是:1)^2)*/\3)+冪乘右除(正常除)左除加減這是按序給出的運算,1是最高優(yōu)先級。在帶相同優(yōu)先級的運算符表達式中,按從左到右的順序執(zhí)行。圓括號()能夠用于改變優(yōu)先級次序。在第3.3節(jié)中,將看到兩種不同的除法是有用的。對于數(shù)量右除2/5得0.4與左除5\2是相同的,斜線號“靠著”的表達式或數(shù)字是分母。如果書寫a/b+c,MATLAB讀作+c,但表達式a/(b+c)被讀作。a■MATLAB包含了預(yù)定義數(shù)學(xué)函數(shù),它們可以用于算術(shù)表達式中。如果自變量是復(fù)數(shù),那么,0MATLAB5手冊數(shù)學(xué)函數(shù)0MATLAB5手冊數(shù)學(xué)函數(shù)多數(shù)情況下是答案。MATLAB,一個表達式可以用作一個函數(shù)的自變量。預(yù)定義數(shù)學(xué)函數(shù)在命令集9中列出。即使這些函數(shù)是為數(shù)量自變量描述的,將在第3.6節(jié)看到它們既能處理向量,也能處理矩陣。要注意的是所有三角函數(shù)都需要其自變量以弧度表示。命命令集9求x的絕對值,即|x|。求x的符號,如果是正的得1;負的得-1;零得0。pow2(x,f)xlogx。求x以2為底的對數(shù),即log2x。求正弦x,x為弧度。求余弦x,x為弧度。求正切x,x為弧度。求余切x,即1/(tanx),x為弧度。求反正切,即tan-1x。求反余切x=四象限反正切(1/x)。求正割x,即1/(cosx)。求余割x,即1/(sinx)。求sec-1x=arccos(1/x)。求雙曲正弦x。求雙曲余弦x。求雙曲正切x求雙曲余切x,即1/(tanhx)。求sinh-1x=ln(x+)。求cosh-1x=ln(x+)。cothxlnx/(x-1))。求雙曲正割x,即1/(coshx)。求雙曲余割x,即1/(sinhx)。求csch-1x=ln((1+)/x)。取整命令和有關(guān)命令取整命令和有關(guān)命令1第2章1(a)如果鍵入sinepi=sin(pi),就得到:這個結(jié)果并不是精確地為0,因為pi是p的近似值,在計算中有舍入誤差?!鲈贛ATLAB中有幾個命令用于數(shù)的取整。在命令集10中,x是一個浮點數(shù)或是一個帶浮點元素的矩陣。命命令集10roundround(x)求最接近x的整數(shù)。如果x是一個向量,則適用于所有元素。floor(x)求小于或等于x的最接近的整數(shù)。ceil(x)求大于或等于x的最接近的整數(shù)。rem(x,y)求整除x/y的余數(shù)。yxylcm(x,y)求正整數(shù)x和y的最小公倍數(shù),也能用于決定最小公因子。[t,n]=rat(x)由有理數(shù)t/n求x的近似值,這里的t和n是整數(shù),相對誤差小于10-6。也可參見rats(第5.1.2節(jié)),它給出了對應(yīng)的字符串。[t,n]=rat(x,tol)與上相同,但相對誤差小于tol。rat(x)求x的連續(xù)的分數(shù)表達式。rat(x,tol)求帶相對誤差tol的x的連續(xù)的分數(shù)表達式。(a)取整有幾種方法,命令是:2MATLAB5手冊2MATLAB5手冊由此可見,差值不大。如果在函數(shù)rat對參數(shù)tol指定一個較小的值,那么這個差值將會小的?!鲈贛ATLAB中,大多數(shù)情況下是允許復(fù)數(shù)值表達的。加入變量i和j返回虛數(shù)單位,即的值,能用于產(chǎn)生復(fù)數(shù)。這是可以用名字i和j作為變量的名字,一個新的復(fù)數(shù)單位可以由此產(chǎn)生:由于空格是分隔元素的,因此在書寫復(fù)數(shù)元素時要慎用空格。參見下面例題2.10(c)。(b)一個較復(fù)雜的表達式:式中,r和theta是一個已經(jīng)定義的變量。(c)向量也可以是復(fù)數(shù);complexvector=[1-i2-2i3-3i]complexvector=注意,在3與-3i之間的空格使MATLAB讀取它們時看作為兩個分隔的復(fù)數(shù)。如果鍵入下列內(nèi)容,可以看到此結(jié)果:length(complexvector)給出的結(jié)果是:4■坐標轉(zhuǎn)換坐標轉(zhuǎn)換3第2章3MATLAB中有一些處理復(fù)數(shù)和函數(shù)的命令。命令集11命令集11conj(z)求z的復(fù)數(shù)共扼,即z。nglezzzxiyreiunwrap(v)求與v相同長度的向量。這里,兩個相鄰元素間的相角差已經(jīng)改變,unwrap(v,k)求出如上的一個向量,但用轉(zhuǎn)移偏差k代替cplxpair(v)給出一個v中各元素按實部遞增排序,并使其復(fù)數(shù)組合成復(fù)數(shù)共扼對的一個向量。在一個共扼對中,負虛部在前,實元素排在向量的后部。如果v的一個元素在v中沒有它自己的復(fù)數(shù)共扼,則顯示一個錯誤信息。令復(fù)數(shù)z為:(a)z的實部和虛部由下面求出:(b)復(fù)數(shù)共扼由conjugate=conj(z)求出:absz=(c)一個復(fù)數(shù)的自變量,即復(fù)平面中的相角由arg=angle(z)求出:arg=■MATLAB也用于坐標系之間轉(zhuǎn)換的函數(shù)。這些函數(shù)既能對向量、也能對矩陣進行運算,其結(jié)果將有與輸入自變量相同的維數(shù)。命令集命令集12thetartheta和r是由卡笛爾xcart2pol(x,y)和y得到。24MATLAB5手冊特殊的數(shù)學(xué)函數(shù)24MATLAB5手冊特殊的數(shù)學(xué)函數(shù)[[x,y]=pol2cart將極坐標轉(zhuǎn)換為笛卡爾坐標,笛卡爾坐標x和y是從極坐標(theta,r)theta和r得到。[alpha,theta,r]=將卡笛爾坐標轉(zhuǎn)換為球坐標,角alpha、theta和長度r是從cart2sph(x,y,z)笛卡爾坐標x、y和z得到。[x,y,z]=將球坐標轉(zhuǎn)換為笛卡爾坐標x、y和z。sph2cart(alpha,theta,r)在MATLAB中也有更高級的預(yù)定義數(shù)學(xué)函數(shù)。命命令集13ndrenxbessely(n,x)gammainc(x,a)betainc(x,a,b)返回一個n+1長度的向量,代表與n次legendre函數(shù)相關(guān)的值和對x的0到n次計算的值。如果x=x是一個向量,則這個命令返回一個矩陣,列是為x的每一個元求第1類貝塞爾函數(shù),n和x可以是向量,但n必須是步長為1的遞增,范圍為[0,1000]。這個命令根據(jù)x是否是復(fù)型而調(diào)用不同的程序,但這些程序能被直接調(diào)用。輸入helpbesse以得到更多的信息。求與bessel有相同自變量的第2類貝塞爾函數(shù)。求g函數(shù),即對正x:要獲得負x的定義,鍵入helpgamm。a求不完全g函數(shù)求g函數(shù)的自然對數(shù)。用log(gamma(x))可以避免上下溢出。求?函數(shù),即:調(diào)用此函數(shù),可以使用下面的命令betainc。求不完全b函數(shù),類似地定義不完全g函數(shù)。求b函數(shù)的自然對數(shù)。浮點運算計數(shù)器浮點運算計數(shù)器25第2章MATLAB25求求誤差函數(shù),即積分:erfinv(y)求逆誤差函數(shù)。erfc(x)求互補誤差函數(shù)1-erf(x)。得到更多信息。[k,e]=ellipke(m)求第1和第2類0<m<1的完全橢圓函數(shù)[j1,j2,j3]=ellipj(x,m)求Jacobi橢圓函數(shù)。此外,用戶可以定義自己的函數(shù),參見第2.9節(jié)。一些特殊的數(shù)學(xué)函數(shù)在第10.4節(jié)中敘述。2.5計算浮點運算次數(shù)和時間管理當相互比較不同算法時,計算一個會話期或一個部分會話期中的算術(shù)運算的次數(shù)是十分有用的。為了獲得浮點運算(flop)的近似次數(shù),使用命令flops。顯示部分MATLAB程序所占用時間的計時方法將在第12.7節(jié)中描述。命令集命令集14fflops返回完成浮點運算的近似次數(shù)。最新的計數(shù)器值是0,這是MATLAB啟動時的缺省值。加法和減法運算時,如果是實數(shù)運算,計入1個運算;如果是復(fù)數(shù)運算,計入2個運算。乘法和除法時,如果是實數(shù)運算,計入1個運算;如果是復(fù)數(shù)運算,計入6個運算。調(diào)用初等函數(shù)時,如果自變量是實數(shù),計入1個運算;如果是復(fù)數(shù),計數(shù)較多,具體次數(shù)隨具體的函數(shù)而定。計數(shù)器重置為零。計算運算的次數(shù)。命令如下:如期望的一樣,其結(jié)果為:4■MATLAB能夠告訴你日期和時間,并且給出計算機的有關(guān)信息。與命令flops一起使用,這些命令可用于分析一個算法的有效性。命令集命令集15tictictoc啟動一個可用命令toc讀的時鐘。26MATLAB5手冊時間和日期(二)26MATLAB5手冊時間和日期(二)cclockcputime返回用十進制數(shù)表示日期和時間的具有6個元素的行向量。前5個元素是整數(shù),秒由幾個十進制小數(shù)表示。命令fix(clock)四舍五入至最接近整數(shù)的秒。t2)計算t1和t2時間間隔內(nèi)所消耗的時間,以秒計算。t1和t2是表示日期和時間的6個元素的行向量。返回以秒計的MATLAB自啟動以來所用的CPU時間。下列方法可進行時間操作:寫入下式保存當前時間寫入MATLAB命令得到完成上述兩條命令所用的間隔時間?!鯩ATLAB有處理日期的內(nèi)部函數(shù)。一些系列函數(shù)的使用組成了一個描述日期的整數(shù)部分和一個描述時間的小數(shù)部分。命令集命令集16date以日—月—年字符串形式返回當前日期。calendar(yyyy,mm)顯示當年yyyy當月mm按周排列的6×7矩陣形式的日歷。datenum(yyyy,mm,dd)給出當年yyyy當月mm當日dd的序列數(shù)字。日datestr(d,form)返回form格式的序列數(shù)字表示的日期,見表用于在圖中的坐標軸上寫數(shù)據(jù)。如果d是一個由諸如datestr返回的格式表示的序列數(shù)字或日期,則返回一個向量[yyyymmddhomise]。eomday(yyyy,mm)返回當年當月的天數(shù)。返回當天和當時的序列數(shù)字。返回dayname以告知當天day是否星期天、星ekdayday期一等。daynr等于一周中當天day的序列數(shù)字。這里的day是一個字符形式或序列數(shù)字的日期。在datestr中可以使用的不同的日期格式如表2-1所示。用1986年4月26日2時14分作為例27第2章27子列表介紹。01格式ddmmmyyyyHH:MM:SS格式ddmmmyyyy26Apr198602:14:0026Apr19862格式mm/dd/yy04/26/863格式mmmApr4格式mA5格式m#46格式mm/dd04/267格式dd8格式dddSat9格式dS格式y(tǒng)yyy1986格式y(tǒng)y式mmmyyApr86格式HH:MM:SS02:14:00格式HH:MM:SSPM2:14:00AM格式HH:MM02:14格式HH:MMPM2:14AM格式QQ-YY,這里QQ表示幾刻鐘Q286格式QQ為了獲取指定日期是星期幾,使用如下語句并得到相應(yīng)結(jié)果:■在MATLAB中,一周是從星期天開始的,這使得星期六的星期數(shù)為7。2.6輸出格式在屏幕上,通常以不帶小數(shù)的整數(shù)格式或帶四位小數(shù)的短浮點數(shù)格式顯示結(jié)果。如果一個矩陣中所有的元素都是整數(shù),那么它們將以整數(shù)格式顯示。但是,如果有一個或一個以上的元素是非整數(shù),則所有的元素都以浮點數(shù)格式顯示。輸出格式在計算中不影響精度,MATLAB總是按高精度完成計算。對大多數(shù)的計算機而言,MATLAB在計算中使用16位小數(shù)。命令format用于改變輸出格式。在Windows和Macintosh版本中,輸出格式也能通過命令窗體中的下拉菜單控制。8MATLAB5手冊幫助命令8MATLAB5手冊幫助命令命令集17命令集17moreonmoreoff將輸出格式改為由defformat定義的格式,這類格式可以是+、bank、rot。也有compact或loose,它給出了一個較緊縮或較寬松的輸出格式,但并不影響數(shù)值輸出格式。當全屏?xí)r停止顯示,在進一步刪除顯示之前等待鍵盤輸入。息要顯示。不考慮窗體是否足夠大而給以輸出。如果輸出多于n行,則顯示輸出n行。p1+1/3,先定義格式,然后在屏幕上顯示p:format得4位小數(shù)long得14位小數(shù)formatshorte得4位小數(shù)longe得1.333333333333333e+0015位小數(shù)hex得3ff555555555555516進制數(shù)+得+得美元和美分formatrat得4/3作為一個有理數(shù)MATLAB在輸出中使用的空格數(shù)是可以減少的。當輸出行長于窗體時。也可以引導(dǎo)輸出。2.7幫助命令和示范幫助總是可以通過使用下列命令中的任何一條獲得。命命令集18help給出大約20個主題的列表,每個主題給出了基本信息。這些主題以目錄給出,有關(guān)每個主題的信息通過helpdi出,這里dir。helpcommand對指定的命令給出幫助。helpdir給出目錄dir的內(nèi)容。hthelp對一個超鏈接數(shù)據(jù)庫打開一個MATLABGUI。這個命令用helpdesk替換,也可能在今后的版本中刪除。htpp是鏈接到hthelp中的幫助文件的一個預(yù)處理器。loadhtml通過hthelp和http用于加載、中斷和顯示HTML文件。9第2章9helpdesk在MATLAB幫助桌面上啟動一個帶索引頁的Web瀏覽器。doccommand在MATLAB幫助桌面上得到命令command的幫助頁。webURL將瀏覽器指向URL,如果需要則打開一個瀏覽器。參見helpweb可以得到更多信息。lookfortext在所有的M文件的第1行中查找字符串text。demo給出一個MATLAB的不同命令、函數(shù)和應(yīng)用領(lǐng)域的示范。命令demo運行MATLABExpo,它顯示選擇不同示范實例的一個菜單。也可以找到幾個簡單的游戲。expo運行MATLABExpo;也可參見給出有關(guān)MATLAB的信息。例如,什么種類的計算機能夠運行MATLAB,如何得到更多的有關(guān)MATLAB最近的進展和新版的信息等等。whatsnew給出新版本中新命令的有關(guān)信息。subscribe使之變成一個MATLAB的預(yù)約用戶。why解釋為什么一些事情會出錯。MATLABHelpDesk是一個基于HTML的幫助系統(tǒng)。在這個系統(tǒng)里,通過help得到的大量信息是以超鏈接形式一起提供文獻、圖片和公式。它也含有一個比由lookfor提供的更好的查找工具。重要的是要注意MATLABHelpDesk使用了JavaScript,因此,JavaScript必須是使能的。如果給出helpdesk命令,瀏覽器并不如圖2-3那樣,而是僅顯示MATLAB標記,這可能是JaveScript并沒有生效。在UNIX中,可以通過一個名為docopt.m的M文件決定瀏覽器的選擇。在Windows中,MATLAB使用與.htm文件相關(guān)的程序。2.16SIZE矩陣的維數(shù)。DSIZEXMN矩陣X,返回兩個元素的行向量D=[M,N],其中包含了矩陣中行數(shù)和列數(shù)。對于N-[M,N]=SIZE(X)返回輸出變量中的行數(shù)和列數(shù)。[M1,M2,M3,…,MN]=SIZE(X)返回X中頭N個數(shù)組的SIZEX也可參見LENGTH、NDIMS。重載方法注意,盡管MATLAB不接受大寫字母給出的命令,但在幫助文本中用大寫字母書寫命令。(b)為啟動MATLABHelpDesk用命令helpdesk,MATLAB啟動如圖2-3所示的一個瀏覽器(或使用一個已經(jīng)運行的瀏覽器)。MATLAB5手冊計算機信息MATLAB5手冊計算機信息圖2-3啟動MATLABHelpDesk后顯示的索引頁ACOS反余弦ACOSH反雙曲余弦ASIN反正弦ASINH反雙曲正弦弦COSH雙曲余弦SINSINH雙曲正弦TFFUNC間域和頻率域DST離散正弦變換IDST反離散正弦變換■學(xué)習(xí)MATLAB的一個很好的辦法是用命令demo運行一個示范程序,然后用命令help檢查插入的命令,最后開始使用此命令。MATLAB有許多可以給出有關(guān)你正在運行MATLAB的計算機的信息。命令集命令集19computerisieee給出正在運行MATLAB的計算機的一個描述。字符串str因計算機或操作系統(tǒng)而定,例如,VAX、Sun、PC和Macintosh等。n是當前安裝的MATLAB允許一個矩陣中元素的總數(shù)量。對帶IEEE算法的計算機,返回1,例如,IBMPC和Macintosh。對不帶IEEE算法的計算機,返回0,例如VAX和Cray。會話日記保存和裝入變量會話日記保存和裝入變量第2章MATLABversion返回一個帶當前MATLAB版本號的字符串。ver顯示當前MATLAB和工具箱的版本號。hostid返回MATLAB服務(wù)器主機識別號。返回與str連接的文本。這里,str是一個符號或一個環(huán)境變量的名terminal設(shè)置MATLAB終端類型。在Sun工作站上運行Solaris2,命令為:返回■2.8保存和裝載MATLAB能保持屏幕上顯示的日記,這是由命令diary完成的,圖形輸出則是例外。有關(guān)打印或保存圖形,可參見第13.7節(jié)。命令集命令集20filenamfilenamediaryoffon停止記錄。開始記錄。繼續(xù)在當前日記文件中。產(chǎn)生的ASCII文件以后能被編輯,且包括文檔??墒牵妹頳iary保存的值和結(jié)果通常不能由MATLAB在下階段閱讀。為了保存各種變量和它們的內(nèi)容以便能在下階段使用,應(yīng)該使用命令save和load。表中的文件名filename確定了MATLAB是如何說明這個文件的。所有以.mat結(jié)尾的文件是二進制文件,所有以其他形式結(jié)尾的文件,包括filename.,都是ASCII文件。命令集命令集21sasavesavesavefilename在文件matlab.mat中保存所有的變量在文件filename.mat中保存所有的變量。如果在文件名后以點結(jié)束filename.,或加了另外一個后綴,那么MATLAB不能加后綴.mat。v1v在文件filename.mat中保存變量v1、v2、…等。MATLAB5手冊MATLAB5手冊savesavefilenamev-asci文件filename.mat中以可讀的ASCII格式保存變量v的值,寫8位小數(shù)。savefilenameV-asci文件filename.mat中以可讀的ASCII格式、帶16-double位小數(shù)的雙精度保存變量v的值。load從文件filename.mat中裝入所有變量。loadfilename把文件filename.mat中所有變量裝入MATLAB。如果filename沒有一個后綴,那么這個文件由save生成。如果此文件有一個后綴,但只有兩位,那么應(yīng)該使用選項mat。么數(shù)據(jù)就從相應(yīng)的ASCII文件加載到MATLAB中,作為一個不帶‘.’和后綴的名為filename的矩陣,此文件可由savefilevar-ascii或直接通過使用一個編輯器來產(chǎn)生或作為另一個程序的輸出文件。假設(shè)ASCII文件A.dat是通過一個編輯器或一個程序創(chuàng)建的,它含有下列數(shù)據(jù):145429在MATLAB中,可以通過輸入下列命令而得到一個矩陣:■當文件名是以一個字符串保存時,在這個文件上保存數(shù)據(jù)的例子可參見例5.8(b),也可參見第15章。在第15章中,討論了許多高級文件的處理及如何在FORTRAN和C程序中使用文件。2.9命令文件和函數(shù)文件為了代替在MATLAB提示符下輸入MATLAB命令的語句,可以把這些命令寫入一個文本文件,這個文本文件可用一個編輯器創(chuàng)建。每當用戶輸入這個文件名和它的自變量時,這些命令就由MATLAB執(zhí)行。MATLAB從文件而不是從終端讀取命令,當文件中最后一個命令被執(zhí)行時,MATLAB能再從終端讀取命令。MATLAB將首先在當前工作目錄下尋找此文件,如果它不在當前目錄下,那么在該路徑下的所有目錄中搜索。該路徑保持在matlabpath中,可參見命令集22。如果想執(zhí)行一個沒有放在可以自動搜索處的一個文件,你可使用命令run,參見第12章。M文件是一種文件:一個M文件包含許多連續(xù)的MATLAB命令,它也可以引用其他的M文件,可以遞歸,也系統(tǒng)命令系統(tǒng)命令第2章MATLAB就是說可以自己引用自己。在MATLAB的實用盤“utility-disk”上有大量的預(yù)定義M文件,例如,cond.m、demo.m、length.m和hilb.m。要了解這些文件的名稱,可以使用命令what,列出由用戶定義的和在MATLAB目錄中存放的M文件。命令dir可以代替what命令,這個命令屬于MATLAB文件命令集。命令集命令集22whatdirname列出當前目錄下所有的MATLAB文件。如果給定dirname,就列出目錄dirname下的文件。dir列出一個目錄或子目錄中的所有文件。這個命令可以用不同的路徑名和程序單。ls以不同的輸出格式列出文件。pwd列出當前的工作目錄。deletefilename刪除文件filename。cd改變當前目錄。typefilename顯示文件filename的內(nèi)容。如果沒有指定后綴,MATLAB就讀filename.m。editfile打開一個編輯器。如果給定file,那么這個文件就在編輯器中打開。whichfilename顯示由filename指定的函數(shù)的搜索路徑。path顯示MATLAB的目錄搜索路徑。如果給出帶自變量的命令,就改變搜索路徑。輸入helppath可以獲得更多matlabpath當一個新的搜索路徑給定時,作為路徑工作,但沒有錯誤處理。genpath(directory)返回一個新的搜索路徑,這個路徑是由老的和在bpathpartialpath列出本地搜索路徑。editpath給出一個圖形用戶界面。在那里,可以從MATLAB的搜索路徑增加和編輯目錄。addpath(dir1,dir2,在MATLAB的搜索路徑的開頭增加目錄dir1、dir2、…?!?flag)如果字符串flag給定,且是始端,那么目錄被加在始端;如果它是末端,則加在末端。rmpathdirpathtool從MATLAB的搜索路徑中移去目錄dir。這是一個修改搜索路徑的圖形工具。盡管MATLAB5手冊MATLAB5手冊path2rclasterrlastwarn!isstudentisdirdirnameisppcisunixisvmsdosapplescriptunixtempdirtempnamematlabrootpathtool建議它不要在UNIX下工作,但它還是在UNIX在文件pathdef.m中保存當前的搜索路徑,當啟動MATLAB時,可以從這個文件中讀取搜索路徑。帶行號顯示文件filename的內(nèi)容。如果在filename中沒有給定后綴,MATLAB使用后綴.m。r1:r行號地顯示filename中r1行到rn行。重復(fù)上次的錯誤信息。重復(fù)上次的警告信息。把這一行看作操作系統(tǒng)的命令,在Macintosh版本中使用。如果使用的是MATLAB學(xué)生版(由PrenticeHall發(fā)布的),返回1;否則返回0。如果dirname是一個目錄,返回1;否則返回0。如果在MacintoshPowerPC上使用MATLAB,返回如果在UNIX系統(tǒng)上使用MATLAB,返回1;否則返回0。如果在VMS上使用MATLAB,返回1;否則返回0。從MATLAB中運行一個VMSDCL命令,與!相同,但有可能從這個命令變量中存儲數(shù)據(jù)。輸入helpvms可以獲得更多的信息。這個命令僅在VMS系統(tǒng)上應(yīng)用。從MATLAB中運行一個DOS命令。如同!,見上一條,但有可能從這個命令變量中存儲數(shù)據(jù)。輸入helpdos可以獲得更多的信息。這個命令僅在PC上使用。加載一個AppleScript文件并運行它,參見helpdesk了解更多的信息。這個命令僅在Macintosh上使用。從MATLAB中執(zhí)行一個UNIX操作系統(tǒng)命令,如同!。輸入helpunix可以得到更多的信息。返回一個表示系統(tǒng)中臨時目錄名的字符串返回一個以‘tp’開頭的字符串,MATLAB將檢查這個字符串是否為系統(tǒng)的臨時目錄中的一個文件名。因為這樣,這個字符串可以用作一個臨時文件的名字。返回帶指向MATLAB安裝所在目錄的搜索路徑的一個創(chuàng)建一個名為matlab的目錄以保存M文件是一個好的主意,MATLAB在這個目錄中自動地尋找和發(fā)現(xiàn)文件。(a)查看包含在MATLAB中的文件sec.m的內(nèi)容,輸入:第2章MATLABtypesec%SEC正割%SEC(X)是X的元素的正割。M文件中的注釋,即以%開始的行,在MATLAB中用作文檔。這些注釋應(yīng)該是更好地提供信息,而不是象在這個例子中混淆X和z。基本運算符./在第3.5節(jié)中定義。SEC正割。■這是一個函數(shù)文件的例子,一個用戶定義的函數(shù),即是一個特殊類型的M文件。除了第二類M文件外,稱之為命令文件,一個函數(shù)能有一個或幾個自變量或參數(shù),它們用分號‘;’分隔。在例題sec中,有一個名為z的參數(shù)。所有的參數(shù)必須由括號‘()’括起來。命令文件也稱為script文件。輸入helpscrip得到更多的有關(guān)信息。MATLAB中的函數(shù)與C中的函數(shù)或FORTRAN的子程序非常相似。函數(shù)文件有如下特征:?函數(shù)文件的第一行必須包含字function,命令文件沒有這種要求。因此,沒有這樣第一行的M文件是命令文件。?第一行必須指定函數(shù)名、輸入變量(參數(shù))和輸出變量(參數(shù))。輸入?yún)?shù)是從MATLAB的工作空間復(fù)制到函數(shù)工作空間的變量。第一行舉例如下:functionoutput=name(input)?一個函數(shù)可以有0個、一個或幾個輸入?yún)?shù)和返回值。?與FORTRAN中的子程序、Pascal中的過程或C/C++中的無返回值的函數(shù)等價。在MATLAB中,一個函數(shù)M文件可以這樣調(diào)用:filename(inputArguments)建議函數(shù)取名如同文件名一樣。調(diào)用時所用的變量并不需要與函數(shù)文件中定義的變量有相同的名字。當輸入helpname后,就顯示第一行之后的注釋。這與命令文件一樣使用相似的規(guī)定。函數(shù)文件和命令文件的執(zhí)行如同普通的MATLAB命令。當輸入文件名時(如果有自變量就一起附帶參數(shù),就執(zhí)行文件中的語句。所有的M文件都是普通的ASCII文件,都能通過文本編輯器創(chuàng)建。無論何時,如當編輯文本時,一個操作系統(tǒng)命令要被引用,這時從MATLAB中使用命令!來輸入和測試M文件是很(a)假設(shè)某個矩陣經(jīng)常被使用,它被創(chuàng)建并按第2.8節(jié)存儲起來,然后隨時可以裝入。一個替換的方法就是在一個M文件中創(chuàng)建該矩陣。下面的MATLAB命令存放在文件Thematrix.m中,產(chǎn)生一個可以經(jīng)常使用的矩陣:36MVTLVBS手冊36MVTLVBS手冊通過輸入Thematrix,矩陣A就根據(jù)上面的那一行進行分配。通過輸入下面的命令就可以顯示這個矩陣的情況:(b)假設(shè)下列函數(shù)是存放在文件average.m中:如果定義了例(a)中的矩陣,輸入下面的命令:得到的結(jié)果是:書寫函數(shù)average的另一個方法是:A中所有元素的平均值,其結(jié)果為一個標量在第6章定義了命令sum和mean,在第4.3節(jié)講述了冒號的概念A(yù)(:)的含義。(c)startup.m是一個特殊的用戶定義的命令文件。如果此文件放在你的MATLAB工作目錄里,那么每當你啟動MATLAB時,它就自動地運行。在這個文件里,你可以列出自己預(yù)先定義的內(nèi)容和設(shè)置,如下例中,當你開始一個新奇的MATLAB工作時,MATLAB向你致意。%我的第一個startup.mdisp(‘WelcometoMATLAB’!)有了這樣一個定義的命令文件,下次啟動MATLAB時就可以看到:■有關(guān)M文件的更多信息可參見第12.3節(jié)。下載第3章矩陣運算MATLAB中的大多數(shù)運算可以直接對矩陣應(yīng)用。除了在第2.4節(jié)中討論的算術(shù)運算+、-、*、^、/、\外,還有用于轉(zhuǎn)置和共軛的運算符、有理數(shù)運算符和邏輯運算符。MATLAB學(xué)生版的用戶應(yīng)該知道矩陣中的元素總數(shù)極限是16384。此外,矩陣有算術(shù)函數(shù)和邏輯函數(shù),有些函數(shù)僅能在二維矩陣中使用。3.1加法和減法如果矩陣A和B具有相同的維數(shù),那么就可以定義兩個矩陣的和A+B和兩個矩陣的差A(yù)-B。矩陣A±B,即元素aij…p±bji…p。在MATLAB中,一個m×n矩陣A和一個標量,即一個1×1矩陣s之間也能進行加和減運算。矩陣A+s得到與A相同的維數(shù),元素為aji+s。假設(shè)A和B定義如下:MATLAB命令■3.2乘法如果矩陣A的列數(shù)等于矩陣B的行數(shù),那么矩陣相乘,即C=AB,就被定義為二維矩陣。如果不是這種情況,MATLAB就返回一個錯誤信息。只有一個例外就是這兩個矩陣之一是1×1,如一個標量,那么MATLAB是可以接受的。在MATLAB中,乘法的運算符是*,因此,命令是C=A*B。元素cij是A的第i行和B的第j列的點積。點積的定義可參見命令集23和附錄B。矩陣C有與A相同的行數(shù)和與B相同的列數(shù)。 MATLAB5手冊下載積對于方陣,也定義了積BA,但其結(jié)果通常與AB積(a)假設(shè)A和B如同例3.1,命令在屏幕上顯示如下的結(jié)果:(b)令x和y為:命令s=x*y,M=y*x,結(jié)果為:■MATLAB也包含其他乘積。命令dot(x,y)得到具有相同元素數(shù)量的兩個向量x和y的點積,也稱為標量積或內(nèi)積。如果點積為零,則兩個向量是正交的。如果A和B具有相同的維數(shù),則定義兩個矩陣A和B的點積,在MATLAB中定義列方式。其結(jié)果是一個行向量,其元素是第1列、第2列等的點積,可參見附錄B。命命令集23dodot(x,y)得到向量x和y的點積dot(A,B)得到一個長度為n的行向量,這里的元素是A和B對應(yīng)列的點積。矩陣A和B必須是具有相同的維數(shù)m×n。多維矩陣可參見helpdesk。dot(A,B,dim)在dim數(shù)組中給出A和B的點積。叉積矩陣的卷積叉積矩陣的卷積下載下載對于各具三個元素的兩個向量x和y,命令cross(x,y給)出向量積或叉積,即:對向量x和y,向量x×y是正交的。cross命令也可以應(yīng)用于3×n矩陣,其結(jié)果是一個3×n矩陣,這里的第i列是A和B中的第i列的叉積。命令集命令集24crcross(x,y)得到向量x和y的叉積。cross(A,B)得到一個3×n矩陣,其中的列是A和B對應(yīng)列的叉積。矩陣A和B必須具有相同的維數(shù)3×n。cross(A,B,dim)在dim數(shù)組中給出向量A和B的叉積。A和B必須具有相同x=(100)y=(010)crossprod=001對x和y,它是正交的,即::■在MATLAB中,有一個完成二維矩陣卷積的函數(shù)??梢允褂肍IR濾波器(有限脈沖響應(yīng))作為一個自變量,這部分內(nèi)容在helpdesk中描述。命令集命令集25coconv2(A,B)返回矩陣A和B的二維卷積convhcolhrowAAhcolhrow行方式的卷積。conv2(…,format)得到一個卷積的特殊形式。參數(shù)format必須是下列字符串之一:‘valid’僅返回不考慮邊緣補零計算的部分卷積。convn(A,B)返回矩陣A和B的多維卷積。得到卷積的一個特殊形式,如上所示。MATLAB5下載張量積Kronecker張量積可以用于創(chuàng)建大的矩陣,它由命令kron(A,B)得到。如果A是一個m×n矩陣,B是一個k×r矩陣,那么這個命令就返回一個m·k×r·n張量積命命令集26kronkron(A,B)得到A和B的Kronecker張量積。命令K=kron(A,B的)結(jié)果為:■3.3除法在MATLAB中,有兩個矩陣除法的符號,左除\和右除/。如果A是一個非奇異方陣,那么A\B和B/A對應(yīng)A的逆與B的左乘和右乘,即分別等價于命令inv(A)*B和B*inv(A)??墒?,MATLAB同的,如例3.5所示。A的逆,inv(A)或A-1在第7.1節(jié)中介紹。如果A是一個方陣,那么X=A\B是矩陣方程AX=B的解A-1B,這里的X具有與B相同的維數(shù)。在B=b是一個列向量這樣一個特殊情況下,x=A\b是線性系統(tǒng)AX=b的解。參見第7.2節(jié)。如果A是一個m>n的m×n矩陣,X=A\B得到矩陣方程AX=B的最小二乘解,參見第7.7節(jié)。矩陣方程XA=B的解是X=B/A,它等同于(A′\B′)′,即右除可以由左除定義。這里,撇號′表示轉(zhuǎn)置,這將在第3.4節(jié)中進行說明。(a)設(shè)A和B如例3.1一樣定義,命令A(yù),B,Right=B/A,Left=AB到:下載下載如果輸入Right=B*inv(A)和Left=inv(A)*B,則得到這分別與用/和\計算的矩陣結(jié)果是一致的,但浮點格式表明它們的計算過程是不一樣的。(b)設(shè)下列A和b:系統(tǒng)Ax=b的解在MATLAB中寫作x=A\b,得到:(c)使用如上的A和b,檢查求解系統(tǒng)Ax=b的運算次數(shù)。命令flops(0);x=inv(A)*b;flops給出結(jié)果:ans=命令flops(0);X=A\b;flo結(jié)果:因此,在MATLAB中求解一個系統(tǒng)用左除比用逆和乘法所需的運算次數(shù)要少。命令flops的定義參見第2.5節(jié)?!?.4轉(zhuǎn)置和共軛一個重要的運算是轉(zhuǎn)置和共軛轉(zhuǎn)置,它在MATLAB中用撇′表示。在課本中,這種運算經(jīng)常用*和H表示如果A是一個實數(shù),那么它被轉(zhuǎn)置時,第1行變成第1列,第2行變成第2列,依此類推,一個m×n矩陣變?yōu)橐粋€n×m矩陣。如果矩陣是方陣,那么這個矩陣在主對角線反映出來。如果矩陣A的元素aij是復(fù)數(shù),那么所
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中性合同范本
- 單位購買物品合同范本
- 北京麥田房產(chǎn)合同范本
- 寫紅木合同范本
- 個人居家養(yǎng)老服務(wù)合同范本
- 勞務(wù)合同范本護士
- 企業(yè)裝飾房子合同范本
- 勞務(wù)電氣安裝合同范本
- 戰(zhàn)隊經(jīng)紀合同范本
- 協(xié)議貨車出售合同范本
- 物品移交接收單(模板)
- 肺透明膜病課件
- 護理學(xué)基礎(chǔ)期末試卷及答案
- IMS攪拌樁施工方案
- 我的家鄉(xiāng)廣西南寧宣傳簡介
- 變廢為寶-小學(xué)科學(xué)高段活動案例
- 四川省政府采購專家考試試題
- 證明無親子關(guān)系證明模板
- 消防工程擬投入主要施工設(shè)備機具表
- 4年級寫景類文章閱讀課件
- 《戰(zhàn)國策》教學(xué)講解課件
評論
0/150
提交評論