matlab程序设计课件_第1页
matlab程序设计课件_第2页
matlab程序设计课件_第3页
matlab程序设计课件_第4页
matlab程序设计课件_第5页
已阅读5页,还剩307页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MATLAB操作基礎

1.1MATLAB概述1.1.1MATLAB的發展

1984年,MATLAB第1版(DOS版)

1992年,MATLAB4.0版

1994年,MATLAB4.2版

1997年,MATLAB5.0版

1999年,MATLAB5.3版

2000年,MATLAB6.0版

2001年,MATLAB6.1版

2002年,MATLAB6.5版

2004年,MATLAB7.0版1.1.2MATLAB的主要功能

1.數值計算和符號計算功能

MATLAB以矩陣作為數據操作的基本單位,還提供了十分豐富的數值計算函數。

MATLAB和著名的符號計算語言Maple相結合,使得MATLAB具有符號計算功能。2.繪圖功能

MATLAB提供了兩個層次的繪圖操作:一種是對圖形句柄進行的低層繪圖操作,另一種是建立在低層繪圖操作之上的高層繪圖操作。3.編程語言

MATLAB具有程式結構控制、函數調用、數據結構、輸入輸出、面向對象等程式語言特徵,而且簡單易學、編程效率高。

4.MATLAB工具箱

MATLAB包含兩部分內容:基本部分和各種可選的工具箱。

MATLAB工具箱分為兩大類:功能性工具箱和學科性工具箱。1.1.3初識MATLAB

例1-1繪製正弦曲線和余弦曲線。

x=[0:0.5:360]*pi/180;

plot(x,sin(x),x,cos(x));

例1-2求方程3x4+7x3+9x2-23=0的全部根。

p=[3,7,9,0,-23];%建立多項式係數向量

x=roots(p)%求根例1-3求積分

quad('x.*log(1+x)',0,1)

例1-4求解線性方程組。

a=[2,-3,1;8,3,2;45,1,-9];

b=[4;2;17];

x=inv(a)*b

1.2MATLAB的運行環境與安裝1.2.1MATLAB的運行環境

硬體環境:

(1)CPU

(2)内存

(3)硬碟

(4)CD-ROM驅動器和滑鼠。

軟體環境:

(1)Windows98/NT/2000或WindowsXP

(2)其他软件根据需要选用1.2.2MATLAB的安裝

安裝MATLAB6.5系統,需運行系統自帶的安裝程式setup.exe,可以按照安裝提示依次操作。1.3MATLAB集成環境1.3.1啟動與退出MATLAB集成環境

1.MATLAB系統的啟動

與一般的Windows程式一樣,啟動MATLAB系統有3種常見方法:

(1)使用Windows“開始”菜單。

(2)運行MATLAB系統啟動程式matlab.exe。

(3)利用快捷方式。啟動MATLAB後,將進入MATLAB6.5集成環境。MATLAB6.5集成環境包括MATLAB主窗口、命令窗口(CommandWindow)、工作空間窗口(Workspace)、命令歷史窗口(CommandHistory)、當前目錄窗口(CurrentDirectory)和啟動平臺窗口(LaunchPad)。

當MATLAB安裝完畢並首次啟動時,展現在螢幕上的介面為MATLAB的默認介面,如右圖所示。2.MATLAB系統的退出

要退出MATLAB系統,也有3種常見方法:

(1)在MATLAB主窗口File菜單中選擇ExitMATLAB命令。

(2)在MATLAB命令窗口輸入Exit或Quit命令。

(3)單擊MATLAB主窗口的“關閉”按鈕。1.3.2主窗口

MATLAB主窗口是MATLAB的主要工作介面。主窗口除了嵌入一些子窗口外,還主要包括菜單欄和工具欄。

1.菜單欄

在MATLAB6.5主窗口的菜單欄,共包含File、Edit、View、Web、Window和Help6個菜單項。(1)File菜單項:File菜單項實現有關檔的操作。

(2)Edit菜單項:Edit菜單項用於命令窗口的編輯操作。

(3)View菜單項:View菜單項用於設置MATLAB集成環境的顯示方式。(4)Web菜單項:Web菜單項用於設置MATLAB的Web操作。

(5)Window菜單項:主窗口菜單欄上的Window菜單,只包含一個子菜單Closeall,用於關閉所有打開的編輯器窗口,包括M-file、Figure、Model和GUI窗口。

(6)Help菜單項:Help菜單項用於提供幫助資訊。2.工具欄

MATLAB6.5主窗口的工具欄共提供了10個命令按鈕。這些命令按鈕均有對應的菜單命令,但比菜單命令使用起來更快捷、方便。1.3.3命令窗口

命令窗口是MATLAB的主要交互窗口,用於輸入命令並顯示除圖形以外的所有執行結果。

MATLAB命令窗口中的“>>”為命令提示符,表示MATLAB正在處於準備狀態。在命令提示符後鍵入命令並按下回車鍵後,MATLAB就會解釋執行所輸入的命令,並在命令後面給出計算結果。一般來說,一個命令行輸入一條命令,命令行以回車結束。但一個命令行也可以輸入若干條命令,各命令之間以逗號分隔,若前一命令後帶有分號,則逗號可以省略。例如

p=15,m=35

p=15;m=35

如果一個命令行很長,一個物理行之內寫不下,可以在第一個物理行之後加上3個小黑點並按下回車鍵,然後接著下一個物理行繼續寫命令的其他部分。3個小黑點稱為續行符,即把下麵的物理行看作該行的邏輯繼續。

在MATLAB裏,有很多的控制鍵和方向鍵可用於命令行的編輯。1.3.4工作空間窗口

工作空間是MATLAB用於存儲各種變數和結果的記憶體空間。在該窗口中顯示工作空間中所有變數的名稱、大小、位元組數和變數類型說明,可對變數進行觀察、編輯、保存和刪除。1.3.5當前目錄窗口和搜索路徑

1.當前目錄窗口

當前目錄是指MATLAB運行檔時的工作目錄,只有在當前目錄或搜索路徑下的檔、函數可以被運行或調用。

在當前目錄窗口中可以顯示或改變當前目錄,還可以顯示當前目錄下的檔並提供搜索功能。

将用户目录设置成当前目录也可使用cd命令。例如,將用戶目錄c:\mydir設置為當前目錄,可在命令窗口輸入命令:

cdc:\mydir2.MATLAB的搜索路徑

當用戶在MATLAB命令窗口輸入一條命令後,MATLAB按照一定次序尋找相關的檔。基本的搜索過程是:

(1)檢查該命令是不是一個變數。

(2)檢查該命令是不是一個內部函數。

(3)檢查該命令是否當前目錄下的M檔。

