第六章_matlab的m文件和函數(shù)句柄_第1頁(yè)
第六章_matlab的m文件和函數(shù)句柄_第2頁(yè)
第六章_matlab的m文件和函數(shù)句柄_第3頁(yè)
第六章_matlab的m文件和函數(shù)句柄_第4頁(yè)
第六章_matlab的m文件和函數(shù)句柄_第5頁(yè)
已閱讀5頁(yè),還剩91頁(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、第六章第六章 MATLAB的的m文件和函數(shù)句柄文件和函數(shù)句柄 matlab語(yǔ)言稱為第四代編程語(yǔ)語(yǔ)言稱為第四代編程語(yǔ)言,程序簡(jiǎn)潔、可讀性很強(qiáng)而且調(diào)試十言,程序簡(jiǎn)潔、可讀性很強(qiáng)而且調(diào)試十分容易。分容易。 是是matlab重要組成部分。重要組成部分。m文件簡(jiǎn)介文件簡(jiǎn)介v用戶如想靈活應(yīng)用用戶如想靈活應(yīng)用matlab去解決實(shí)際問(wèn)題,去解決實(shí)際問(wèn)題,充分調(diào)用充分調(diào)用matlab的科學(xué)技術(shù)資源,就需要編的科學(xué)技術(shù)資源,就需要編輯輯m文件文件v包含包含matlab語(yǔ)言代碼的文件稱為語(yǔ)言代碼的文件稱為m文件,其文件,其擴(kuò)展名為擴(kuò)展名為m。v編輯編輯m文件可使用各種文本編輯器。文件可使用各種文本編輯器。一、一、m

2、atlab的工作模式的工作模式v指令驅(qū)動(dòng)模式指令驅(qū)動(dòng)模式 通常通常matlab以指令驅(qū)動(dòng)模式工作,即在以指令驅(qū)動(dòng)模式工作,即在matlab 窗口下當(dāng)用戶輸入單行指令時(shí),窗口下當(dāng)用戶輸入單行指令時(shí),matlab 立即處理這條指令,并顯示結(jié)果,這立即處理這條指令,并顯示結(jié)果,這就是就是matlab命令行方式。命令行方式。 命令行操作時(shí),命令行操作時(shí),matlab窗口只允許一次執(zhí)行窗口只允許一次執(zhí)行一行上的一個(gè)或幾個(gè)語(yǔ)句一行上的一個(gè)或幾個(gè)語(yǔ)句。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 9x3 = 11.

3、5000 8.5000 5.5000 2.5000v在在matlab窗口輸入數(shù)據(jù)和命令進(jìn)行計(jì)算時(shí),窗口輸入數(shù)據(jù)和命令進(jìn)行計(jì)算時(shí),當(dāng)處理復(fù)雜問(wèn)題和大量數(shù)據(jù)時(shí)是不方便的。當(dāng)處理復(fù)雜問(wèn)題和大量數(shù)據(jù)時(shí)是不方便的。因此應(yīng)編輯因此應(yīng)編輯m文件。文件。命令行方式程序可讀性差,而且不能存儲(chǔ),命令行方式程序可讀性差,而且不能存儲(chǔ),對(duì)于復(fù)雜的問(wèn)題,應(yīng)編寫成能存儲(chǔ)的程序文對(duì)于復(fù)雜的問(wèn)題,應(yīng)編寫成能存儲(chǔ)的程序文件。件。vm文件模式文件模式將將matlab語(yǔ)句構(gòu)成的程序存儲(chǔ)成以語(yǔ)句構(gòu)成的程序存儲(chǔ)成以m為擴(kuò)展為擴(kuò)展名的文件,然后再執(zhí)行該程序文件,這種工名的文件,然后再執(zhí)行該程序文件,這種工作模式稱為程序文件模式。作模式稱

4、為程序文件模式。程序文件不能在指令窗口下建立程序文件不能在指令窗口下建立,因?yàn)橹噶?,因?yàn)橹噶畲翱谥辉试S一次執(zhí)行一行上的一個(gè)或幾個(gè)語(yǔ)窗口只允許一次執(zhí)行一行上的一個(gè)或幾個(gè)語(yǔ)句。句。二、m文件的創(chuàng)建v m文件的類型是普通的文本文件,我們可以使用系統(tǒng)認(rèn)可的文本文件編輯器來(lái)建立m文件。如dos下的edit,windows的記事本和word等。v具體的創(chuàng)建方法:v在matlab命令窗 口點(diǎn)擊file 菜單 new m-file編輯編輯存儲(chǔ)存儲(chǔ)2. 點(diǎn)擊點(diǎn)擊file Save Workspace As 將工作空間中的內(nèi)容存入文件。將工作空間中的內(nèi)容存入文件。3. !edit 用用dos 下下edit 編輯器

