《《Matlab程序設計》PPT課件》由會員分享,可在線閱讀,更多相關(guān)《《Matlab程序設計》PPT課件(56頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、第七節(jié) Matlab的程序設計 Matlab語言稱為第四 代編程語言,程序簡潔、可 讀性很強而且調(diào)試十分容易 , 是 Matlab的重要組成部分。 m文件簡介 用戶如想靈活應用 Matlab去解決實際問題, 充分調(diào)用 Matlab的科學技術(shù)資源,就需要編 輯 m文件。 包含 Matlab語言代碼的文件稱為 m文件,其 擴展名為 m。 編輯 m文件可使用各種文本編輯器。 一、 Matlab的工作模式 指令驅(qū)動模式 通常 Matlab以指令驅(qū)動模式工作,即在 Matlab 窗口下當用戶輸入單行指令時, Matlab 立即處理 這條指令,并顯示結(jié)果,這就是 Matlab命令行方 式。 命令行操作時,
2、 Matlab窗口只允許一次執(zhí)行一 行上的一個或幾個語句。 例如: x1=0:10 x1 = 0 1 2 3 4 5 6 7 8 9 10 x2=0:3:11 x2 = 0 3 6 9 x3=11.5:-3:0 x3 = 11.5000 8.5000 5.5000 2.5000 x1=0:10,x2=0:3:11,x3=11.5:-3:0 x1 = 0 1 2 3 4 5 6 7 8 9 10 x2 = 0 3 6 9 x3 = 11.5000 8.5000 5.5000 2.5000 在 Matlab窗口輸入數(shù)據(jù)和命令進行計算時, 當處理復雜問題和大量數(shù)據(jù)時是不方便的。 因此應編輯 m文件。
3、 命令行方式程序可讀性差,而且不能存儲, 對于復雜的問題,應編寫成能存儲的程序文 件。 m文件模式 將 Matlab語句構(gòu)成的程序存儲成以 m為擴展名 的文件,然后再執(zhí)行該程序文件,這種工作 模式稱為程序文件模式。 程序文件不能在指令窗口下建立,因為指令 窗口只允許一次執(zhí)行一行上的一個或幾個語 句。 二、 m文件的創(chuàng)建 m文件的類型是普通的文本文件,我們可以 使用系統(tǒng)認可的文本文件編輯器來建立 m文件。 具體的創(chuàng)建方法: 1. 在 Matlab命令窗 口點擊 file 菜單 new m-file 2. 點擊 file Save File As 將編輯器中的內(nèi)容存 入文件 *.m。 3. 編輯器
4、 用系統(tǒng)自帶的記事本或者 word可 以打開編輯 m文件,也可以使用專業(yè)的編輯工 具,例如: UltraEdit。當然更好的選擇是用 matlab自帶的編輯器編寫 m文件。 注意:所創(chuàng)建的 m文件必須納入 Matlab搜索路 徑后,才能在 Matlab命令窗口運行。 Matlab搜索路徑的設置 1. path(path,c:toolsgoodstuff) 2.用 pathtool路徑瀏覽器設定當前目錄。 可以在命令行輸入 pathtool, 也可以在 file set path中加入文件夾或文件。 三、 Matlab文件的類型 1. 數(shù)據(jù)文件 .mat mat文件是 Matlab以標準二進制格
5、式保存的 數(shù)據(jù)文件,可將工作空間中有用的數(shù)據(jù)變量 保存下來。 mat文件的生成和調(diào)用是由函數(shù) save和 load 完成的。 例如: load gatlin image(X) colormap(gray);axis equal;axis(off) 100 200 300 400 500 600 50 100 150 200 250 300 350 400 450 2. m文件 m文件的語法類似于 c語言,但又有其自身特 點,后綴為 m。它只是一個簡單的 ASCII碼文 本文件,執(zhí)行程序時逐行解釋運行程序, Matlab是解釋性的編程語言。 m文件有兩類: 獨立的 m文件 稱命令文件 (腳本 s
6、cript) 可調(diào)用 m文件 稱函數(shù)文件 (function) (1) 命令文件 簡單的 m文件 命令文件實際上是一串指令的集合,與在命令 窗口逐行執(zhí)行文件中的所有指令,其結(jié)果是一 樣的。 命令文件的特點: 命令文件沒有輸入輸出參數(shù)。 命令文件運行中可以調(diào)用工作空間的數(shù)據(jù),運 行中產(chǎn)生的所有變量為全局變量。 命令文件可以直接運行。 命令文件包括兩部分:注釋文件和程序文件 %RANK Number of linearly independent rows or columns. % K = RANK(X) is the number of singular values of X % that
7、are larger than MAX(SIZE(X) * NORM(X) * EPS. % K = RANK(X,tol) is the number of singular values of X that % are larger than tol. % Copyright (c) 1984-94 by The MathWorks, Inc. s = svd(x); if (nargin = 1) tol = max(size(x) * max(s) * eps; end r = sum(s tol); 程序部分 如何有效加注釋 % 最常用的操作,但是效率慢。如果是對大段 的代碼進行注釋
8、,可使用下面三種方法: 選中大段代碼 ,鼠標右鍵 comment ,如果要取 消大段代碼的注釋,同樣鼠標右鍵 uncomment 快捷鍵:加注釋是選中代碼按 Ctrl+r,取消注釋 是選中代碼按 Ctrl+t。 if(0) 大段的代碼 end (2) Matlab內(nèi)置函數(shù)文件 Matlab自定義的函數(shù)文件稱內(nèi)置函數(shù)文件 調(diào)用內(nèi)置函數(shù)的方法: 使用函數(shù)名并給出相 應的入口、出口參數(shù)即可。 例如: sin.m函數(shù) 用 type sin查不到。 返回為: sin is a built-in function. 實際應用中可以直接調(diào)用 x=0:2*pi/180:2*pi; y=sin(2*x) plo
9、t(x,y) 又如 sqrt(x) 求 x的平方根 abs(x) 求 x的絕對值 det(a) 求行列式的值 等等。 Matlab擁有大量的內(nèi)置數(shù)學函數(shù),供我們在數(shù) 值運算和符號運算中調(diào)用。 (3)函數(shù) m文件 需要輸入變量,返回輸出變量 Matlab用戶可以根據(jù)需要編輯自己的 m文件,它們可 以像庫函數(shù)一樣方便的調(diào)用,從而極大地擴展了 Matlab 的能力。 對于某一類特殊問題,如創(chuàng)建了許多 m函數(shù)文件, 則可形成新的工具箱。 這種用 Matlab語言創(chuàng)建定義新的 Matlab函數(shù)的功 能,正體現(xiàn)了 Matlab語言強大的擴展功能。 函數(shù) m文件的格式: (1)函數(shù)定義行: function
10、 返回變量、參數(shù) =函數(shù)名 (輸入變量、參數(shù) ) (2) 函數(shù)說明,就是函數(shù)注釋。 (3) 函數(shù)體:程序語句段,完成函數(shù)的功能。 特定規(guī)則: 1. 函數(shù) m文件第一行必須以單詞 function作為引 導詞,必須遵循如下形式: function 因變量 =函數(shù)名 (自變量 ) 2. m文件的文件名必須是 .m。 3. 程序中的變量均為局部變量,不保存在工作 空間中,也不能調(diào)用工作空間的數(shù)據(jù),其變 量只在函數(shù)運行期間有效。 4. 不能直接運行,只能調(diào)用。因為系統(tǒng)無法確 定輸入變量。 5. 只能在當前目錄運行。 (4) 系統(tǒng)文件 s函數(shù) 用于描述系統(tǒng)運動的專用函數(shù),是特殊的 m 文件。 s 函數(shù)有
11、 3類: 由 simulink結(jié)構(gòu)圖自動創(chuàng)建 可用 c語言程序設計 mex文件直 接定義 用函數(shù) m文件編寫 s函數(shù)一旦創(chuàng)建,即可在框圖中使用,也可在 文件中調(diào)用。 S函數(shù)的調(diào)用格式 sys, x0=sfunction( t, x, u, flag) S函數(shù)與函數(shù) m文件類似,只是輸入、輸出 變量是限定的。 系統(tǒng)狀態(tài) 狀態(tài)初值 用戶定義的系統(tǒng) 當前時刻 當前狀態(tài)值 當前輸入值 標志量 matlab的函數(shù)類型 simple 未加載的內(nèi)部函數(shù)、 m文件 overloaded 加載的內(nèi)部函數(shù)、 m文件 subfunction 子函數(shù) constructor matlab類的創(chuàng)建函數(shù) private
12、局部函數(shù) Matlab自動備份文件 Matlab的程序文件中除了后綴是 m, mat外,還 有 asv。它沒有任何作用,只是像 Word一樣備 份文件,可以刪除。 也可以設置不備份文件,方法是: 在 file/Preferences里面在“ Editor/Debugger”菜 單里面找到 Autosave,把勾選去掉。 四、 matlab的程序結(jié)構(gòu) matlab語言的程序結(jié)構(gòu)與其它高級語言是一致 的,分為順序結(jié)構(gòu),循環(huán)結(jié)構(gòu),分支結(jié)構(gòu)。 (1).順序結(jié)構(gòu) 依次順序執(zhí)行程序的各條語句 (2).循環(huán)結(jié)構(gòu) 被重復執(zhí)行的一組語句,循環(huán) 是計算機解決問題的主要手段。 循環(huán)語句主要有: for end (硬
13、循環(huán)語句或無條件循環(huán) ) 語法為: for i = 表達式 (表達式為一個向量) 可執(zhí)行語句 end 例:利用 for循環(huán)求 1! +2! +3! + +5!的值 sum=0; for i=1:5 pdr=1; for k=1:i pdr=pdr*k; end sum=sum+pdr; end sum = 153 while end 循環(huán) (當 就 ) while循環(huán)將循環(huán)體中的語句循環(huán)執(zhí)行不定 次數(shù)。 語法為: while 表達式 循環(huán)體語句 end 表達式一般是由邏輯運算和關(guān)系運算以及一 般運算組成的,以判斷循環(huán)的進行和停止; 只要表達式的值 非 0,繼續(xù)循環(huán);直到表達式 值為 0,循環(huán)停
14、止。 例:用 while循環(huán)求 1100間整數(shù)的和 sum=0; i=1; while i, ,=, = =, = 等 邏輯操作符 % 隨機生成 300 x300的矩陣 inv(a); %求逆矩陣 toc etime(t1,t2)來計算 t1,t2之間的時間差來完成計時, 其中時差 t1-t2 。 例如: t0=clock a=rand(300); inv(a); elapsed_time=etime(clock,t0) %elapsed_time指流逝過的時間 同理可以使用 cputime來計時 t=cputime; your_operation; cputime-t 七、程序代碼優(yōu)化 1.
15、盡量不要使用循環(huán),而使用矩陣結(jié)構(gòu)來進行運算。 例: t0=cputime n=100000; sum=0; for i=1:n sum=sum+1/i end sum t1=cputime-t0 而如果使用向量、矩陣和系統(tǒng)內(nèi)部函數(shù) tic n=100000; a=1:n; total=cumsum(1./a) toc %cumsum函數(shù)實現(xiàn)累計求和 八、文件操作 matlab文件輸入、輸出( I/O)函數(shù)允許把其它 格式的數(shù)據(jù)文件直接讀進 matlab,它是以 c 語言文件 I/O函數(shù)為基礎(chǔ)的。 文件數(shù)據(jù)格式有兩種形式,一是二進制文件, 二是文本文件。在打開文件時需要進一步指 定文件格式類型,
16、即指定是二進制文件還是 文本文件。 1. 打開和關(guān)閉文件( fopen, fclose) 格式: fid=fopen(數(shù)據(jù)文件名 , 打開方式 ) r 表示對打開的文件 讀 數(shù)據(jù) w 表示對打開的文件 寫 數(shù)據(jù) a 表示在打開的文件末尾 添加 數(shù)據(jù) fid用于存儲文件句柄值,句柄值用來標識該 數(shù)據(jù)文件,其他函數(shù)可以利用它對該數(shù)據(jù) 文件進行操作。 文件一旦打開,即可進行讀寫操作,操作完 后 應及時關(guān)閉,使用 fclose函數(shù) 。 sta=fclose(fid) 關(guān)閉上述打開文件 該函數(shù)關(guān)閉 fid所表示的文件。 sta表示關(guān) 閉文件操作的返回代碼,若關(guān)閉成功,返回 0, 否則返回 1。 sta=
17、fclose(all) 關(guān)閉所有打開的文件 2. 讀寫二進制數(shù)據(jù)文件 fread, fwrite 可讀寫數(shù)據(jù)文件,文本文件。 例: fid=fopen(user.dat,r) a=fread(fid,50) sta=fclose(fid) 其中 fread的調(diào)用格式為: A,COUNT=fread(fid, size, precision) 其中 A用于存放讀取的數(shù)據(jù), COUNT返回所讀取的數(shù) 據(jù)元素個數(shù), fid為文件句柄, size為可選項,若不 選用則讀取整個文件內(nèi)容,若選用則它的值可以是 下列值: (1) N表示讀取 N個元素到一個列向量。 (2) Inf表示讀取整個文件。 (3)
18、M,N表示讀數(shù)據(jù)到 M N的矩陣中,數(shù)據(jù)按列 存放。 precision代表讀寫數(shù)據(jù)的類型 2寫二進制文件 fwrite 函數(shù)按照指定的數(shù)據(jù)類型將矩陣中的元素寫 入到文件中。其調(diào)用格式為: COUNT=fwrite (fid, A, precision) 其中 COUNT返回所寫的數(shù)據(jù)元素個數(shù), fid為文件 句柄, A用來存放寫入文件的數(shù)據(jù), precision用于控 制所寫數(shù)據(jù)的類型,其形式與 fread函數(shù)相同。 例: 建立一數(shù)據(jù)文件 magic5.dat,用于存放 5 階魔方陣。 程序如下: fid=fopen(magic5.dat,w); cnt=fwrite(fid,magic(5
19、),int32); fclose(fid); 也可以直接導入數(shù)據(jù) txt文件 file/import data./next/finish 例如: work目錄下建立一個 hello.txt,復制如下數(shù)據(jù): 你好 歡迎來到 太原理工大學 請訪問如下網(wǎng)址: 1 11 111 1111 2 22 222 2222 3 33 333 3333 4 44 444 4444 5 55 555 5555 九、應用程序接口 應用程序接口 是 matlab的附加組件。是一個 由相關(guān)函數(shù)組成的接口函數(shù)庫,可實現(xiàn)與外部程 序的交互。 MEX文件:是 matlab環(huán)境下調(diào)用 C、 FORTRAN 語言編寫的應用程序
20、模塊。 matlab 計算引擎:在使用 C、 FORTRAN編程時 可調(diào)用 matlab函數(shù)庫進行計算。 MAT文件:實現(xiàn) matlab與 C、 FORTRAN語言程序間的 數(shù)據(jù)交換 十、 matlab編譯 matlab編譯的原因: 1. 提高運算速度 2. 隱藏特定算法 3. 可產(chǎn)生獨立的 m文件 matlab編譯函數(shù): mcc MCC -options fun fun2 . mexfile1 . mlibfile1 . 如何關(guān)掉 matlabserver.exe 有時候,用戶為了節(jié)省計算機內(nèi)存,或者是提高啟 動速度,會禁止 matlab server服務。 在控制面板 -管理工具 -服務
21、中 matlab server 的服務改 為禁用,手動啟動, matlabserver.exe就不運行了。 或者這樣操作 (這是卸載 MATLAB Server) : 打開一個 dos窗口 cd /webserver/bin/win32 matlabserver -remove 注: 指的是安裝目錄 小 結(jié) 本節(jié)主要介紹了 matlab語言程序設 計基礎(chǔ)。相對來說, matlab 編程簡 單,容易掌握。 通過學習,要求同學們 應能編寫簡 單程序。 結(jié) 束 語 本課程基于 matlab語言基礎(chǔ),想繼續(xù) 深入學習,要多看其他文獻,相互討 論,并能多上手練習。 希望大家今后都能成為 matlab高手。