(4)檢查該命令是否MATLAB搜索路徑中其他目錄下的M檔。用戶可以將自己的工作目錄列入MATLAB搜索路徑,從而將用戶目錄納入MATLAB系統統一管理。設置搜索路徑的方法有:

(1)用path命令設置搜索路徑。例如,將用戶目錄c:\mydir加到搜索路徑下,可在命令窗口輸入命令:

path(path,’c:\mydir’)(2)用對話框設置搜索路徑

在MATLAB的File菜單中選SetPath命令或在命令窗口執行pathtool命令,將出現搜索路徑設置對話框。通過AddFolder或AddwithSubfolder命令按鈕將指定路徑添加到搜索路徑列表中。

在修改完搜索路徑後,則需要保存搜索路徑。1.3.6命令歷史記錄窗口

在默認設置下,歷史記錄窗口中會自動保留自安裝起所有用過的命令的歷史記錄,並且還標明了使用時間,從而方便用戶查詢。而且,通過雙擊命令可進行歷史命令的再運行。如果要清除這些歷史記錄,可以選擇Edit菜單中的ClearCommandHistory命令。1.3.7啟動平臺窗口和Start按鈕

MATLAB6.5的啟動平臺窗口可以幫助用戶方便地打開和調用MATLAB的各種程式、函數和幫助檔。

MATLAB6.5主窗口左下角還有一個Start按鈕,單擊該按鈕會彈出一個菜單,選擇其中的命令可以執行MATLAB產品的各種工具,並且可以查閱MATLAB包含的各種資源。

1.4MATLAB幫助系統1.4.1幫助窗口

進入幫助窗口可以通過以下3種方法:

(1)單擊MATLAB主窗口工具欄中的Help按鈕。

(2)在命令窗口中輸入helpwin、helpdesk或doc。

(3)選擇Help菜單中的“MATLABHelp”選項。1.4.2幫助命令

MATLAB幫助命令包括help、lookfor以及模糊查詢。

1.help命令

在MATLAB6.5命令窗口中直接輸入help命令將會顯示當前幫助系統中所包含的所有專案,即搜索路徑中所有的目錄名稱。同樣,可以通過help加函數名來顯示該函數的幫助說明。2.lookfor命令

help命令只搜索出那些關鍵字完全匹配的結果,lookfor命令對搜索範圍內的M檔進行關鍵字搜索,條件比較寬鬆。

lookfor命令只對M檔的第一行進行關鍵字搜索。若在lookfor命令加上-all選項,則可對M檔進行全文搜索。3.模糊查詢

MATLAB6.0以上的版本提供了一種類似模糊查詢的命令查詢方法,用戶只需要輸入命令的前幾個字母,然後按Tab鍵,系統就會列出所有以這幾個字母開頭的命令。1.4.3演示系統

在幫助窗口中選擇演示系統(Demos)選項卡,然後在其中選擇相應的演示模組,或者在命令窗口輸入Demos,或者選擇主窗口Help菜單中的Demos子菜單,打開演示系統。1.4.4遠程幫助系統

在MathWorks公司的主頁()上可以找到很多有用的資訊,國內的一些網站也有豐富的資訊資源。

MATLAB矩陣及其運算

2.1變數和數據操作2.1.1變數與賦值

1.變數命名

在MATLAB6.5中,變數名是以字母開頭,後接字母、數字或下劃線的字元序列,最多63個字元。在MATLAB中,變數名區分字母的大小寫。2.賦值語句

(1)變數=運算式

(2)運算式

其中運算式是用運算符將有關運算量連接起來的式子,其結果是一個矩陣。例2-1計算運算式的值,並顯示計算結果。

在MATLAB命令窗口輸入命令:

x=1+2i;

y=3-sqrt(17);

z=(cos(abs(x+y))-sin(78*pi/180))/(x+abs(y))

其中pi和i都是MATLAB預先定義的變數,分別代表代表圓周率π和虛數單位。

輸出結果是:

z=

-0.3488+0.3286i2.1.2預定義變數在MATLAB工作空間中,還駐留幾個由系統本身定義的變數。例如,用pi表示圓周率π的近似值,用i,j表示虛數單位。

預定義變數有特定的含義,在使用時,應儘量避免對這些變數重新賦值。2.1.3記憶體變數的管理

1.記憶體變數的刪除與修改

MATLAB工作空間窗口專門用於記憶體變數的管理。在工作空間窗口中可以顯示所有記憶體變數的屬性。當選中某些變數後,再單擊Delete按鈕,就能刪除這些變數。當選中某些變數後,再單擊Open按鈕,將進入變數編輯器。通過變數編輯器可以直接觀察變數中的具體元素,也可修改變數中的具體元素。clear命令用於刪除MATLAB工作空間中的變數。who和whos這兩個命令用於顯示在MATLAB工作空間中已經駐留的變數名清單。who命令只顯示出駐留變數的名稱,whos在給出變數名的同時,還給出它們的大小、所占位元組數及數據類型等資訊。2.記憶體變數檔

利用MAT檔可以把當前MATLAB工作空間中的一些有用變數長久地保留下來,擴展名是.mat。MAT檔的生成和裝入由save和load命令來完成。常用格式為:

save檔案名[變數名表][-append][-ascii]

load文件名[變數名表][-ascii]其中,檔案名可以帶路徑,但不需帶擴展名.mat,命令隱含一定對.mat檔進行操作。變數名表中的變數個數不限,只要記憶體或檔中存在即可,變數名之間以空格分隔。當變數名表省略時,保存或裝入全部變數。-ascii選項使檔以ASCII格式處理,省略該選項時文件將以二進位格式處理。save命令中的-append選項控制將變數追加到MAT檔中。2.1.4MATLAB常用數學函數

MATLAB提供了許多數學函數,函數的引數規定為矩陣變數,運算法則是將函數逐項作用於矩陣的元素上,因而運算的結果是一個與引數同維數的矩陣。

函數使用說明:

(1)三角函數以弧度為單位計算。

(2)abs函數可以求實數的絕對值、複數的模、字串的ASCII碼值。

(3)用於取整的函數有fix、floor、ceil、round,要注意它們的區別。

(4)rem與mod函數的區別。rem(x,y)和mod(x,y)要求x,y必須為相同大小的實矩陣或為標量。2.1.5數據的輸出格式

MATLAB用十進位數表示一個常數,具體可採用日常記數法和科學記數法兩種表示方法。

在一般情況下,MATLAB內部每一個數據元素都是用雙精度數來表示和存儲的。數據輸出時用戶可以用format命令設置或改變數據輸出格式。format命令的格式為:

format格式符

其中格式符決定數據的輸出格式2.2MATLAB矩陣2.2.1矩陣的建立

1.直接輸入法