5、編制編輯器編制m文件。文件。4. edit 用用matlab自帶的編輯器編制自帶的編輯器編制m文件。文件。v m文件編輯器的設(shè)定文件編輯器的設(shè)定 m文件編輯器可自己設(shè)定,設(shè)定方法是文件編輯器可自己設(shè)定,設(shè)定方法是matlab命令窗口命令窗口 options 菜單下點(diǎn)擊菜單下點(diǎn)擊 Edit Preference 選定選定m文件編輯器。文件編輯器。m文件編輯器缺省設(shè)置是文件編輯器缺省設(shè)置是 c:windowsnotepad.exe 還可設(shè)成:還可設(shè)成:c:windowswrite.exe c: c:program fileofficewinword.exe 注意:所創(chuàng)建的注意:所創(chuàng)建的m文件必須納

6、入文件必須納入matlab搜索路搜索路 徑后,才能在徑后,才能在matlab命令窗口運(yùn)行。命令窗口運(yùn)行。 三、matlab文件的類型v數(shù)據(jù)文件數(shù)據(jù)文件 .matv mat文件是文件是matlab以標(biāo)準(zhǔn)二進(jìn)制格式保存的以標(biāo)準(zhǔn)二進(jìn)制格式保存的數(shù)據(jù)文件,可將工作空間中有用的數(shù)據(jù)變數(shù)據(jù)文件,可將工作空間中有用的數(shù)據(jù)變量保存下來(lái)。量保存下來(lái)。v mat文件的生成和調(diào)用是由函數(shù)文件的生成和調(diào)用是由函數(shù)save和和load完成的。完成的。2. m文件文件 m文件的語(yǔ)法類似于文件的語(yǔ)法類似于c語(yǔ)言,但又有其自身特語(yǔ)言,但又有其自身特點(diǎn)。它只是一個(gè)簡(jiǎn)單的點(diǎn)。它只是一個(gè)簡(jiǎn)單的ASCII碼文本文件,執(zhí)碼文本文件,執(zhí)

7、行程序時(shí)逐行解釋運(yùn)行程序,行程序時(shí)逐行解釋運(yùn)行程序,matlab是解釋是解釋性的編程語(yǔ)言。性的編程語(yǔ)言。 m文件有兩類文件有兩類獨(dú)立的獨(dú)立的m文件文件 稱命令文件稱命令文件 可調(diào)用可調(diào)用m文件文件 稱函數(shù)文件稱函數(shù)文件(1). 命令文件命令文件 簡(jiǎn)單的簡(jiǎn)單的m文件文件 命令文件實(shí)際上是一串指令的集合,與在命命令文件實(shí)際上是一串指令的集合,與在命令窗口逐行執(zhí)行文件中的所有指令,其結(jié)果令窗口逐行執(zhí)行文件中的所有指令,其結(jié)果是一樣的。沒(méi)有輸入輸出參數(shù)。是一樣的。沒(méi)有輸入輸出參數(shù)。v命令文件包括兩部分:注釋文件和程序文件命令文件包括兩部分:注釋文件和程序文件%RANKNumber of linearl

8、y independent rows or columns.%K = RANK(X) is the number of singular values of X%that 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 = m