最簡單的建立矩陣的方法是從鍵盤直接輸入矩陣的元素。具體方法如下:將矩陣的元素用方括號括起來,按矩陣行的順序輸入各元素,同一行的各元素之間用空格或逗號分隔,不同行的元素之間用分號分隔。2.利用M檔建立矩陣

對於比較大且比較複雜的矩陣,可以為它專門建立一個M檔。下麵通過一個簡單例子來說明如何利用M檔創建矩陣。

例2-2利用M檔建立MYMAT矩陣。

(1)啟動有關編輯程式或MATLAB文本編輯器,並輸入待建矩陣:

(2)把輸入的內容以純文本方式存盤(設檔案名為mymatrix.m)。

(3)在MATLAB命令窗口中輸入mymatrix,即運行該M檔,就會自動建立一個名為MYMAT的矩陣,可供以後使用。3.利用冒號運算式建立一個向量

冒號運算式可以產生一個行向量,一般格式是:

e1:e2:e3

其中e1為初始值,e2為步長,e3為終止值。

在MATLAB中,還可以用linspace函數產生行向量。其調用格式為:

linspace(a,b,n)

其中a和b是生成向量的第一個和最後一個元素,n是元素總數。

顯然,linspace(a,b,n)與a:(b-a)/(n-1):b等價。

4.建立大矩陣

大矩陣可由方括號中的小矩陣或向量建立起來。2.2.2矩陣的拆分

1.矩陣元素

通過下標引用矩陣的元素,例如

A(3,2)=200

采用矩阵元素的序号来引用矩阵元素。矩阵元素的序号就是相应元素在内存中的排列顺序。在MATLAB中,矩陣元素按列存儲,先第一列,再第二列,依次類推。例如

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

A(3)

ans=

2

顯然,序號(Index)與下標(Subscript)是一一對應的,以m×n矩陣A為例,矩陣元素A(i,j)的序號為(j-1)*m+i。其相互轉換關係也可利用sub2ind和ind2sub函數求得。2.矩陣拆分

(1)利用冒號運算式獲得子矩陣

①A(:,j)表示取A矩陣的第j列全部元素;A(i,:)表示A矩陣第i行的全部元素;A(i,j)表示取A矩陣第i行、第j列的元素。

②A(i:i+m,:)表示取A矩陣第i~i+m行的全部元素;A(:,k:k+m)表示取A矩陣第k~k+m列的全部元素,A(i:i+m,k:k+m)表示取A矩陣第i~i+m行內,並在第k~k+m列中的所有元素。

此外,還可利用一般向量和end運算符來表示矩陣下標,從而獲得子矩陣。end表示某一維的末尾元素下標。(2)利用空矩陣刪除矩陣的元素

在MATLAB中,定義[]為空矩陣。給變數X賦空矩陣的語句為X=[]。注意,X=[]與clearX不同,clear是將X從工作空間中刪除,而空矩陣則存在於工作空間中,只是維數為0。2.2.3特殊矩陣

1.通用的特殊矩陣

常用的產生通用特殊矩陣的函數有:

zeros:產生全0矩陣(零矩陣)。

ones:產生全1矩陣(么矩陣)。

eye:產生單位矩陣。

rand:產生0~1間均勻分佈的隨機矩陣。

randn:產生均值為0,方差為1的標準正態分佈隨機矩陣。例2-3分別建立3×3、3×2和與矩陣A同樣大小的零矩陣。

(1)建立一個3×3零矩陣。

zeros(3)

(2)建立一个3×2零矩陣。

zeros(3,2)

(3)设A為2×3矩陣,則可以用zeros(size(A))建立一個與矩陣A同樣大小零矩陣。

A=[123;456];%產生一個2×3階矩陣A

zeros(size(A))%产生一个与矩阵A同樣大小的零矩陣例2-4建立隨機矩陣:

(1)在區間[20,50]內均勻分佈的5階隨機矩陣。

(2)均值為0.6、方差為0.1的5階正態分佈隨機矩陣。

命令如下:

x=20+(50-20)*rand(5)

y=0.6+sqrt(0.1)*randn(5)

此外,常用的函數還有reshape(A,m,n),它在矩陣總元素保持不變的前提下,將矩陣A重新排成m×n的二維矩陣。2.用於專門學科的特殊矩陣

(1)魔方矩陣

魔方矩陣有一個有趣的性質,其每行、每列及兩條對角線上的元素和都相等。對於n階魔方陣,其元素由1,2,3,…,n2共n2個整數組成。MATLAB提供了求魔方矩陣的函數magic(n),其功能是生成一個n階魔方陣。例2-5將101~125等25個數填入一個5行5列的表格中,使其每行每列及對角線的和均為565。

M=100+magic(5)(2)範得蒙矩陣

範得蒙(Vandermonde)矩陣最後一列全為1,倒數第二列為一個指定的向量,其他各列是其後列與倒數第二列的點乘積。可以用一個指定向量生成一個範得蒙矩陣。在MATLAB中,函數vander(V)生成以向量V為基礎向量的範得蒙矩陣。例如,A=vander([1;2;3;5])即可得到上述範得蒙矩陣。

(3)希爾伯特矩陣

在MATLAB中,生成希爾伯特矩陣的函數是hilb(n)。

使用一般方法求逆会因为原始数据的微小扰动而产生不可靠的计算结果。MATLAB中,有一個專門求希爾伯特矩陣的逆的函數invhilb(n),其功能是求n階的希爾伯特矩陣的逆矩陣。例2-6求4階希爾伯特矩陣及其逆矩陣。

命令如下:

formatrat%以有理形式輸出

H=hilb(4)

H=invhilb(4)

(4)托普利茲矩陣

托普利茲(Toeplitz)矩陣除第一行第一列外,其他每個元素都與左上角的元素相同。生成托普利茲矩陣的函數是toeplitz(x,y),它生成一個以x為第一列,y為第一行的托普利茲矩陣。這裏x,y均為向量,兩者不必等長。toeplitz(x)用向量x生成一個對稱的托普利茲矩陣。例如

T=toeplitz(1:6)(5)伴隨矩陣

MATLAB生成伴隨矩陣的函數是compan(p),其中p是一個多項式的係數向量,高次冪係數排在前,低次冪排在後。例如,為了求多項式的x3-7x+6的伴隨矩陣,可使用命令:

p=[1,0,-7,6];

compan(p)(6)帕斯卡矩陣

我們知道,二次項(x+y)n展開後的係數隨n的增大組成一個三角形表,稱為楊輝三角形。由楊輝三角形表組成的矩陣稱為帕斯卡(Pascal)矩陣。函數pascal(n)生成一個n階帕斯卡矩陣。例2-7求(x+y)5的展開式。

在MATLAB命令窗口,輸入命令:

pascal(6)

矩陣次對角線上的元素1,5,10,10,5,1即為展開式的係數。2.3MATLAB運算

2.3.1算術運算

1.基本算術運算

MATLAB的基本算術運算有:+(加)、-(減)、*(乘)、/(右除)、\(左除)、^(乘方)。

注意,运算是在矩阵意义下进行的,单个数据的算术运算只是一种特例。(1)矩陣加減運算

假定有兩個矩陣A和B,則可以由A+B和A-B實現矩陣的加減運算。運算規則是:若A和B矩陣的維數相同,則可以執行矩陣的加減運算,A和B矩陣的相應元素相加減。如果A與B的維數不相同,則MATLAB將給出錯誤資訊,提示用戶兩個矩陣的維數不匹配。(2)矩陣乘法

假定有兩個矩陣A和B,若A為m×n矩陣,B為n×p矩陣,則C=A*B為m×p矩陣。(3)矩陣除法

在MATLAB中,有兩種矩陣除法運算:\和/,分別表示左除和右除。如果A矩陣是非奇異方陣,則A\B和B/A運算可以實現。A\B等效於A的逆左乘B矩陣,也就是inv(A)*B,而B/A等效於A矩陣的逆右乘B矩陣,也就是B*inv(A)。

对于含有标量的运算,两种除法运算的结果相同,如3/4和4\3有相同的值,都等於0.75。又如,設a=[10.5,25],則a/5=5\a=[2.10005.0000]。對於矩陣來說,左除和右除表示兩種不同的除數矩陣和被除數矩陣的關係。對於矩陣運算,一般A\B≠B/A。(4)矩陣的乘方

一個矩陣的乘方運算可以表示成A^x,要求A為方陣,x為標量。

2.點運算

在MATLAB中,有一種特殊的運算,因為其運算符是在有關算術運算符前面加點,所以叫點運算。點運算符有.*、./、.\和.^。兩矩陣進行點運算是指它們的對應元素進行相關運算,要求兩矩陣的維參數相同。2.3.2關係運算

MATLAB提供了6種關係運算符:<(小於)、<=(小於或等於)、>(大於)、>=(大於或等於)、==(等於)、~=(不等於)。它們的含義不難理解,但要注意其書寫方法與數學中的不等式符號不盡相同。

關係運算符的運算法則為:

(1)當兩個比較量是標量時,直接比較兩數的大小。若關係成立,關係運算式結果為1,否則為0。

(2)當參與比較的量是兩個維數相同的矩陣時,比較是對兩矩陣相同位置的元素按標量關係運算規則逐個進行,並給出元素比較結果。最終的關係運算的結果是一個維數與原矩陣相同的矩陣,它的元素由0或1組成。(3)當參與比較的一個是標量,而另一個是矩陣時,則把標量與矩陣的每一個元素按標量關係運算規則逐個比較,並給出元素比較結果。最終的關係運算的結果是一個維數與原矩陣相同的矩陣,它的元素由0或1組成。

例2-8產生5階隨機方陣A,其元素為[10,90]區間的隨機整數,然後判斷A的元素是否能被3整除。

(1)生成5階隨機方陣A。

A=fix((90-10+1)*rand(5)+10)

(2)判断A的元素是否可以被3整除。

P=rem(A,3)==0

其中,rem(A,3)是矩陣A的每個元素除以3的餘數矩陣。此時,0被擴展為與A同維數的零矩陣,P是進行等於(==)比較的結果矩陣。2.3.3邏輯運算

MATLAB提供了3種邏輯運算符:&(與)、|(或)和~(非)。

逻辑运算的运算法则为:

(1)在邏輯運算中,確認非零元素為真,用1表示,零元素為假,用0表示。

(2)設參與邏輯運算的是兩個標量a和b,那麼,

a&ba,b全為非零時,運算結果為1,否則為0。

a|ba,b中只要有一個非零,運算結果為1。

~a當a是零時,運算結果為1;當a非零時,運算結果為0。(3)若參與邏輯運算的是兩個同維矩陣,那麼運算將對矩陣相同位置上的元素按標量規則逐個進行。最終運算結果是一個與原矩陣同維的矩陣,其元素由1或0組成。

(4)若參與邏輯運算的一個是標量,一個是矩陣,那麼運算將在標量與矩陣中的每個元素之間按標量規則逐個進行。最終運算結果是一個與矩陣同維的矩陣,其元素由1或0組成。(5)邏輯非是單目運算符,也服從矩陣運算規則。

(6)在算術、關係、邏輯運算中,算術運算優先順序最高,邏輯運算優先順序最低。例2-9建立矩陣A,然後找出大於4的元素的位置。

(1)建立矩陣A。

A=[4,-65,-54,0,6;56,0,67,-45,0]

(2)找出大于4的元素的位置。

find(A>4)2.4矩陣分析

2.4.1對角陣與三角陣

1.對角陣

只有對角線上有非0元素的矩陣稱為對角矩陣,對角線上的元素相等的對角矩陣稱為數量矩陣,對角線上的元素都為1的對角矩陣稱為單位矩陣。(1)提取矩陣的對角線元素

設A為m×n矩陣,diag(A)函數用於提取矩陣A主對角線元素,產生一個具有min(m,n)個元素的列向量。

diag(A)函數還有一種形式diag(A,k),其功能是提取第k條對角線的元素。

(2)構造對角矩陣

設V為具有m個元素的向量,diag(V)將產生一個m×m對角矩陣,其主對角線元素即為向量V的元素。

diag(V)函數也有另一種形式diag(V,k),其功能是產生一個n×n(n=m+)對角陣,其第k條對角線的元素即為向量V的元素。例2-10先建立5×5矩陣A,然後將A的第一行元素乘以1,第二行乘以2,…,第五行乘以5。

A=[17,0,1,0,15;23,5,7,14,16;4,0,13,0,22;10,12,19,21,3;...

11,18,25,2,19];

D=diag(1:5);

D*A%用D左乘A,對A的每行乘以一個指定常數

2.三角陣

三角陣又進一步分為上三角陣和下三角陣,所謂上三角陣,即矩陣的對角線以下的元素全為0的一種矩陣,而下三角陣則是對角線以上的元素全為0的一種矩陣。(1)上三角矩陣

求矩陣A的上三角陣的MATLAB函數是triu(A)。

triu(A)函數也有另一種形式triu(A,k),其功能是求矩陣A的第k條對角線以上的元素。例如,提取矩陣A的第2條對角線以上的元素,形成新的矩陣B。

(2)下三角矩陣

在MATLAB中,提取矩陣A的下三角矩陣的函數是tril(A)和tril(A,k),其用法與提取上三角矩陣的函數triu(A)和triu(A,k)完全相同。2.4.2矩陣的轉置與旋轉

1.矩陣的轉置