9、ax(size(x) * max(s) * eps;endr = sum(s tol);程序部分(2).matlab內(nèi)置函數(shù)文件 matlab自定義的函數(shù)文件稱內(nèi)置函數(shù)文件 調(diào)用內(nèi)置函數(shù)的方法:使用函數(shù)名并給出相應(yīng)的入口、出口參數(shù)即可。 例如:sin.m函數(shù)用type sin查不到。 調(diào)用格式:y=sin(2*x) 實(shí)際應(yīng)用中: x=0:2*pi/180:2*pi; y=sin(2*x) plot(x,y)01234567-1-0.8-0.6-0.4-0.200.20.40.60.81(3). 函數(shù)m文件 需要輸入變量,返回輸出變量v matlab用戶可以根據(jù)需要編輯自己的m文件,它們可以像庫(kù)

10、函數(shù)一樣方便的調(diào)用,從而極大地?cái)U(kuò)展了matlab 的能力。函數(shù)函數(shù)m文件的格式:文件的格式: function 返回變量返回變量=函數(shù)名(輸入變量)函數(shù)名(輸入變量) 注釋說(shuō)明語(yǔ)句段注釋說(shuō)明語(yǔ)句段 程序語(yǔ)句段程序語(yǔ)句段特定規(guī)則:特定規(guī)則:v函數(shù)函數(shù)m文件第一行必須以單詞文件第一行必須以單詞function作為引導(dǎo)詞,作為引導(dǎo)詞,必須遵循如下形式:必須遵循如下形式: function =()vm文件的文件名必須文件的文件名必須是是 .m。v程序中的變量均為局部變量,不保存在工作空間中。程序中的變量均為局部變量,不保存在工作空間中。 其變量只在函數(shù)運(yùn)行期間有效。其變量只在函數(shù)運(yùn)行期間有效。func

11、tion Hr=exm060301(flag )% t=(0:50)/50*2*pi;x=sin(t);y=cos(t);Hr=cirline; % feval(Hr,flag,x,y,t)% function cirline(wd,x,y,t)% switch wdcase line plot(t, x, b ,t , y, r, LineWidth, 2)case circle plot(x, y, -g, LineWidth, 8), axis square offotherwise error(輸入宗量只能取輸入宗量只能取 line 或或 circle ! )endshgHH=exm0

12、60301(circle) t=0:2*pi/5:2*pi;x=cos(t);y=sin(t); % HH(circle,x,y,t)%P碼文件碼文件 pcode expcode.m %當(dāng)前目錄當(dāng)前目錄pcode expcode.m inplace %能找到的目錄能找到的目錄(4). 系統(tǒng)文件s函數(shù) 用于描述系統(tǒng)運(yùn)動(dòng)的專用函數(shù),是特殊的 m 文件。 s 函數(shù)有3類: 由simulink結(jié)構(gòu)圖自動(dòng)創(chuàng)建 可用c語(yǔ)言程序設(shè)計(jì)mex文件直 接定義 用函數(shù)m文件編寫 s函數(shù)一旦創(chuàng)建,即可在框圖中使用,也可在文件中調(diào)用。S函數(shù)的調(diào)用格式 sys, x0=sfunction( t, x, u, flag)

13、S函數(shù)與函數(shù)m文件類似,只是輸入、輸出變量是限定的。系統(tǒng)狀態(tài)狀態(tài)初值用戶定義的系統(tǒng)當(dāng)前時(shí)刻當(dāng)前狀態(tài)值當(dāng)前輸入值標(biāo)志量(5). 函數(shù)句柄 函數(shù)句柄優(yōu)點(diǎn):v方便地實(shí)現(xiàn)函數(shù)間互相調(diào)用v兼容函數(shù)加載的所有方式v拓寬子函數(shù)包括局部函數(shù)的使用范圍v提高函數(shù)調(diào)用的可靠性v減少程序設(shè)計(jì)中的冗余v提高重復(fù)執(zhí)行的效率v數(shù)組、結(jié)構(gòu)數(shù)組、細(xì)胞型數(shù)組結(jié)合定義數(shù)據(jù)函數(shù)句柄的創(chuàng)建和顯示函數(shù)句柄的創(chuàng)建和顯示 定義函數(shù)句柄的定義只需在提示符定義函數(shù)句柄的定義只需在提示符后添加相應(yīng)后添加相應(yīng)函數(shù)的函數(shù)名函數(shù)的函數(shù)名 f_h=plotf_h = plot 函數(shù)句柄的內(nèi)容通過(guò)函數(shù)句柄的內(nèi)容通過(guò)functions顯示顯示 functi

14、ons(f_h)ans = function: plot type: overloaded file: MATLAB built-in function methods: 1x1 struct matlab的函數(shù)類型的函數(shù)類型 simple 未加載的內(nèi)部函數(shù)未加載的內(nèi)部函數(shù).m文件文件 overloaded 加載的內(nèi)部函數(shù)加載的內(nèi)部函數(shù).m文件文件 subfunction 子函數(shù)子函數(shù) constructor matlab類的創(chuàng)建函數(shù)類的創(chuàng)建函數(shù) private 局部函數(shù)局部函數(shù)函數(shù)句柄的調(diào)用和操作可通過(guò)函數(shù)feval進(jìn)行函數(shù)句柄的調(diào)用 feval(函數(shù)句柄) f_h1=peaks feval