轉置運算符是單撇號(‘)。

2.矩陣的旋轉

利用函數rot90(A,k)將矩陣A旋轉90º的k倍,當k為1時可省略。3.矩陣的左右翻轉

對矩陣實施左右翻轉是將原矩陣的第一列和最後一列調換,第二列和倒數第二列調換,…,依次類推。MATLAB對矩陣A實施左右翻轉的函數是fliplr(A)。

4.矩陣的上下翻轉

MATLAB對矩陣A實施上下翻轉的函數是flipud(A)。2.4.3矩陣的逆與偽逆

1.矩陣的逆

對於一個方陣A,如果存在一個與其同階的方陣B,使得:

A·B=B·A=I(I為單位矩陣)

则称B為A的逆矩陣,當然,A也是B的逆矩陣。

求一個矩陣的逆是一件非常煩瑣的工作,容易出錯,但在MATLAB中,求一個矩陣的逆非常容易。求方陣A的逆矩陣可調用函數inv(A)。

例2-11用求逆矩陣的方法解線性方程組。

Ax=b

其解為:

x=A-1b2.矩陣的偽逆

如果矩陣A不是一個方陣,或者A是一個非滿秩的方陣時,矩陣A沒有逆矩陣,但可以找到一個與A的轉置矩陣A‘同型的矩陣B,使得:

A·B·A=A

B·A·B=B

此时称矩阵B為矩陣A的偽逆,也稱為廣義逆矩陣。在MATLAB中,求一個矩陣偽逆的函數是pinv(A)。2.4.4方陣的行列式

把一個方陣看作一個行列式,並對其按行列式的規則求值,這個值就稱為矩陣所對應的行列式的值。在MATLAB中,求方陣A所對應的行列式的值的函數是det(A)。2.4.5矩陣的秩與跡

1.矩陣的秩

矩陣線性無關的行數與列數稱為矩陣的秩。在MATLAB中,求矩陣秩的函數是rank(A)。

2.矩陣的跡

矩陣的跡等於矩陣的對角線元素之和,也等於矩陣的特徵值之和。在MATLAB中,求矩陣的跡的函數是trace(A)。2.4.6向量和矩陣的範數

矩陣或向量的範數用來度量矩陣或向量在某種意義下的長度。範數有多種方法定義,其定義不同,範數值也就不同。1.向量的3種常用範數及其計算函數

在MATLAB中,求向量範數的函數為:

(1)norm(V)或norm(V,2):計算向量V的2—範數。

(2)norm(V,1):計算向量V的1—範數。

(3)norm(V,inf):計算向量V的∞—範數。2.矩陣的範數及其計算函數

MATLAB提供了求3種矩陣範數的函數,其函數調用格式與求向量的範數的函數完全相同。

2.4.7矩陣的條件數

在MATLAB中,計算矩陣A的3種條件數的函數是:

(1)cond(A,1)計算A的1—範數下的條件數。

(2)cond(A)或cond(A,2)計算A的2—範數數下的條件數。

(3)cond(A,inf)計算A的∞—範數下的條件數。2.4.8矩陣的特徵值與特徵向量

在MATLAB中,計算矩陣A的特徵值和特徵向量的函數是eig(A),常用的調用格式有3種:

(1)E=eig(A):求矩陣A的全部特徵值,構成向量E。

(2)[V,D]=eig(A):求矩陣A的全部特徵值,構成對角陣D,並求A的特徵向量構成V的列向量。(3)[V,D]=eig(A,‘nobalance’):與第2種格式類似,但第2種格式中先對A作相似變換後求矩陣A的特徵值和特徵向量,而格式3直接求矩陣A的特徵值和特徵向量。例2-12用求特徵值的方法解方程。

3x5-7x4+5x2+2x-18=0

p=[3,-7,0,5,2,-18];

A=compan(p);%A的伴隨矩陣

x1=eig(A)%求A的特徵值

x2=roots(p)%直接求多項式p的零點2.5矩陣的超越函數

1.矩陣平方根sqrtm

sqrtm(A)计算矩阵A的平方根。

2.矩陣對數logm

logm(A)计算矩阵A的自然對數。此函數輸入參數的條件與輸出結果間的關係和函數sqrtm(A)完全一樣3.矩陣指數expm、expm1、expm2、expm3

expm(A)、expm1(A)、expm2(A)、expm3(A)的功能都求矩陣指數eA。

4.普通矩陣函數funm

funm(A,‘fun’)用来计算直接作用于矩阵A的由‘fun’指定的超越函數值。當fun取sqrt時,funm(A,‘sqrt’)可以計算矩陣A的平方根,與sqrtm(A)的計算結果一樣。2.6字串

在MATLAB中,字串是用單撇號括起來的字元序列。

MATLAB將字串當作一個行向量,每個元素對應一個字元,其標識方法和數值向量相同。也可以建立多行字串矩陣。字串是以ASCII碼形式存儲的。abs和double函數都可以用來獲取字串矩陣所對應的ASCII碼數值矩陣。相反,char函數可以把ASCII碼矩陣轉換為字串矩陣。例2-13建立一個字串向量,然後對該向量做如下處理:

(1)取第1~5個字元組成的子字串。

(2)將字串倒過來重新排列。

(3)將字串中的小寫字母變成相應的大寫字母,其餘字元不變。

(4)統計字串中小寫字母的個數。命令如下:

ch=‘ABc123d4e56Fg9’;

subch=ch(1:5)%取子字符串

revch=ch(end:-1:1)%將字串倒排

k=find(ch>=‘a’&ch<=‘z’);%找小寫字母的位置

ch(k)=ch(k)-(‘a’-‘A’);%將小寫字母變成相應的大寫字母

char(ch)

length(k)%统计小写字母的个数

與字串有關的另一個重要函數是eval,其調用格式為:

eval(t)

其中t為字串。它的作用是把字串的內容作為對應的MATLAB語句來執行。2.7結構數據和單元數據

2.7.1結構數據

1.結構矩陣的建立與引用

結構矩陣的元素可以是不同的數據類型,它能將一組具有不同屬性的數據納入到一個統一的變數名下進行管理。建立一個結構矩陣可採用給結構成員賦值的辦法。具體格式為:

结构矩阵名.成員名=運算式

其中運算式應理解為矩陣運算式。2.結構成員的修改

可以根據需要增加或刪除結構的成員。例如要給結構矩陣a增加一個成員x4,可給a中任意一個元素增加成員x4:

a(1).x4=‘410075’;

但其他成员均为空矩阵,可以使用赋值语句给它赋确定的值。

要删除结构的成员,则可以使用rmfield函數來完成。例如,刪除成員x4:

a=rmfield(a,‘x4’);

3.关于结构的函数