15、(f_h1) feval(函數(shù)句柄,參數(shù)列表) f_h=plot feval(f_h,0:10,0:10)函數(shù)句柄與函數(shù)名字符串轉(zhuǎn)換 func2str 函數(shù)名字符串轉(zhuǎn)換函數(shù)句柄 str2func 函數(shù)句柄轉(zhuǎn)換函數(shù)名字符串funh=str2func(det) ans= funh = det func2str(funh) ans = det四、matlab的程序結(jié)構(gòu) matlab語(yǔ)言的程序結(jié)構(gòu)與其它高級(jí)語(yǔ)言是一致的,語(yǔ)言的程序結(jié)構(gòu)與其它高級(jí)語(yǔ)言是一致的,分為順序結(jié)構(gòu),循環(huán)結(jié)構(gòu),分支結(jié)構(gòu)。分為順序結(jié)構(gòu),循環(huán)結(jié)構(gòu),分支結(jié)構(gòu)。(1).順序結(jié)構(gòu)順序結(jié)構(gòu) 依次順序執(zhí)行程序的各條語(yǔ)句依次順序執(zhí)行程序的各條語(yǔ)句

16、(2).循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu) 被重復(fù)執(zhí)行的一組語(yǔ)句,被重復(fù)執(zhí)行的一組語(yǔ)句,循環(huán)是計(jì)算機(jī)解決問(wèn)題的主要手段。循環(huán)是計(jì)算機(jī)解決問(wèn)題的主要手段。 循環(huán)語(yǔ)句主要有:循環(huán)語(yǔ)句主要有: for end語(yǔ)法為:語(yǔ)法為: for i = 表達(dá)式表達(dá)式 (表達(dá)式為一個(gè)向量)(表達(dá)式為一個(gè)向量) 可執(zhí)行語(yǔ)句可執(zhí)行語(yǔ)句 end例:利用例:利用for循環(huán)求循環(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; endsum = 153 while end 循環(huán)循環(huán) while循環(huán)將循環(huán)體中的語(yǔ)句循環(huán)執(zhí)行不定循環(huán)

17、將循環(huán)體中的語(yǔ)句循環(huán)執(zhí)行不定次數(shù)。次數(shù)。 語(yǔ)法為:語(yǔ)法為:while 表達(dá)式表達(dá)式 循環(huán)體語(yǔ)句循環(huán)體語(yǔ)句 end 表達(dá)式一般是由邏輯運(yùn)算和關(guān)系運(yùn)算以及一表達(dá)式一般是由邏輯運(yùn)算和關(guān)系運(yùn)算以及一般運(yùn)算組成的,以判斷循環(huán)的進(jìn)行和停止;般運(yùn)算組成的,以判斷循環(huán)的進(jìn)行和停止;只要表達(dá)式的值只要表達(dá)式的值 非非0,繼續(xù)循環(huán);直到表達(dá)式,繼續(xù)循環(huán);直到表達(dá)式值為值為0,循環(huán)停止。,循環(huán)停止。例:用例:用while循環(huán)求循環(huán)求1100間整數(shù)的和間整數(shù)的和 sum=0; i=1; while i, ,=, = =, = 等等 邏輯操作符邏輯操作符 &,| , 等等 邏輯函數(shù):邏輯函數(shù):isequal 若

18、是相等則為真若是相等則為真 isempty 若是空矩陣則為真若是空矩陣則為真 isstr 若是字符串則為真若是字符串則為真 xor 一真一假返回真一真一假返回真 all 全為真、全非全為真、全非0則為真則為真 any 只要有只要有1個(gè)非個(gè)非0則為真則為真例:編寫例:編寫m函數(shù),計(jì)算函數(shù)值函數(shù),計(jì)算函數(shù)值 x (x=1) 2x-1 (1x=10) x=input(input x=);if x=10 y=3*x-11else y=2*x-1endfunction exm0701_2(a , b)% This is my second example.% aDefine the limit of v

19、ariable x .% bDefine the limit of variable y .clf;x=-a:0.2:a;y=-b:0.2:b;for i=1:length(y) for j=1:length(x) if x(j)+y(i)1 z(i,j)=0.5457*exp(-0.75*y(i)2-3.75*x(j)2-1.5*x(j); elseif x(j)+y(i)=-1 z(i,j)=0.5457*exp(-0.75*y(i)2-3.75*x(j)2+1.5*x(j); else z(i,j)=0.7575*exp(-y(i)2-6.*x(j)2); end endendaxis(

20、-a,a,-b,b,min(min(z),max(max(z);colormap(flipud(winter);surf(x,y,z);shgswtich 表達(dá)式(標(biāo)量或字符串)表達(dá)式(標(biāo)量或字符串) case 1 語(yǔ)句語(yǔ)句1case 2 語(yǔ)句語(yǔ)句2otherwiseend%exswt1x=input(x=)switch xcase 2 disp(上機(jī)實(shí)習(xí)上機(jī)實(shí)習(xí))case 1 disp(聽課聽課)otherwise disp(no matlab)endtry命令命令 1 %總執(zhí)行,正確跳出結(jié)構(gòu)總執(zhí)行,正確跳出結(jié)構(gòu)catch 命令命令 2 %檢檢1錯(cuò)執(zhí)行錯(cuò)執(zhí)行catch end %再錯(cuò)結(jié)束再錯(cuò)

21、結(jié)束clear,N=4;A=magic(3);%設(shè)置設(shè)置3行行3列矩陣列矩陣A。try A_N=A(N,:),%取取A的第的第N行元素行元素catch A_end=A(end,:), %如果取如果取A(N,:)出錯(cuò),則改取出錯(cuò),則改取A的最后一行。的最后一行。endlasterr%顯示出錯(cuò)原因顯示出錯(cuò)原因 五、matlab程序流的控制 matlab的控制語(yǔ)句同c語(yǔ)言有相似之處, 但沒(méi)有c 語(yǔ)言復(fù)雜、靈活和多變。因而語(yǔ)法比較簡(jiǎn)單,容易掌握。vecho 指令 用來(lái)控制m文件在執(zhí)行過(guò)程中是否 顯示 echo on 打開所有命令文件的顯示方式 echo off 關(guān)閉所有命令文件的顯示方式 echo 在

22、以上兩者間切換 v echo對(duì)于命令文件函數(shù)文件有所不同,命令文件用法簡(jiǎn)單,函數(shù)對(duì)所有命令起作用;函數(shù)文件用法較復(fù)雜,具體請(qǐng)help查詢。 echo file on 打開file函數(shù)文件的顯示方式 echo file off 關(guān)閉file函數(shù)文件的顯示方式 echo file 切換file函數(shù)文件的顯示方式 echo on all 打開所有函數(shù)文件的顯示方式 echo off all 關(guān)閉所有函數(shù)文件的顯示方式return 被調(diào)函數(shù)終止執(zhí)行并交執(zhí)行被調(diào)函數(shù)終止執(zhí)行并交執(zhí)行權(quán)于調(diào)用函數(shù)權(quán)于調(diào)用函數(shù)vinput 提示用戶從鍵盤輸入數(shù)值、字符串、表達(dá)式。 例:n=input(How many app

23、les= )How many apples= 5n = 5n=input(How many apples=,s)How many apples= an applen =an applevkeyboard 與與input類似,功能更強(qiáng)類似,功能更強(qiáng) keyboard 調(diào)用鍵盤與調(diào)用調(diào)用鍵盤與調(diào)用m文件一樣,當(dāng)文件一樣,當(dāng)keyboard在在m文件中出現(xiàn)時(shí),它停止文件的執(zhí)行并文件中出現(xiàn)時(shí),它停止文件的執(zhí)行并控制鍵盤,用于修改程序??刂奇I盤,用于修改程序。vmenu 產(chǎn)生一個(gè)用戶可選擇輸入的菜單產(chǎn)生一個(gè)用戶可選擇輸入的菜單 格式:格式:k=menu( 標(biāo)題標(biāo)題,菜單菜單1,菜單菜單2 )vpause

24、 暫停,等待用戶響應(yīng) 可令m文件執(zhí)行暫停,并在繼續(xù)執(zhí)行前按任一個(gè)鍵 。break 中斷中斷 break 中斷中斷for, while循環(huán)語(yǔ)句的執(zhí)行,在嵌循環(huán)語(yǔ)句的執(zhí)行,在嵌套循環(huán)結(jié)構(gòu)中,套循環(huán)結(jié)構(gòu)中, break進(jìn)入最里層循環(huán)退出。進(jìn)入最里層循環(huán)退出。error warning變長(zhǎng)度輸入輸出宗量變長(zhǎng)度輸入輸出宗量varargin varargout Z = PEAKS; Z = PEAKS(N); Z = PEAKS(V); Z = PEAKS(X,Y); PEAKS; PEAKS(N); PEAKS(V); PEAKS(X,Y); X,Y,Z = PEAKS; X,Y,Z = PEAKS(N

25、); X,Y,Z = PEAKS(V);局部變量局部變量(local) 全局變量全局變量(global)不提倡不提倡使用(不利函數(shù)封裝)使用(不利函數(shù)封裝)程序調(diào)試程序調(diào)試 直接調(diào)試:分號(hào)去掉;直接調(diào)試:分號(hào)去掉;echo顯示;顯示;keyboard查詢;查詢;m函數(shù)文件放開;函數(shù)文件放開; debug調(diào)試:調(diào)試: 高手常用高手常用function nn,xx,xmu,xstd=exmdebug(x)%xmu=mean(x);xstd=std(x);nn,xx=hist(x);if nargout=0 barzzy0(nn,xx,xmu,xstd) %endfunction barzzy0(n

26、n,xx,xmu,xstd)%clf,bar(xx,nn);hold onYlimit=get(gca,YLim);yy=0:Ylimit(2);% xxmu=xmu*ones(size(yy); xxmu=xmu*size(yy); xxL=xxmu/xmu*(xmu-xstd);xxR=xxmu/xmu*(xmu+xstd);plot(xxmu,yy,r,Linewidth,3) %plot(xxL,yy,rx,MarkerSize,8)plot(xxR,yy,rx,MarkerSize,8),hold offrandn(seed,1);x=randn(1,100);exmdebug(x)

27、xxmu=xmu*ones(size(yy)六、文件操作 matlab文件輸入、輸出(文件輸入、輸出(I/O)函數(shù)允許把其它格)函數(shù)允許把其它格式的數(shù)據(jù)文件直接讀進(jìn)式的數(shù)據(jù)文件直接讀進(jìn)matlab,它是以,它是以c語(yǔ)言文語(yǔ)言文件件I/O函數(shù)為基礎(chǔ)的。函數(shù)為基礎(chǔ)的。v打開和關(guān)閉文件(打開和關(guān)閉文件(fopen, fclose)v 格式:格式:fid=fopen(數(shù)據(jù)文件數(shù)據(jù)文件,r)v r 讀讀v w 寫寫v a 附加附加1. r+ 讀寫讀寫v文件一旦打開,即可進(jìn)行讀寫操作。 sta=fclose(fid) 關(guān)閉上述打開文件 sta=fclose(all) 關(guān)閉所有打開的文件v與save,loa

28、d類似,是matlab專用數(shù)據(jù)文件讀寫工具(*.mat)。2. 讀寫二進(jìn)制數(shù)據(jù)文件 fread, fwrite 可讀寫數(shù)據(jù)文件,文本文件。例:fid=fopen(user.dat,r) a=fread(fid,50) sta=fclose(fid)strcount(poem,an)查找字符串查找字符串函數(shù):函數(shù):fgetl fgets(不包括換行符)不包括換行符)讀取有格式文件讀取有格式文件strcount.mfunction y=strcount(filename,str)%尋找指定字符串在文件中出現(xiàn)的次數(shù)尋找指定字符串在文件中出現(xiàn)的次數(shù)fid=fopen(filename,rt);y=0;

29、 while feof(fid)=0 line=fgetl(fid); matches=findstr(line,str); num=length(matches); if num0 y=y+num; fprintf(1,%d:%sn,num,line); end endfclose(fid)fil.txtOranges and les,Orangutans and monkeys,Dragon or fleas.fscanf 不用循環(huán),自動(dòng)完成不用循環(huán),自動(dòng)完成 %s 字符串字符串 %d 十進(jìn)制十進(jìn)制 %g雙精度浮點(diǎn)雙精度浮點(diǎn)% exfscanf1.mfid=fopen(test.dat,r

30、);mydata=fscanf(fid,%g);pause,fseek(fid,0,bof) %指針?lè)祷刂羔樂(lè)祷豰ydata33=fscanf(fid,%g,3,3);pause,fseek(fid,0,bof) %指針?lè)祷刂羔樂(lè)祷豰ydata43=fscanf(fid,%g,4,3);f=fclose(fid);%exfscanf.mfid=fopen(magic1.dat,r);mydata=fscanf(fid,%g);f=fclose(fid)fid=fopen(magic1.dat,r);mydata,count=fscanf(fid,%g,3 3);f=fclose(fid)fpr

31、intf 寫入文本文件,不用循環(huán),自動(dòng)完成寫入文本文件,不用循環(huán),自動(dòng)完成 %s 字符串字符串 %d 十進(jìn)制十進(jìn)制 %g雙精度浮點(diǎn)雙精度浮點(diǎn)sprintf 寫入字符串寫入字符串exsprintf寫入有格式文件寫入有格式文件x=1:5;y=x;x.2;fid=fopen(st.dat,w);t=fprintf(fid,Square Function nn);c=fprintf(fid,%5d %5dn,y)fclose(fid)sprintf 寫入字符串寫入字符串rt=sprintf(The square root of %f is %d10.8e.n,2,sqrt(2)七、應(yīng)用程序接口 應(yīng)用程

32、序接口是matlaab的附加組件。是一個(gè)由相關(guān)函數(shù)組成的接口函數(shù)庫(kù),可實(shí)現(xiàn)與外部程序的交互。vMEX文件:是matlab環(huán)境下調(diào)用C、FORTRAN 語(yǔ)言編寫的應(yīng)用程序模塊。vmatlab 計(jì)算引擎:在使用C、FORTRAN編程時(shí) 可調(diào)用matlab函數(shù)庫(kù)進(jìn)行計(jì)算。vMAT文件:實(shí)現(xiàn)matlab與C、FORTRAN語(yǔ)言程序間的 數(shù)據(jù)交換八、matlab編譯matlab編譯的原因:1. 提高運(yùn)算速度2. 隱藏特定算法3. 可產(chǎn)生獨(dú)立的m文件matlab編譯函數(shù):mccmcc -x *.m circle_f.m 觀察產(chǎn)生的新文件觀察產(chǎn)生的新文件 MATLAB編譯器編譯器 對(duì)對(duì)MATLAB產(chǎn)生了新的

33、期望:產(chǎn)生了新的期望: 一一 希望程序能運(yùn)行得更快;希望程序能運(yùn)行得更快; 二二 希望獲得可擺脫希望獲得可擺脫MATLAB環(huán)境而獨(dú)立運(yùn)行環(huán)境而獨(dú)立運(yùn)行的可執(zhí)行軟件。的可執(zhí)行軟件。編譯器的功能編譯器的功能 編譯器的局限性編譯器的局限性MCCMCC 幾種調(diào)用格式幾種調(diào)用格式MCC 幾種調(diào)用格式幾種調(diào)用格式編譯器宏選項(xiàng)功能一覽表編譯器宏選項(xiàng)功能一覽表v函數(shù)的定義及申明 - 使用方式: 調(diào)用/嵌套 - 協(xié)作方式: 主函數(shù)/子函數(shù)/嵌套函數(shù) - 內(nèi)部變量: 生存周期控制v控制語(yǔ)句 - if /if-else/if-elseif-else - switch-case - for/while if 語(yǔ)句一般

34、形式 if logical_expression block of statements elseif logical_expression block of statements else block of statements end例例 輸入三角形的三條邊,求面積。輸入三角形的三條邊,求面積。 A=input(請(qǐng)輸入三角形的三條邊:請(qǐng)輸入三角形的三條邊:); if A(1)+A(2)A(3) & A(1)+A(3)A(2) & A(2)+A(3)A(1) p=(A(1)+A(2)+A(3)/2; s=sqrt(p*(p-A(1)*(p-A(2)*(p-A(3); disp

35、(s); else disp(不能構(gòu)成一個(gè)三角形。不能構(gòu)成一個(gè)三角形。) end運(yùn)行:運(yùn)行: 請(qǐng)輸入三角形的三條邊:請(qǐng)輸入三角形的三條邊:4 5 6 9.9216選擇結(jié)構(gòu)選擇結(jié)構(gòu)【例】【例】 輸入一個(gè)字符,若為大寫字母,則輸出其后繼字輸入一個(gè)字符,若為大寫字母,則輸出其后繼字符,若為小寫字母,則輸出其前導(dǎo)字符,若為其他字符符,若為小寫字母,則輸出其前導(dǎo)字符,若為其他字符則原樣輸出。則原樣輸出。c=input(,s); if c=A & c=a& c=z disp(setstr(abs(c)-1); else disp(c); end switch 語(yǔ)句 一般形式 switch

36、expression case value1, block of statements case value2, block of statements . otherwise, block of statements end【例】【例】 根據(jù)變量根據(jù)變量 num 的值來(lái)決定顯示的內(nèi)容。的值來(lái)決定顯示的內(nèi)容。 num=input(請(qǐng)輸入一個(gè)數(shù)請(qǐng)輸入一個(gè)數(shù)); switch num case -1 disp(I am a teacher.); case 0 disp(I am a student.); case 1 disp(You are a teacher.); otherwise disp

37、(You are a student.); end - 循環(huán)結(jié)構(gòu) 根據(jù)條件重復(fù)執(zhí)行程序指令或模塊 for 語(yǔ)句 % 計(jì)數(shù)循環(huán) 一般形式 for index = expression block of statements end while 語(yǔ)句 一般形式 while expression block of statements end循環(huán)的嵌套循環(huán)的嵌套如果一個(gè)循環(huán)結(jié)構(gòu)的循環(huán)體又包括一個(gè)如果一個(gè)循環(huán)結(jié)構(gòu)的循環(huán)體又包括一個(gè)循環(huán)結(jié)構(gòu),就稱為循環(huán)的嵌套,或稱為多循環(huán)結(jié)構(gòu),就稱為循環(huán)的嵌套,或稱為多重循環(huán)結(jié)構(gòu)。重循環(huán)結(jié)構(gòu)。多重循環(huán)的嵌套層數(shù)可以是任意的??啥嘀匮h(huán)的嵌套層數(shù)可以是任意的??梢园凑涨短?/p>

38、層數(shù),分別叫做二重循環(huán)、三以按照嵌套層數(shù),分別叫做二重循環(huán)、三重循環(huán)等。處于內(nèi)部的循環(huán)叫作內(nèi)循環(huán),重循環(huán)等。處于內(nèi)部的循環(huán)叫作內(nèi)循環(huán),處于外部的循環(huán)叫作外循環(huán)。處于外部的循環(huán)叫作外循環(huán)?!纠?求100,1000以內(nèi)的全部素?cái)?shù)。 n=0; for m=100:1000 flag=1; j=m-1; i=2; while i=j & flag if rem(m,i)=0 flag=0; end i=i+1; end if flag n=n+1; prime(n)=m; end end prime %變量prime存放素?cái)?shù)循環(huán)中斷控制: while 語(yǔ)句實(shí)例 x = rand(1,10);

39、 k = 1; while k0.8 break end k = k + 1; end函數(shù)返回控制: while 語(yǔ)句實(shí)例 x = rand(1,10); k = 1; while k0.8 return end k = k + 1; end plot(t,y(:,1),t,y(:,2),-,t,y(:,3),.-,t1 t1,-100 100,k:); datetick(x,dd/mm,keeplimits); axis tight; title(mybirthday); legend(Physical,Emotional,Intellectual); xlabel(timedd/mm);

40、ylabel(biorythm index %)用戶參數(shù)交互輸入 參數(shù)的作用: 使程序更加通用靈活 參數(shù)輸入的主要模式 - input 函數(shù)輸入?yún)?shù) - keyboard函數(shù) (鍵盤模式) - menu 函數(shù) (菜單模式) 鍵盤輸入模式 基本格式: v= input( 顯示的提示信息 ); 功能實(shí)現(xiàn): 向用戶顯示提示信息 將用戶的輸入賦給v 使用實(shí)例 freq=input(frequence is) 結(jié)果 frequence is (等待鍵盤輸入, 回車確認(rèn)輸入完成 ) 鍵盤控制模式 基本格式: keyboard; 功能實(shí)現(xiàn): 臨時(shí)終止程序執(zhí)行 將控制權(quán)交給命令窗口 利用回車結(jié)束鍵盤控制 使用實(shí)例 查詢/修改函數(shù)工作空間的變量 建立新的函數(shù)空間的變量菜單輸入模式 基本格式: item_no=menu(title,item1,itemn); 功能實(shí)現(xiàn): 顯示菜單 用戶選擇按鈕 返回菜單序號(hào)

溫馨提示

  • 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)論