除了一般的结构数据的操作外,MATLAB還提供了部分函數來進行結構矩陣的操作。2.7.2單元數據

1.單元矩陣的建立與引用

建立單元矩陣和一般矩陣相似,只是矩陣元素用大括弧括起來。

可以用带有大括号下标的形式引用单元矩阵元素。例如b{3,3}。單元矩陣的元素可以是結構或單元數據。

可以使用celldisp函數來顯示整個單元矩陣,如celldisp(b)。還可以刪除單元矩陣中的某個元素。2.關於單元的函數

MATLAB還提供了部分函數用於單元的操作。2.8稀疏矩陣

2.8.1矩陣存儲方式

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

1.完全存儲方式

完全存儲方式是將矩陣的全部元素按列存儲。以前講到的矩陣的存儲方式都是按這個方式存儲的,此存儲方式對稀疏矩陣也適用。2.稀疏存儲方式

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

注意,在講稀疏矩陣時,有兩個不同的概念,一是指矩陣的0元素較多,該矩陣是一個具有稀疏特徵的矩陣,二是指採用稀疏方式存儲的矩陣。2.8.2稀疏存儲方式的產生

1.將完全存儲方式轉化為稀疏存儲方式

函數A=sparse(S)將矩陣S轉化為稀疏存儲方式的矩陣A。當矩陣S是稀疏存儲方式時,則函數調用相當於A=S。

sparse函數還有其他一些調用格式:

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

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

此外,還有一些和稀疏矩陣操作有關的函數。例如

[u,v,S]=find(A):返回矩陣A中非0元素的下標和元素。這裏產生的u,v,S可作為sparse(u,v,S)的參數。

full(A):返回和稀疏存儲矩陣A對應的完全存儲方式矩陣。2.產生稀疏存儲矩陣

只把要建立的稀疏矩陣的非0元素及其所在行和列的位置表示出來後由MATLAB自己產生其稀疏存儲,這需要使用spconvert函數。調用格式為:

B=spconvert(A)

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

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

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

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

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

該函數將A所描述的一個稀疏矩陣轉化為一個稀疏存儲矩陣。例2-15根據表示稀疏矩陣的矩陣A,產生一個稀疏存儲方式矩陣B。

命令如下:

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

B=spconvert(A)3.帶狀稀疏存儲矩陣

用spdiags函數產生帶狀稀疏矩陣的稀疏存儲,調用格式是:

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

其中,參數m,n為原帶狀矩陣的行數與列數。B為r×p階矩陣,這裏r=min(m,n),p為原帶狀矩陣所有非零對角線的條數,矩陣B的第i列即為原帶狀矩陣的第i條非零對角線。4.單位矩陣的稀疏存儲

單位矩陣只有對角線元素為1,其他元素都為0,是一種具有稀疏特徵的矩陣。函數eye產生一個完全存儲方式的單位矩陣。MATLAB還有一個產生稀疏存儲方式的單位矩陣的函數,這就是speye。函數speye(m,n)返回一個m×n的稀疏存儲單位矩陣。2.8.3稀疏矩陣應用舉例

稀疏存儲矩陣只是矩陣的存儲方式不同,它的運算規則與普通矩陣是一樣的。所以,在運算過程中,稀疏存儲矩陣可以直接參與運算。當參與運算的對象不全是稀疏存儲矩陣時,所得結果一般是完全存儲形式。

MATLAB程式設計

3.1M檔3.1.1M檔概述用MATLAB語言編寫的程式,稱為M檔。M檔可以根據調用方式的不同分為兩類:命令檔(ScriptFile)和函數檔(FunctionFile)。例3-1分別建立命令檔和函數檔,將華氏溫度f轉換為攝氏溫度c。程式1:首先建立命令檔並以檔案名f2c.m存盤。clear;%清除工作空間中的變數f=input('InputFahrenheittemperature:');c=5*(f-32)/9然後在MATLAB的命令窗口中輸入f2c,將會執行該命令檔,執行情況為:InputFahrenheittemperature:73c=22.7778程式2:首先建立函數檔f2c.m。functionc=f2c(f)c=5*(f-32)/9然後在MATLAB的命令窗口調用該函數檔。clear;y=input('InputFahrenheittemperature:');x=f2c(y)輸出情況為:InputFahrenheittemperature:70c=21.1111x=21.11113.1.2M檔的建立與打開

M檔是一個文本檔,它可以用任何編輯程式來建立和編輯,而一般常用且最為方便的是使用MATLAB提供的文本編輯器。1.建立新的M檔為建立新的M檔,啟動MATLAB文本編輯器有3種方法:

(1)菜單操作。從MATLAB主窗口的File菜單中選擇New菜單項,再選擇M-file命令,螢幕上將出現MATLAB文本編輯器窗口。

(2)命令操作。在MATLAB命令窗口輸入命令edit,啟動MATLAB文本編輯器後,輸入M檔的內容並存盤。

(3)命令按鈕操作。單擊MATLAB主窗口工具欄上的NewM-File命令按鈕,啟動MATLAB文本編輯器後,輸入M檔的內容並存盤。2.打開已有的M檔打開已有的M檔,也有3種方法:

(1)菜單操作。從MATLAB主窗口的File菜單中選擇Open命令,則螢幕出現Open對話框,在Open對話框中選中所需打開的M檔。在文檔窗口可以對打開的M檔進行編輯修改,編輯完成後,將M檔存盤。

(2)命令操作。在MATLAB命令窗口輸入命令:edit檔案名,則打開指定的M檔。

(3)命令按鈕操作。單擊MATLAB主窗口工具欄上的OpenFile命令按鈕,再從彈出的對話框中選擇所需打開的M檔。3.2程式控制結構3.2.1順序結構1.數據的輸入從鍵盤輸入數據,則可以使用input函數來進行,該函數的調用格式為:

A=input(提示資訊,選項);其中提示資訊為一個字串,用於提示用戶輸入什麼樣的數據。如果在input函數調用時採用's'選項,則允許用戶輸入一個字串。例如,想輸入一個人的姓名,可採用命令:xm=input('What''syourname?','s');2.數據的輸出

MATLAB提供的命令窗口輸出函數主要有disp函數,其調用格式為

disp(輸出項)其中輸出項既可以為字串,也可以為矩陣。

例3-2輸入x,y的值,並將它們的值互換後輸出。程式如下:

x=input('Inputxplease.');y=input('Inputyplease.');z=x;x=y;y=z;disp(x);disp(y);例3-3求一元二次方程ax2+bx+c=0的根。程式如下:a=input('a=?');b=input('b=?');c=input('c=?');d=b*b-4*a*c;x=[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)];disp(['x1=',num2str(x(1)),',x2=',num2str(x(2))]);3.程式的暫停暫停程式的執行可以使用pause函數,其調用格式為:

pause(延遲秒數)

如果省略延遲時間,直接使用pause,則將暫停程式,直到用戶按任一鍵後程式繼續執行。若要強行中止程式的運行可使用Ctrl+C命令。3.2.2選擇結構1.if語句在MATLAB中,if語句有3種格式。

(1)單分支if語句:if條件語句組

end當條件成立時,則執行語句組,執行完之後繼續執行if語句的後繼語句,若條件不成立,則直接執行if語句的後繼語句。(2)雙分支if語句:if條件語句組1else

語句組2end

當條件成立時,執行語句組1,否則執行語句組2,語句組1或語句組2執行後,再執行if語句的後繼語句。

例3-4計算分段函數的值。程式如下:x=input('請輸入x的值:');ifx<=0y=(x+sqrt(pi))/exp(2);elsey=log(x+sqrt(1+x*x))/2;endY(3)多分支if語句:if條件1

語句組1elseif條件2

語句組2……elseif條件m

語句組melse

語句組nend語句用於實現多分支選擇結構。

例3-5輸入一個字元,若為大寫字母,則輸出其對應的小寫字母;若為小寫字母,則輸出其對應的大寫字母;若為數字字符則輸出其對應的數值,若為其他字元則原樣輸出。c=input('請輸入一個字元','s');ifc>='A'&c<='Z'disp(setstr(abs(c)+abs('a')-abs('A')));elseifc>='a'&c<='z'disp(setstr(abs(c)-abs('a')+abs('A')));elseifc>='0'&c<='9'disp(abs(c)-abs('0'));elsedisp(c);end2.switch語句

switch語句根據運算式的取值不同,分別執行不同的語句,其語句格式為:

switch運算式

case運算式1

語句組1case運算式2

語句組2……case運算式m

語句組motherwise

語句組nend當運算式的值等於運算式1的值時,執行語句組1,當運算式的值等於運算式2的值時,執行語句組2,…,當運算式的值等於運算式m的值時,執行語句組m,當運算式的值不等於case所列的運算式的值時,執行語句組n。當任意一個分支的語句執行完後,直接執行switch語句的下一句。例3-6某商場對顧客所購買的商品實行打折銷售,標準如下(商品價格用price來表示):

price<200沒有折扣

200≤price<5003%折扣

500≤price<10005%折扣

1000≤price<25008%折扣

2500≤price<500010%折扣5000≤price14%折扣輸入所售商品的價格,求其實際銷售價格。

程式如下:price=input('請輸入商品價格');switchfix(price/100)case{0,1}%價格小於200rate=0;case{2,3,4}%價格大於等於200但小於500rate=3/100;casenum2cell(5:9)%價格大於等於500但小於1000rate=5/100;casenum2cell(10:24)%價格大於等於1000但小於2500rate=8/100;casenum2cell(25:49)%價格大於等於2500但小於5000rate=10/100;otherwise%價格大於等於5000rate=14/100;endprice=price*(1-rate)%輸出商品實際銷售價格3.try語句語句格式為:try

語句組1catch

語句組2endtry語句先試探性執行語句組1,如果語句組1在執行過程中出現錯誤,則將錯誤資訊賦給保留的lasterr變數,並轉去執行語句組2。例3-7矩陣乘法運算要求兩矩陣的維數相容,否則會出錯。先求兩矩陣的乘積,若出錯,則自動轉去求兩矩陣的點乘。程式如下:A=[1,2,3;4,5,6];B=[7,8,9;10,11,12];tryC=A*B;catchC=A.*B;endClasterr%顯示出錯原因3.2.3迴圈結構1.for語句for語句的格式為:for迴圈變數=運算式1:運算式2:運算式3

循環體語句

end其中運算式1的值為迴圈變數的初值,運算式2的值為步長,運算式3的值為迴圈變數的終值。步長為1時,運算式2可以省略。例3-8一個三位整數各位數字的立方和等於該數本身則稱該數為水仙花數。輸出全部水仙花數。程式如下:form=100:999m1=fix(m/100);%求m的百位數字m2=rem(fix(m/10),10);%求m的十位數字m3=rem(m,10);%求m的個位數字ifm==m1*m1*m1+m2*m2*m2+m3*m3*m3disp(m)endend例3-9已知,當n=100時,求y的值。程式如下:y=0;n=100;fori=1:ny=y+1/(2*i-1);endy

在實際MATLAB編程中,採用迴圈語句會降低其執行速度,所以前面的程式通常由下麵的程式來代替:n=100;i=1:2:2*n-1;y=sum(1./i);yfor語句更一般的格式為:

for迴圈變數=矩陣運算式循環體語句

end

執行過程是依次將矩陣的各列元素賦給迴圈變數,然後執行循環體語句,直至各列元素處理完畢。

例3-10寫出下列程式的執行結果。

s=0;a=[12,13,14;15,16,17;18,19,20;21,22,23];fork=as=s+k;enddisp(s');2.while語句

while語句的一般格式為:

while(條件)

循環體語句

end

其執行過程為:若條件成立,則執行循環體語句,執行後再判斷條件是否成立,如果不成立則跳出迴圈。

例3-11從鍵盤輸入若干個數,當輸入0時結束輸入,求這些數的平均值和它們之和。程式如下:sum=0;cnt=0;val=input('Enteranumber(endin0):');while(val~=0)sum=sum+val;cnt=cnt+1;val=input('Enteranumber(endin0):');endif(cnt>0)summean=sum/cntend3.break語句和continue語句與迴圈結構相關的語句還有break語句和continue語句。它們一般與if語句配合使用。break語句用於終止迴圈的執行。當在循環體內執行到該語句時,程式將跳出迴圈,繼續執行迴圈語句的下一語句。continue語句控制跳過循環體中的某些語句。當在循環體內執行到該語句時,程式將跳過循環體中所有剩下的語句,繼續下一次迴圈。例3-12求[100,200]之間第一個能被21整除的整數。程式如下:forn=100:200ifrem(n,21)~=0continueendbreakendn4.迴圈的嵌套如果一個迴圈結構的循環體又包括一個迴圈結構,就稱為迴圈的嵌套,或稱為多重迴圈結構。例3-13若一個數等於它的各個真因數之和,則稱該數為完數,如6=1+2+3,所以6是完數。求[1,500]之間的全部完數。form=1:500s=0;fork=1:m/2ifrem(m,k)==0s=s+k;endendifm==sdisp(m);endend3.3函數檔3.3.1函數檔的基本結構函數檔由function語句引導,其基本結構為:

function輸出形參表=函數名(輸入形參表)

注釋說明部分函數體語句其中以function開頭的一行為引導行,表示該M檔是一個函數檔。函數名的命名規則與變數名相同。輸入形參為函數的輸入參數,輸出形參為函數的輸出參數。當輸出形參多於一個時,則應該用方括號括起來。

例3-14編寫函數檔求半徑為r的圓的面積和周長。函數檔如下:function[s,p]=fcircle(r)%CIRCLEcalculatetheareaandperimeterofacircleofradiir%r圓半徑%s圓面積%p圓周長%2004年7月30日編s=pi*r*r;p=2*pi*r;3.3.2函數調用函數調用的一般格式是:

[輸出實參表]=函數名(輸入實參表)

要注意的是,函數調用時各實參出現的順序、個數,應與函數定義時形參的順序、個數一致,否則會出錯。函數調用時,先將實參傳遞給相應的形參,從而實現參數傳遞,然後再執行函數的功能。

例3-15利用函數檔,實現直角坐標(x,y)與極座標(ρ,θ)之間的轉換。函數檔tran.m:function[rho,theta]=tran(x,y)rho=sqrt(x*x+y*y);theta=atan(y/x);

調用tran.m的命令檔main1.m:x=input('Pleaseinputx=:');y=input('Pleaseinputy=:');[rho,the]=tran(x,y);rhothe

在MATLAB中,函數可以嵌套調用,即一個函數可以調用別的函數,甚至調用它自身。一個函數調用它自身稱為函數的遞歸調用。

例3-16利用函數的遞歸調用,求n!。

n!本身就是以遞歸的形式定義的:顯然,求n!需要求(n-1)!,這時可採用遞歸調用。遞歸調用函數檔factor.m如下:functionf=factor(n)ifn<=1f=1;elsef=factor(n-1)*n;%遞歸調用求(n-1)!end3.3.3函數參數的可調性在調用函數時,MATLAB用兩個永久變數nargin和nargout分別記錄調用該函數時的輸入實參和輸出實參的個數。只要在函數檔中包含這兩個變數,就可以準確地知道該函數檔被調用時的輸入輸出參數個數,從而決定函數如何進行處理。

例3-17nargin用法示例。函數檔examp.m:functionfout=charray(a,b,c)ifnargin==1fout=a;elseifnargin==2fout=a+b;elseifnargin==3fout=(a*b*c)/2;end

命令檔mydemo.m:x=[1:3];y=[1;2;3];examp(x)examp(x,y')examp(x,y,3)3.3.4全局變數與局部變數全局變數用global命令定義,格式為:global變數名例3-18全局變數應用示例。先建立函數檔wadd.m,該函數將輸入的參數加權相加。functionf=wadd(x,y)globalALPHABETAf=ALPHA*x+BETA*y;

在命令窗口中輸入:globalALPHABETAALPHA=1;BETA=2;s=wadd(1,2)3.4程式舉例例3-19猜數遊戲。首先由電腦產生[1,100]之間的隨機整數,然後由用戶猜測所產生的亂數。根據用戶猜測的情況給出不同提示,如猜測的數大於產生的數,則顯示“High”,小於則顯示“Low”,等於則顯示“Youwon”,同時退出遊戲。用戶最多可以猜7次。例3-20用篩選法求某自然數範圍內的全部素數。素數是大於1,且除了1和它本身以外,不能被其他任何整數所整除的整數。用篩選法求素數的基本思想是:要找出2~m之間的全部素數,首先在2~m中劃去2的倍數(不包括2),然後劃去3的倍數(不包括3),由於4已被劃去,再找5的倍數(不包括5),…,直到再劃去不超過的數的倍數,剩下的數都是素數。例3-21設,求s=。求函數f(x)在[a,b]上的定積分,其幾何意義就是求曲線y=f(x)與直線x=a,x=b,y=0所圍成的曲邊梯形的面積。為了求得曲邊梯形面積,先將積分區間[a,b]分成n等分,每個區間的寬度為h=(b-a)/n,對應地將曲邊梯形分成n等分,每個小部分即是一個小曲邊梯形。近似求出每個小曲邊梯形面積,然後將n個小曲邊梯形的面積加起來,就得到總面積,即定積分的近似值。近似地求每個小曲邊梯形的面積,常用的方法有:矩形法、梯形法以及辛普生法等。例3-22Fibonacci數列定義如下:f1=1f2=1fn=fn-1+fn-2(n>2)求Fibonacci數列的第20項。例3-23根據矩陣指數的冪級數展開式求矩陣指數。3.5程式調試3.5.1程式調試概述一般來說,應用程式的錯誤有兩類,一類是語法錯誤,另一類是運行時的錯誤。語法錯誤包括詞法或文法的錯誤,例如函數名的拼寫錯、運算式書寫錯等。程式運行時的錯誤是指程式的運行結果有錯誤,這類錯誤也稱為程式邏輯錯誤。3.5.2調試器1.Debug菜單項該菜單項用於程式調試,需要與Breakpoints菜單項配合使用。2.Breakpoints菜單項該菜單項共有6個菜單命令,前兩個是用於在程式中設置和清除中斷點的,後4個是設置停止條件的,用於臨時停止M檔的執行,並給用戶一個檢查局部變數的機會,相當於在M檔指定的行號前加入了一個keyboard命令。3.5.3調試命令除了採用調試器調試程式外,MATLAB還提供了一些命令用於程式調試。命令的功能和調試器菜單命令類似,具體使用方法請讀者查詢MATLAB幫助文檔。

MATLAB檔操作

4.1檔的打開與關閉

4.1.1檔的打開

fopen函數的調用格式為:

fid=fopen(檔案名,打開方式)

其中文件名用字符串形式,表示待打开的数据文件。常见的打开方式有:‘r’表示對打開的檔讀數據,‘w’表示對打開的檔寫數據,‘a’表示在打開的檔末尾添加數據。

fid用於存儲檔句柄值,句柄值用來標識該數據檔,其他函數可以利用它對該數據檔進行操作。檔數據格式有兩種形式,一是二進位檔,二是文本檔。在打開檔時需要進一步指定檔格式類型,即指定是二進位檔還是文本檔。

4.1.2檔的關閉

檔在進行完讀、寫等操作後,應及時關閉。關閉檔用fclose函數,調用格式為:

sta=fclose(fid)

該函數關閉fid所表示的檔。sta表示關閉檔操作的返回代碼,若關閉成功,返回0,否則返回–1。

4.2檔的讀寫操作

4.2.1二進位檔的讀寫操作

1.讀二進位檔

fread函數可以讀取二進位檔的數據,並將數據存入矩陣。其調用格式為:

[A,COUNT]=fread(fid,size,precision)

其中A用於存放讀取的數據,COUNT返回所讀取的數據元素個數,fid為檔句柄,size為可選項,若不選用則讀取整個檔內容,若選用則它的值可以是下列值:

(1)N表示讀

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论