《MATLAB7 基礎(chǔ)教程》課件第5章_第1頁
《MATLAB7 基礎(chǔ)教程》課件第5章_第2頁
《MATLAB7 基礎(chǔ)教程》課件第5章_第3頁
《MATLAB7 基礎(chǔ)教程》課件第5章_第4頁
《MATLAB7 基礎(chǔ)教程》課件第5章_第5頁
已閱讀5頁,還剩156頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

5.1M文件介紹

5.2程序流程控制

5.3數(shù)據(jù)輸入/輸出

5.4程序調(diào)試與優(yōu)化

5.1.1腳本和函數(shù)

1.腳本文件

腳本文件中沒有輸入或輸出參量,因而它是最簡單的M文件類型。當(dāng)運行一個腳本文件時,MATLAB將逐行執(zhí)行文件內(nèi)的每條指令。它對工作區(qū)間的數(shù)據(jù)進行操作,或者創(chuàng)建新的數(shù)據(jù)并保存到工作區(qū)間,而且在運行結(jié)束后數(shù)據(jù)仍然存在。需要注意的是,腳本的運行有可能覆蓋工作區(qū)間原本需要保留的數(shù)據(jù)。下面給出一個腳本文件創(chuàng)建和運行的例子。5.1M文件介紹創(chuàng)建一個M文件,輸入如下代碼并保存為plotstems.m:

%AnM-filescript %Commentlines

n=0:20; %Computations

stems1(1,:)=sin(2*pi/21*n);

stems1(2,:)=cos(2*pi/21*n);

stems1(3,:)=exp(-0.2*n);fork=1:3

stem(n,stems1(k,:),'full')%Graphicsoutput

pause

end

在命令窗輸入:

>>plotstems

運行結(jié)果如圖5-1所示。圖5-1使用腳本文件繪圖結(jié)果

2.函數(shù)文件

函數(shù)文件是含有輸入和輸出參量的M文件,它在自己的工作區(qū)間(函數(shù)工作區(qū)間)內(nèi)對變量進行操作。函數(shù)工作區(qū)間與MATLAB工作空間不同,它只在函數(shù)內(nèi)部傳遞變量而且不會互相覆蓋。

MATLAB的函數(shù)文件通常由以下部分組成:

●函數(shù)定義行;

●?H1行:幫助文本的第一行,以“%”開始;

●幫助文本;

●注釋;

●函數(shù)體。例如,對于一個名為fact.m的計算n階乘的函數(shù)文件,其各組成部分描述如下:

functionf=fact(n) 函數(shù)定義行

%Computeafactorialvalue.

H1行

%FACT(N)returnsthefactorialofN, 幫助文本

%usuallydenotedbyN!

%Putsimply,FACT(N)isPROD(1:N). 注釋

f=prod(1:n); 函數(shù)體如果要計算4!,在命令窗輸入:

>>fact(4)

運行結(jié)果:

ans=

245.1.2P代碼文件

對于一個函數(shù)或者腳本M文件,可以對其進行預(yù)解析,即由M文件創(chuàng)建對應(yīng)的P代碼文件。例如,使用命令pcodefact對M文件fact.m進行解析,生成偽代碼并保存為fact.p文件。如果同時存在fact.m和fact.p兩個文件,MATLAB則優(yōu)先運行fact.p文件。由于P代碼文件是M文件經(jīng)過解析的結(jié)果,因此它的運行速度要比M文件快。在運行運算量巨大的程序時這種差距尤為顯著,例如大型的圖形用戶界面(GUI)應(yīng)用。另外,P代碼文件還能夠隱藏程序的算法,這是M文件所不能實現(xiàn)的。5.1.3變量類型

編寫M文件時,所要用到的變量不需要預(yù)先定義。變量名必須以字母開頭,其后可以是字母、數(shù)字或下劃線。變量名的大小寫是有區(qū)別的,并且不能與函數(shù)名或者MATLAB中的關(guān)鍵字重名。

MATLAB中有三種變量類型:局部變量、全局變量和持續(xù)變量。

1.局部變量

局部變量存在于MATLAB函數(shù)之中,只在它所在的函數(shù)內(nèi)有效(嵌套函數(shù)除外),并且與MATLAB工作區(qū)間相互獨立。除了全局變量或持續(xù)變量,一個函數(shù)內(nèi)定義的變量在調(diào)用另一個函數(shù)時不會在內(nèi)存中保留,它也不會覆蓋MATLAB工作區(qū)間內(nèi)的變量。

2.全局變量

全局變量是由global關(guān)鍵字定義在MATLAB函數(shù)之中,并可以與其他函數(shù)或命令共享的變量。例如,在一個名為add3.m的M文件函數(shù)內(nèi),存在兩個全局變量a、b:

functiony=add3(x)

globalab

y=a+b+x;運行該函數(shù)之前,需要對全局變量進行聲明,在命令窗輸入:

>>globalab

>>a=1;

>>b=2;

>>add3(3)

運行結(jié)果:

ans=

6

3.持續(xù)變量

持續(xù)變量只能在M文件函數(shù)內(nèi)聲明和使用,由關(guān)鍵字persistent來定義。只有聲明了該變量的函數(shù)才可以對其進行訪問。如果函數(shù)存在,即使MATLAB再調(diào)用其他函數(shù),該函數(shù)內(nèi)的持續(xù)變量仍將保留于內(nèi)存中。例如,在一個名為findSum.m的M文件函數(shù)內(nèi),存在一個持續(xù)變量SUM_X:

functionfindSum(inputvalue)

persistentSUM_X

ifisempty(SUM_X)

SUM_X=0;

end

SUM_X=SUM_X+inputvalue第一次調(diào)用findSum函數(shù)時(如findSum(3)),計算得到的SUM_X的值等于函數(shù)的輸入?yún)⒘颗c原始SUM_X(SUM_X=0)相加之和。

>>findSum(3)

SUM_X=

3

再次調(diào)用findSum函數(shù)時,由于SUM_X是持續(xù)變量,第一次的計算結(jié)果(SUM_X=3)將仍舊存在,故計算得到的SUM_X的值等于函數(shù)的輸入?yún)⒘颗c現(xiàn)在的SUM_X(SUM_X=3)相加之和。

>>findSum(3)

SUM_X=

6

如此往復(fù),SUM_X的值將反復(fù)與輸入?yún)⒘窟M行疊加。

>>findSum(3)

SUM_X=

9

…5.1.4關(guān)鍵字和特殊值

1.關(guān)鍵字

MATLAB中定義了一些關(guān)鍵字,在定義變量名時不能與之重名。通過iskeyword命令可以查看MATLAB中定義的所有關(guān)鍵字。

>>iskeyword

ans=

‘break’

‘case’

‘catch’

'classdef''continue'

'else'

'elseif'

'end'

'for'

'function'

'global'

'if‘

'otherwise'

‘parfor’

‘persistent’

‘return’

‘switch’

‘try’

‘while’

2.特殊值

MATLAB中定義了一些具有特殊值的變量,如表5-1所示。與關(guān)鍵字不同,定義與這些特殊值重名的變量相當(dāng)于修改這些特殊值。表5-1特殊值5.1.5符號參考

在M文件編程中,經(jīng)常要用到一些特殊的符號。本小節(jié)將對所有特殊符號(不包括算術(shù)、關(guān)系和邏輯運算符)進行歸納,作為編程的參考。

1.星號——*

星號通常用在文件操作中,作為文件名或路徑名的通配符,可以代表一個或多個字符。例如,命令dir('Untitled*.m')將羅列所有當(dāng)前路徑下以Untitled開頭且擴展名為?.m的文件。

2.“猴頭”——@

“猴頭”可以作為構(gòu)成一般函數(shù)或匿名函數(shù)句柄的運算符,也可以作為MATLAB類路徑的標(biāo)志符:

●構(gòu)成函數(shù)句柄,如fhandle=@plot、fhandle=@(x)2*x^2。

●類路徑標(biāo)志符,如\@myclass\get.m。

3.冒號——:

冒號是產(chǎn)生數(shù)值序列的運算符,常用于數(shù)組的創(chuàng)建和索引,在第2章中已作過闡述。另外,利用冒號可以將一個數(shù)組轉(zhuǎn)化為列向量。

【例】數(shù)組轉(zhuǎn)化列向量。

在命令窗輸入:

>>A=magic(3),B=A(:)

運行結(jié)果:

A=

816

357

492B=

8

3

4

1

5

9

6

7

2

利用冒號還可以在不改變已有數(shù)組形狀的前提下對數(shù)組進行賦值。

【例】保留數(shù)組形狀并賦值。

在命令窗輸入:

>>A=magic(3),A(:)=1:9

運行結(jié)果:

A=

816

357

492

A=

147

258

369

4.逗號——,

逗號用于分隔以下幾種類型的元素:

●分隔矩陣的行元素,如A=[3.25,8.32,6.78]。

●分隔數(shù)組的索引,如X=A(2,1,3)。

●分隔函數(shù)輸入或輸出參量,如function[data,text]=

xlsread(file,sheet,range,mode)。

●分隔一行內(nèi)的命令或語句并顯示運行結(jié)果,如fork=1:3,sum(A(k)),end。

5.大擴號——{}

大括號用于單元數(shù)組的創(chuàng)建和索引:

●創(chuàng)建單元數(shù)組,如C={[3419],magic(4),‘Cstr’}。

●索引單元數(shù)組,如A=C{1,1,2}。

6.單點號——.

單點號可用于結(jié)構(gòu)的字段定義或?qū)ο蠓椒ǖ姆诸惙?/p>

●定義結(jié)構(gòu)字段,如funds(2,3).bondtype=‘Corporate’。

●指定對象屬性,如val=asset.current_value。

7.雙點號——..

雙點號用于表示上一級目錄,如當(dāng)前路徑為F:\matlab\work,命令cd..\bin則設(shè)置當(dāng)前路徑為F:\matlab\bin。

8.省略號——

省略號由三個點號構(gòu)成,是MATLAB中的續(xù)行符。當(dāng)一行語句過長時,可以在其后加省略號并在下一行續(xù)行書寫。

9.點圓擴號——.()

點圓括號常用于指定動態(tài)結(jié)構(gòu)的字段名。如type=funds(3,2).(fundtype)指定的fundtype就是動態(tài)的字段名。

10.嘆號——!

嘆號用于執(zhí)行需要在MATLAB中執(zhí)行的系統(tǒng)命令,如命令?!regedit將打開系統(tǒng)注冊表。

11.圓擴號——()

圓括號常用于數(shù)組的索引(見第2章),或用于指定函數(shù)的輸入?yún)?shù),如functiondydt=odefun(t,y)。

12.百分號——%

百分號主要用于注釋一行程序,有時也用于分類符的轉(zhuǎn)換,如sprintf('%s=%d',name,value)。

13.百分擴號——%{%}

百分括號用于注釋一段程序,被注釋的段程序以?%{?開頭,以?%}?結(jié)束。

14.分號——;

分號用于創(chuàng)建數(shù)組、抑制MATLAB輸出或分隔一行內(nèi)的命令或語句:

●分隔矩陣的行,如A=[3,2;3,1]。

●抑制輸出,即語句末尾存在分號時將不顯示該語句的運行結(jié)果。

●分隔一行內(nèi)的命令或語句,如A=1;B=4,C=3;將只顯示B的結(jié)果。

15.單引號——

單引號用于創(chuàng)建字符數(shù)組,如Str=‘Word’。

16.空格符——

空格符用于分隔以下幾種元素:

●分隔矩陣的行元素,如A=[583]。

●分隔函數(shù)的輸入?yún)⒘?,如function[datatext]=xlsread(file,sheet,range,mode)。

17.斜杠與反斜杠——/?\

斜杠或反斜杠用于分隔表示路徑的字符。在Windows系統(tǒng)的路徑表示中,斜杠與反斜杠的作用是相同的;在UNIX系統(tǒng)中,只能用斜杠來表示路徑。

18.中擴號——[]

中括號有以下幾種用途:

●創(chuàng)建數(shù)組,如A=[342;245]。

●串接數(shù)組,如A=[eye(6),magic(6)]。

●函數(shù)的聲明和調(diào)用,將返回值包括在中括號內(nèi),如[data,text]=xlsread(file,sheet,range,mode)。5.2.1條件控制語句

條件控制語句用于實現(xiàn)根據(jù)條件選擇需要執(zhí)行的程序。如果基于一個條件的真或假來選擇執(zhí)行某段程序,則使用if語句;如果要根據(jù)多種可能存在的條件來選擇執(zhí)行某段程序,則使用switch語句。

1.if語句

if語句的一般調(diào)用格式為

if條件表達式1

語句體15.2程序流程控制

elseif條件表達式2

語句體2

elseif條件表達式3

語句體3

else

語句體n

end

如果if或者某個elseif之后的條件表達式為真,則執(zhí)行該if或者elseif之下的語句體;如果if以及所有elseif之后的條件表達式為假,則執(zhí)行else之下的語句體。if語句中,可以沒有elseif條件或者else條件,但是必須有if條件。

【例】

檢測輸入值是否為?-1、0、1。

在命令窗輸入:

>>input=1;

>>ifinput==-1

disp(‘negativeone’);

elseifinput==0

disp(‘zero’);

elseifinput==1

disp(‘positiveone’);

else

disp(‘othervalue’);

end運行結(jié)果:

positiveone

2.switch語句

switch語句的一般調(diào)用格式為

switch 表達式

case 表達式取值1

語句體1

case 表達式取值2

語句體2

otherwise

語句體n

end

當(dāng)switch后的表達式取值為某個case之后的取值時,程序?qū)?zhí)行該case之下的語句體。如果找到第一個滿足表達式取值的case,其他的case語句將不再執(zhí)行;如果沒有滿足表達式取值的case,則執(zhí)行otherwise之下的語句體。

【例】

檢測輸入值是否為?-1、0、1。

在命令窗輸入:

>>input=1;

>>switchinput

case-1

disp(‘negativeone’);

case0

disp('zero');case1

disp(‘positiveone’);

otherwise

disp(‘othervalue’);

end

運行結(jié)果:

positiveone5.2.2循環(huán)控制語句

循環(huán)控制語句用于重復(fù)執(zhí)行某段程序代碼,可用通過循環(huán)條件來控制循環(huán)的次數(shù)。MATLAB的循環(huán)控制語句有for語句和while語句。

1.for語句

for語句按照預(yù)先指定好的循環(huán)次數(shù)執(zhí)行一條語句或語句體,其常用調(diào)用格式為

forindex=start1:increment1:end1

語句體

end其中,start1為起始值,increment1為步進值,end1為結(jié)束值,循環(huán)次數(shù)為1+[(end1-start1)/increment](中括號[]為向零取整運算)。

【例】

計算4!。

在命令窗輸入:

>>x=1;

>>fori=1:1:4

x=x*i;

end

>>x運行結(jié)果:

x=

24

此外還有一種for語句格式,以矩陣A的列階數(shù)作為循環(huán)次數(shù)。

fork=A

語句體

end

2.while語句

如果while語句之后的表達式為真,while語句將始終執(zhí)行,其常用的調(diào)用格式為

while 表達式

語句體

end

【例】

計算4!。在命令窗輸入:

>>i=0;

>>x=1;

>>whilei<4

i=i+1;

x=i*x;

end

x運行結(jié)果:

x=

24

while語句也可以是關(guān)于矩陣或數(shù)組的表達式,但在這種情況下當(dāng)所有元素全部為真時表達式才為真。

3.continue語句

continue語句的作用是結(jié)束本次for或while循環(huán)(即跳過循環(huán)體內(nèi)該語句之后的所有語句),直接進入下一個循環(huán)的執(zhí)行判斷。

【例】顯示magic.m文件行數(shù)。

在命令窗輸入:

>>fid=fopen(‘magic.m’,‘r’);

count=0;

while~feof(fid)

line=fgetl(fid);

ifisempty(line)|strncmp(line,'%',1)continue

end

count=count+1;

end

disp(sprintf(‘%dlines’,count));

運行結(jié)果:

25lines

4.break語句

break語句的作用是終止for或while循環(huán),即只跳出本層循環(huán),而不跳出外層循環(huán)。

【例】顯示magic.m文件幫助。

在命令窗輸入:

>>fid=fopen(‘magic.m’,‘r’);

s=‘’;

while~feof(fid)

line=fgetl(fid);

ifisempty(line)break

end

s=strvcat(s,line);

end

disp(s)運行結(jié)果:

functionM=magic(n)

%MAGICMagicsquare.

%MAGIC(N)isanN-by-Nmatrixconstructedfromtheintegers

%1throughN^2withequalrow,column,anddiagonalsums.

%ProducesvalidmagicsquaresforallN>0exceptN=2.5.2.3錯誤控制語句

錯誤控制語句try-catch-end的作用是在try之下的一個語句出現(xiàn)錯誤時跳出該語句體并執(zhí)行catch語句體,其基本調(diào)用格式為

try

語句體1

catch

語句體2

end

使用lasterr函數(shù)可以查詢最后的錯誤信息,查詢結(jié)果為空字符串時表示語句體1成功執(zhí)行。

【例】錯誤控制判斷。

在命令窗輸入:

>>n=4;

A=eye(3);

try

an=A(n,:),

catch

an=A(end,:),

end

lasterr運行結(jié)果:

an=

001

ans=

Indexexceedsmatrixdimensions.5.2.4程序終止語句

程序終止語句return用于終止當(dāng)前的命令序列并返回正在被調(diào)用的函數(shù),也可以用于終止keyboard方式。例如計算行列式的函數(shù)det.m中,利用程序終止語句return對于輸入矩陣為空的情況做了如下處理(即令空矩陣的行列式值為1并返回該函數(shù)):

functiond=det(A)

%DETdet(A)isthedeterminantofA.

ifisempty(A)

d=1;

return

else

...

end

MATLAB提供了一系列用于文件輸入/輸出(I/O)的底層函數(shù),這些函數(shù)是基于ANSI標(biāo)準(zhǔn)C語言I/O函數(shù)的。對文件進行底層I/O操作時,一般有以下三個步驟:

(1)打開文件;

(2)讀寫數(shù)據(jù);

(3)關(guān)閉文件。

本節(jié)將主要介紹MATLAB的文件操作的三個步驟及需要用到的函數(shù)。5.3數(shù)據(jù)輸入/輸出5.3.1打開文件

對文件進行讀寫操作以前必須先打開文件。MATLAB的fopen函數(shù)用于打開文件,其調(diào)用格式如下:

fid=fopen(‘filename’,‘permission’)

其中參數(shù)filename為要打開的文件名,也可以在這個參數(shù)中指定文件的路徑信息。permission指定要對文件進行操作的方式,可以為以下任一字符串?!?‘r’:只讀方式。

●?‘w’:只寫方式。該方式將覆寫原有文件內(nèi)容,若文件不存在,則生成新文件。

●?‘a(chǎn)’:追加方式。保留原有文件內(nèi)容,在文件尾追加寫入數(shù)據(jù)。

●?‘r+’:可讀可寫方式。

●?‘w+’:清除文件內(nèi)容或創(chuàng)建文件用于文件讀寫。

●?'a+':可讀、追加方式。如果文件不存在,則創(chuàng)建該文件?!?‘W’:寫文件,寫的過程中不自動刷新文件內(nèi)容,當(dāng)關(guān)閉文件時保存所寫數(shù)據(jù)。

●?‘A’:以追加方式寫文件,過程中不自動刷新文件內(nèi)容,當(dāng)關(guān)閉文件時保存所寫數(shù)據(jù)。

通常情況下fopen默認以二進制方式打開文件,可以在permission后加?'b'?來顯式說明。若要以文本的方式打開文件,則給permission后加?'t'。如?'rb'?表示以二進制只讀方式打開文件,'w+t'?表示以文本可讀可寫方式打開文件。在UNIX系統(tǒng)上,文本和二進制方式并無區(qū)別,因此不用考慮加?'b'?加?'t'?的問題。

fid為fopen返回的一個文件標(biāo)識符(fileidentifier)。fid為1表示標(biāo)準(zhǔn)輸出,為2表示標(biāo)準(zhǔn)錯誤。若文件打開失敗,則fid為-1,并且可以返回一個錯誤消息。下面給出一個打開文件的例子。

【例】

打開文件。在命令窗輸入:

>>fid=0;

whilefid<1

filename=input(‘Openfile:’,‘s’);

[fid,message]=fopen(filename,‘r’);

iffid==-1

disp(message)

end

end命令窗中將顯示:

Openfile:

如果輸入一個不存在的文件nofile.txt:

Openfile:nofile.txt

運行結(jié)果:

Nosuchfileordirectory

如果不輸入任何文件名:

Openfile:運行結(jié)果:

Cannotopenfile.Existence?Permissions?Memory?...

如果輸入正確的文件名existfile.txt(假設(shè)文件existfile.txt存在于當(dāng)前路徑):

Openfile:existfile.txt

則命令窗內(nèi)不出現(xiàn)任何消息。5.3.2讀寫操作

1.讀寫二進制文件

fread函數(shù)用于讀取二進制文件,其基本調(diào)用格式為

A=fread(fid)

其中A為讀取數(shù)據(jù)返回的矩陣。

【例】讀取二進制文件。創(chuàng)建一個二進制文件char.bin,其內(nèi)容如下:

TEST

R5Y

在命令窗輸入:

>>fid=fopen(‘char.bin’,‘r’);

A=fread(fid)‘

fclose(fid);運行結(jié)果:

A=

846983841310825389

繼續(xù)在命令窗輸入:

>>disp(char(A));

運行結(jié)果:

TEST

R5Y

A=fread(fid,SIZE)表示讀取fid所標(biāo)識的文件,從當(dāng)前文件指針?biāo)肝恢瞄_始的前SIZE個字節(jié)。打開文件后,文件指針的位置最初位于文件開始處。其中SIZE可以為以下任意一種格式:

●?N:讀取前N個字節(jié),返回一個列向量。

●?inf:讀至文件尾部。

●?[M,N]:至多讀取M×N個數(shù)據(jù)到一個M×N的矩陣A中。按列順序?qū)?shù)據(jù)讀取到矩陣A中,不足的部分補零。N可以為inf,M不可以為inf。

A=fread(fid,SIZE,PRECISIOSIZE)表示讀取SIZE個PRECISIOSIZE字長的數(shù)據(jù)到

矩陣A中,其中SIZE為可選參數(shù),PRECISIOSIZE一般為一個表示數(shù)據(jù)類型的字符串,默認情況下為?‘uint8’。表5-2列出了可以作為PRECISIOSIZE參數(shù)的字符串,其中不論

是MATLAB還是相應(yīng)的C或Fortran語言的數(shù)據(jù)類型,都可以作為PRECISIOSIZE參數(shù)。

表5-3列出的字符串同樣可用,但是在不同平臺上它們的大小會有差異。表5-2通用精度類型表5-3與平臺有關(guān)的精度類型默認情況下fread返回的是一個double類型的矩陣,在PRECISIOSIZE參數(shù)中可以指定返回矩陣的數(shù)據(jù)類型:

‘source1=>source2’

該命令表示讀入的源數(shù)據(jù)格式為source1,返回的目的數(shù)據(jù)格式為source2。如果source1與source2相同,則該命令可以簡寫為

*source1例如:

‘uint8=>uint8’:以8位整數(shù)讀入數(shù)據(jù),并將其保存在一個8位整數(shù)的矩陣中。

‘*uint8’:上面格式的簡寫形式,等價于?‘uint8=>uint8’。

‘bit4=>int8’:以4位整數(shù)讀入數(shù)據(jù),并將其保存在一個8位有符號整數(shù)矩陣中。每4位整數(shù)變成一個8位整數(shù)。

'double=>real*4':以double型讀入數(shù)據(jù),并將其保存在一個32位浮點數(shù)矩陣中。

【例】以特定數(shù)據(jù)類型讀取二進制文件。

仍以文件char.txt為例,在命令窗輸入:

>>fid=fopen(‘char.bin’,‘r’);

A=fread(fid,‘uint8=>char’)‘

fclose(fid);

運行結(jié)果:

A=

TEST

R5Y

fread函數(shù)還可以指定在讀取過程中跳躍的字節(jié)數(shù),其調(diào)用格式為

A=fread(fid,SIZE,PRECISIOSIZE,SKIP)

其中SIZE為可選參數(shù),SKIP為跳躍的字節(jié)數(shù)。

【例】字節(jié)跳躍讀取二進制文件。

在命令窗輸入:

>>fid=fopen(‘char.bin’,‘r’);

A=fread(fid,‘uint8=>char’,1)‘

fclose(fid);運行結(jié)果:

A=

TS

RY

使用fwrite函數(shù)可將二進制文件寫到文件中,其調(diào)用格式如下:

●?count=fwrite(fid,A):將矩陣A中的元素寫入到fid所標(biāo)識的文件中去。count表示已經(jīng)成功寫入元素的數(shù)目?!?count=fwrite(fid,A,PRECISION):以指定的數(shù)據(jù)精度PRECISION,將矩陣A中的元素寫入fid所標(biāo)識的文件中。PRECISION如表5-2所示。

●?count=fwrite(fid,A,PRECISION,SKIP):以指定的數(shù)據(jù)精度PRECISION,指定的跳躍數(shù)SKIP,將矩陣A中的元素寫入到fid所標(biāo)識的文件中。當(dāng)PRECISION為?'bitN'?或?'ubitN'時,SKIP為跳躍的位數(shù),其他情況為跳躍的字節(jié)數(shù)。

2.讀寫文本文件

fgetl函數(shù)和fgets函數(shù)常用于文本文件的讀取。

fgetl函數(shù)用于返回下一行文本的字符串且不保留換行符,其調(diào)用格式為

tline=fgetl(fid)

其中,fid為文件標(biāo)識符,當(dāng)成功讀取文件的下一行時,fgetl返回該行字符串到tline;當(dāng)fgetl讀到文件末尾時,返回?-1;若讀取錯誤,則返回一個空字符串,可以用函數(shù)ferror獲取錯誤信息。

【例】利用fgetl函數(shù)讀取文件fgetl.m的內(nèi)容。

在命令窗輸入:

>>fid=fopen(‘fgetl.m’);

while1

tline=fgetl(fid);

if~ischar(tline),break,end

disp(tline)

end

fclose(fid);運行結(jié)果:

functiontline=fgetl(fid)

%FGETLReadlinefromfile,discardnewlinecharacter.

%TLINE=FGETL(FID)returnsthenextlineofafileassociatedwithfile

%identifierFIDasaMATLABstring.Thelineterminatoris

NOT

%included.UseFGETStogetthenextlinewiththeline

terminator

%INCLUDED.Ifjustanend-of-fileisencountered,-1is

returned.

%%Ifanerroroccurswhilereadingfromthefile,FGETLreturns

anempty

%string.UseFERRORtodeterminethenatureoftheerror.

%

%MATLABreadscharactersusingtheencodingscheme

associatedwiththe

%file.SeeFOPENformoreinformation.

%

%FGETLisintendedforusewithfilesthatcontainnewline

characters.%Givenafilewithnonewlinecharacters,FGETLmaytakea

longtimeto

%execute.

%

%Example

%fid=fopen('fgetl.m');

%while1

%tline=fgetl(fid);%if~ischar(tline),break,end

%disp(tline)

%end

%fclose(fid);

%

%SeealsoFGETS,FOPEN,FERROR.

%Copyright1984-2005TheMathWorks,Inc.

%$Revision:5.15.4.5$$Date:2005/12/1223:25:45$

%try

[tline,lt]=fgets(fid);

tline=tline(1:end-length(lt));

ifisempty(tline)

tline='';

endcatch

ifnargin~=1

error(nargchk(1,1,nargin,‘struct’))

end

rethrow(lasterror)

end

fgets函數(shù)的功能和用法與fgetl函數(shù)基本相同,不同的是fgets函數(shù)保留換行符。

3.讀寫格式化文本數(shù)據(jù)

fscanf函數(shù)和fprint函數(shù)分別用于數(shù)據(jù)的格式化讀和寫。fscanf的調(diào)用格式為

[A,count]=fscanf(fid,FORMAT,SIZE)

該命令用于將fid所標(biāo)識文件以FORMAT格式讀入到矩陣A中。參數(shù)SIZE決定讀取多少數(shù)據(jù)。SIZE可以為N、inf、[M,N]任一種格式,具體的同fread函數(shù)中的SIZE參數(shù)。count是一個可選參數(shù),表示成功讀取的數(shù)據(jù)個數(shù)?!?%c:字符格式;

●?%s:字符串格式;

●?%d:有符號十進制整數(shù);

●?%o:有符號八進制數(shù);

●?%x:有符號十六進制數(shù);

●?%u:無符號十進制整數(shù);

●?%e,%f,%g:浮點數(shù)。

關(guān)于格式符的更多用法可以參見C語言參考手冊。函數(shù)fprintf可以將數(shù)據(jù)格式化寫入到文件中去,其調(diào)用格式為

count=fprintf(fid,FORMAT,A,...)

該函數(shù)將數(shù)據(jù)矩陣A以FORMAT格式寫入到fid所標(biāo)識的文件中去。count表示已經(jīng)成功寫入的字節(jié)數(shù)。FORMAT是格式符,這里的用法基本同fscanf中的FORMAT參數(shù),不過可以在FORMAT中加入字符串或者轉(zhuǎn)義字符。常見的轉(zhuǎn)義字符如表5-4所示。表5-4轉(zhuǎn)義字符下面通過一個例子來說明fprintf函數(shù)的用法。

【例】fprintf函數(shù)的用法。

創(chuàng)建一個腳本文件,輸入如下代碼并運行:

x=0:.2:1;

y=[x;exp(x)];

fid=fopen(‘exp.txt’,‘wt’);

fprintf(fid,‘x:%6.2f\ty=%12.8f\n’,y);

fclose(fid)在命令窗輸入typeexp.txt命令查看結(jié)果:

>>typeexp.txt

x:0.00 y=1.00000000

x:0.20 y=1.22140276

x:0.40 y=1.49182470

x:0.60 y=1.82211880

x:0.80 y=2.22554093

x:1.00 y=2.71828183

4.文件定位

前面提到過文件指針的概念,這里將詳細介紹文件指針是如何在文件內(nèi)部定位的。當(dāng)打開文件時,操作系統(tǒng)通過一個文件指針來指示當(dāng)前文件的位置。這個指針將決定對文件進行操作時,從文件的何處開始進行讀或?qū)懖僮?。MATLAB提供了函數(shù)fseek、ftell,用于實現(xiàn)對文件指針的操作。

fseek函數(shù)用于設(shè)定文件指針的位置,其調(diào)用格式為

status=fseek(fid,OFFSET,ORIGIN)該函數(shù)將fid所標(biāo)識的文件的文件指針,移到以O(shè)RIGIN為基點,以O(shè)FFSET為偏移量的位置。若操作成功,則status為0,否則status為?-1。

參數(shù)ORIGIN為文件指針移動的基點,可以為以下字符串:

●?‘bof’:-1,文件起始位置;

●?‘cof’:0,指針當(dāng)前位置;

●?'eof':1,文件末尾。

OFFSET為文件的偏移地址,說明如下:

●?OFFSET>0:向文件末尾方向移動文件指針;

●?OFFSET=0:偏移地址為0,將文件指針移動到ORIGIN所指位置;

●?OFFSET<0:向文件起始位置移動文件指針。

例如,fseek(fid,8,'bof')表示從文件的起始位置?'bof'?處向文件末尾方向移動8個字符,結(jié)果如圖5-2所示。fseek(fid,0,'eof')表示將文件指針移動到文件末端。圖5-2文件定位示例

ftell函數(shù)用于獲取當(dāng)前文件指針的位置,其調(diào)用格式為

position=ftell(fid)

如果position為?-1,則表示查詢當(dāng)前文件指針位置不成功,可以用ferror獲取錯誤信息。5.3.3關(guān)閉文件

fclose函數(shù)用于關(guān)閉文件,這是執(zhí)行文件操作后必須執(zhí)行的操作,與fopen函數(shù)配套使用。前面的很多例子中已經(jīng)使用過fclose函數(shù),這里主要介紹fclose函數(shù)的其他調(diào)用格式:

●?status=fclose(fid):當(dāng)函數(shù)返回0時表示成功關(guān)閉文件,返回?-1時則表示關(guān)閉過程中發(fā)生錯誤。如果fid不標(biāo)識一個已經(jīng)打開的文件,或者為0(標(biāo)準(zhǔn)輸入)、1(標(biāo)準(zhǔn)輸出)、2(標(biāo)準(zhǔn)錯誤),則fclose拋出一個異常?!?status=fclose(‘a(chǎn)ll’):關(guān)閉除fid為0、1、2以外的所有文件。成功時返回0,否則返回?-1。

【例】打開文件、文件定位、讀寫二進制文件、關(guān)閉文件。

創(chuàng)建文件test1.dat,其內(nèi)容為

Pine

applesandtea.

Orangutansandmonkeys,

Dragonflysorfleas.創(chuàng)建文件test2.dat,其內(nèi)容為

Orangesandlemons,

要將text1.dat中第二行以后的數(shù)據(jù)寫入到text2.dat文件的尾端,在命令窗輸入:

>>fid1=fopen(‘test1.dat’,‘r’);

fseek(fid1,4,‘bof’);

A=fread(fid1,inf,‘uint32’);

fid2=fopen(‘test2.dat’,‘r+’);

fseek(fid2,0,‘eof’);

fwrite(fid2,A,‘uint32’);

fclose('all');要顯示改動后test2.dat文件的內(nèi)容,在命令窗輸入:

>>typetest2.dat

運行結(jié)果:

Orangesandlemons,

applesandtea.

Orangutansandmonkeys,

Dragonflysorfleas.5.3.4更多文件I/O函數(shù)

除以上小節(jié)介紹的MATLAB底層文件I/O操作函數(shù)之外,在此基礎(chǔ)上,MATLAB針對不同的文件格式,提供了更為豐富的文件I/O函數(shù)。這些函數(shù)功能更為強大,使用也更方便。表5-5列出了MATLAB支持的可讀寫數(shù)據(jù)文件格式及相關(guān)函數(shù)。這些函數(shù)的具體使用方法較為簡單,此處不再贅述。表5-5MATLAB支持的可讀寫數(shù)據(jù)文件格式5.4.1程序的調(diào)試

編寫程序的過程中不免出現(xiàn)錯誤,調(diào)試錯誤的過程與編寫程序的過程同樣重要,因此掌握一定的調(diào)試技巧,對于提高編程效率是大有益處的。

MATLAB程序的錯誤主要有兩類:一類是語法錯誤,比如函數(shù)名拼寫錯誤、調(diào)用參數(shù)不匹配、標(biāo)點符號丟失、關(guān)鍵字不完整等,一般這類錯誤在編譯期間即可被發(fā)現(xiàn)。5.4程序調(diào)試與優(yōu)化

MATLAB會給出錯誤警告的內(nèi)容及相應(yīng)行。根據(jù)錯誤信息就可以很容易地排除和修正這類錯誤。另一類錯誤是運行時錯誤。這類錯誤往往是由于邏輯錯誤而引起的,表現(xiàn)在程序運行結(jié)果與預(yù)想結(jié)果不一致,但編譯器卻無法給出錯誤所在。較語法錯誤來說,運行時錯誤更具隱蔽性,調(diào)試難度也較大。本小節(jié)主要針對運行時錯誤來介紹幾種調(diào)試的方法。

1.以命令行模式進行M文件調(diào)試

用命令行模式調(diào)試M文件,不僅快速便捷、功能強大,而且具有較好的通用性,適合于各種不同的平臺。表5-6列出了M文件的常用調(diào)試函數(shù)。表5-6常用調(diào)試函數(shù)下面對幾個常用的調(diào)試函數(shù)進行具體的介紹。

(1)?dbstop函數(shù)用于在M文件中設(shè)置斷點,其調(diào)用格式如下:

●?dbstopinMFILEatLINENO:在M文件MFILE的第LINENO行處設(shè)置斷點。這里的LINENO處若為注釋,則斷點設(shè)為該段注釋結(jié)束后的下一行程序段。

●?dbstopinMFILEatLINENO@N:設(shè)置程序在執(zhí)行到MFILE的第LINENO行,第N個匿名函數(shù)處停止。

●?dbstopinMFILEatLINENO@NifEXPRESSION:如果EXPRESSION為真,則設(shè)置dbstopinMFILEatLINENO@N?!?dbstopiferror:當(dāng)執(zhí)行M文件遇到錯誤時,停止運行程序到產(chǎn)生錯誤的行,并使程序進入調(diào)試狀態(tài)。這里的錯誤不包括try…catch語句中檢測到的錯誤,用戶不能再運行產(chǎn)生錯誤行以后的程序。

●?dbstopifcatcherror:基本同上,不同的是這里包括try…catch語句中檢測到的錯誤。

●?dbstopiferroridentifier:當(dāng)程序遇到信息為identifier的錯誤時,程序停止在產(chǎn)生錯誤的行,其他同命令dbstopiferror?!?dbstopifwarning:當(dāng)執(zhí)行M文件遇到警告時,程序暫停在產(chǎn)生錯誤的行并進入調(diào)試狀態(tài)。執(zhí)行此命令后可以用dbcont或dbstep恢復(fù)執(zhí)行程序。

●?dbstopifnaninf或dbstopifinfnan:當(dāng)執(zhí)行M文件遇到無窮值或者非數(shù)值時,程序暫停并進入調(diào)試狀態(tài)。

(2)?dbclear函數(shù)用于清除M文件中的斷點,其調(diào)用格式如下:

●?dbclearall:清除所有M文件中的斷點。

●?dbclearinMFILE:清除MFILE文件中的所有斷點。

●?dbclearinMFILEatLINENO:清除MFILE文件中第LINETO行的斷點。

●?dbclearinMFILEatLINENO@N:清除MFILE文件第LINENO行,第N個匿名函數(shù)中設(shè)置的斷點。●?dbclearinMFILEatSUBFUN:清除在MFILE文件子函數(shù)SUBFUN中的所有斷點。

●?dbcleariferror:清除由命令dbstopiferror或dbstopiferroridentifier設(shè)置的斷點。

●?dbclearifcaughterror:清除由命令dbstopifcaughterror或dbstopifcaughterroridentifier設(shè)置的斷點。

●?dbclearifwarning:清除由命令dbstopifwarning或dbstopifwarningidentifier設(shè)置的斷點。

●?dbclearifnaninf或dbclearifinfnan:清除由命令dbstopifnaninf或dbstopifinfnan設(shè)置的斷點。

(3)?dbcont函數(shù)用于從斷點處恢復(fù)繼續(xù)執(zhí)行程序,直到遇到下一個斷點或者錯誤,或者程序執(zhí)行完畢返回基本工作區(qū)間,其調(diào)用格式為dbcont。

(4)?dbstep函數(shù)用于從當(dāng)前斷點處恢復(fù),步進地執(zhí)行程序,其調(diào)用格式如下:

●?dbstep:執(zhí)行當(dāng)前斷點處的下一行程序。dbstep會忽略當(dāng)前行所調(diào)用函數(shù)中的斷點。

●?dbstepNLINES:該命令將執(zhí)行到當(dāng)前斷點所在行的下NLINES行程序處,若中間程序行有斷點,則執(zhí)行到斷點處?!?dbstepin:執(zhí)行下一行程序,若此行有函數(shù)的調(diào)用,則進入該函數(shù)內(nèi)部,否則同dbstep。

●?dbstepout:該命令運行完函數(shù)的剩余部分,程序停留在離開函數(shù)處。

(5)?dbstatus函數(shù)用于查看所有斷點的情況,其調(diào)用格式如下:

●?dbstatus:列出所有文件中的斷點。

●?dbstatusMFILE:列出MFILE文件中所有的斷點信息。●?s=dbstatus:該表達式以一個M×1的結(jié)構(gòu)形式返回所有斷點信息,各字段信息如下:

■?name:文件名。

■?file:包含有斷點的文件的路徑。

■?line:斷點行號向量。

■?anonymous:在line字段中的行號向量對應(yīng)的匿名函數(shù)序列向量。如某斷點行有第2個匿名函數(shù),則其對應(yīng)的匿名函數(shù)序列為2。■?expression:與line中行對應(yīng)的斷點條件表達式字符串向量。

■?cond:條件字符串,如?‘error’,‘caughterror’,‘warning’

或?‘naninf’。

■?identifier:當(dāng)cond是?'error','caughterror'?或者?'warning'?時,該字段為信息類別字符串向量。

(6)?dbtype函數(shù)用于顯示帶有行號的M文件內(nèi)容,其調(diào)用格式如下:

●?dbtypeMFILE:顯示指定文件MFILE的內(nèi)容并帶有行號信息。

●?dbtypeMFILEstart:end:顯示指定文件MFILE從start到end行之間的內(nèi)容并帶有行號信息。

(7)?dbstack函數(shù)用于顯示當(dāng)前斷點所在的M文件名和產(chǎn)生斷點的行號,并且以執(zhí)行順序列出,其調(diào)用格式如下:

●?dbstack:顯示函數(shù)調(diào)用堆棧中的文件名及行號信息。●?dbstack(N):省略堆棧前N個函數(shù)的調(diào)用信息。

●?dbstack(‘-completenames’):顯示堆棧中函數(shù)文件的路徑、文件名與行號。

●?[ST,I]=dbstack:執(zhí)行此命令后,其中ST以一個M×1的結(jié)構(gòu)體形式返回堆棧信息。各字段信息如下:

■?file:出現(xiàn)函數(shù)的文件名,如果沒有文件,則這個字段為空。

■?name:文件中的函數(shù)名。

■?line:函數(shù)行號。

I為返回的當(dāng)前工作區(qū)間索引。

【例】dbstack的使用。

在調(diào)式模式下,如果輸入:

K>>dbstack

運行結(jié)果:

Incollatzplotat6

>Intestat1如果輸入:

K>>dbstack(1)

運行結(jié)果:

>Intestat1

如果輸入:

K>>dbstack(‘-completenames’)

運行結(jié)果:

InF:\Matlab\work\collatzplot.m>collatzplotat6

>InF:\Matlab\work\test.m>testat1如果輸入:

K>>[ST,I]=dbstack

運行結(jié)果:

ST=

file:‘collatz.m’

name:‘collatz’

line:6

I=1

(8)?dbquit函數(shù)用于退出調(diào)試模式,其調(diào)用格式如下:

●?dbquit:退出調(diào)試模式,所有斷點仍有效。如果調(diào)試文件1并跳轉(zhuǎn)到文件2,執(zhí)行該命令將終止文件1和文件2的調(diào)試狀態(tài)。如果在調(diào)試文件1的同時也在調(diào)試文件2,則運行一次dbquit只能將其中之一退出調(diào)試模式。

●?dbquit(‘a(chǎn)ll’)或dbquitall:一次性終止所有文件的調(diào)試狀態(tài)。

2.以GUI方式調(diào)試M文件

用戶可以選擇用GUI方式進行M文件的調(diào)試,這種方式更加直觀和方便。新建一個M文件,在編譯器主菜單Debug選項的下拉菜單中可以看到如圖5-3所示的各種調(diào)試命令。圖5-3GUI方式調(diào)試主菜單的部分調(diào)試命令在調(diào)試工具欄中也有相對應(yīng)的圖標(biāo),如圖5-4所示。

下面將對這些命令作簡要的介紹。

●?Step:單步執(zhí)行。對應(yīng)工具欄上的按鈕圖標(biāo),快捷鍵為F10,對應(yīng)的調(diào)試命令為dbstep。

●?Stepin:單步執(zhí)行,遇到函數(shù)則跳轉(zhuǎn)到函數(shù)內(nèi)部。對應(yīng)工具欄上的按鈕圖標(biāo),快捷鍵為F11,對應(yīng)的調(diào)試命令為dbstepin。圖5-4調(diào)試工具欄●?Stepout:跳出函數(shù)內(nèi)部。對應(yīng)工具欄上的按鈕圖標(biāo),快捷鍵為Shift+F11,對應(yīng)的調(diào)試命令為dbstepout。

●?Continue:繼續(xù)執(zhí)行。對應(yīng)工具欄上的按鈕圖標(biāo),快捷鍵為F5,對應(yīng)的調(diào)試命令為dbcont。

●?GoUntilCursor:運行程序直到光標(biāo)所在的行?!?Set/ClearBreakpoint:設(shè)置或清除斷點。對應(yīng)工具欄上的按鈕圖標(biāo),快捷鍵為F12,對應(yīng)的調(diào)試命令為dbstop/dbclear。

●?Set/ModifyConditionalBreakpoint…:設(shè)置或修改當(dāng)前光標(biāo)所在行的條件斷點。單擊此命令會彈出如圖5-5所示的對話框,在文字框中可輸入條件表達式。同調(diào)試命令dbstopinMFILEatLINENOifEXPRESSION,其中LINENO即光標(biāo)所在行,EXPRESSION即條件表達式。圖5-5MATLABEditor對話框●?Enable/DisableBreakpoint:使斷點有效/失效。

●??ClearBreakpointsinAllFiles:對應(yīng)工具欄上的按鈕

圖標(biāo),對應(yīng)的調(diào)試命令為dbclearall。

●?StopifError/Warnings…:單擊該菜單項會彈出如圖5-6所示的對話框,相應(yīng)的調(diào)試命令在相應(yīng)選項后面的括號中均有注明。圖5-6StopifError/WarningsforAllFiles對話框●

ExitDebugMode:對應(yīng)工具欄上的按鈕圖標(biāo),快捷鍵為Shift+F5,對應(yīng)的調(diào)試命令為dbquit。

●在工具欄的左端還有一個下拉列表框。當(dāng)程序處于調(diào)試狀態(tài)時該框被激活。這個下拉列表框中顯示了函數(shù)的調(diào)用關(guān)系,對應(yīng)于調(diào)試命令中的dbstack。

3.調(diào)試輔助函數(shù)

前面介紹了通過命令調(diào)試程序以及通過GUI調(diào)試程序的方法。另外MATLAB還提供了一些調(diào)試輔助函數(shù),可以幫助用戶更快地發(fā)現(xiàn)問題的所在。調(diào)試輔助函數(shù)的功能描述如表5-7所示。表5-7調(diào)試輔助函數(shù)5.4.2程序的優(yōu)化

本小節(jié)將介紹如何利用優(yōu)化工具分析和改進程序的性能,以及如何編寫性能較高的MATLAB程序語言。

1.使用M-LintCodeCheckReport工具

M-LintCodeCheckReport(代碼檢查報告)工具可用于檢查代碼中可能存在的錯誤和問題,并且會向用戶提出改進代碼的建議。在當(dāng)前路徑窗口中單擊按鈕,將打開M-LintCodeCheckReport窗口,窗口中顯示的是當(dāng)前路徑下所有M文件的代碼分析結(jié)果。單擊文件名超鏈接可以打開文件,單擊文件行號超鏈接可以打開文件并定位到檢查存在問題的代碼行,如圖5-7所示。圖5-7M-LintCodeCheckReport窗口如果對文件進行了改動,保存改動后單擊RerunThisReport,可以更新顯示改動后的分析報告。

下面給出了獲取M-Lint信息的其他方法,通過這些方法同樣可以得到M-Lint信息,只是信息的形式不同:

●在M文件編輯/調(diào)試器界面的主菜單中選擇Tools>M-Lint>ShowM-LintReport來訪問M-Lint代碼分析報告。

●使用mlint函數(shù)分析指定文件并在命令窗內(nèi)顯示信息,或使用mlintrpt運行mlint并以Web瀏覽器方式顯示M-Lint代碼分析報告。

●使用自動M-Lint代碼分析校正,可以在編寫代碼的過程中不停地對代碼進行檢查。

2.使用Profiler進行優(yōu)化

MATLAB提供的M文件Profiler可以用于實現(xiàn)程序性能的優(yōu)化。Profiler是一個基于profiler函數(shù)返回結(jié)果的GUI。Profiler可以幫助用戶決定如何修改代碼以提高程序的性能。

Profiling是一種測量程序耗費時間的方法。使用MATLABProfiler可以確定代碼中最耗費時間的函數(shù),從而決定是否要調(diào)用這些函數(shù)或者盡可能地減少調(diào)用。這在決定一個特定函數(shù)調(diào)用次數(shù)是否合理時十分有用。由于程序通常有很多層,而代碼不能夠明確地調(diào)用最耗時間的函數(shù)。程序代碼中的函數(shù)可能調(diào)用了其他耗費時間的函數(shù),因此決定調(diào)用哪個函數(shù)非常重要。通過profiling可以分析程序性能,并且可以對程序進行以下優(yōu)化:

●避免因疏忽帶來的不必要的計算。

●改變算法以避免耗費大量時間的函數(shù)。

●存儲結(jié)果,避免下次調(diào)用時重復(fù)計算。用戶可以通過以下方法中的任意一種來打開Profiler:

●在MATLAB桌面主菜單上選擇Desktop>Profiler。

●在MATLAB桌面工具欄上單擊Profiler按鈕。

●對于一個MATLAB編輯/調(diào)試器中的文件,選擇Tools>OpenProfiler。

●選中歷史命令窗口中的一條或多條語句,在右鍵菜單上選擇ProfileCode。

●在命令窗輸入命令:profileviewer。

使用命令profileviewer打開Profiler,如圖5-8所示。圖5-8Profiler瀏覽器接下來可以按照以下步驟運行profiling:

(1)在Profiler的Runthiscode字段輸入將要運行的語句或文件名。

(2)單擊StartProfiling或者在語句輸入完畢時按回車鍵,啟動profiling。

【例】使用Profiler。

打開Profiler,在Runthiscode字段輸入如下語句:

[t,y]=ode23(‘lotka’,[0100],[20;20])

單擊StartProfiling,運行結(jié)果如圖5-9所示。圖5-9使用Profiler分析代碼圖5-9所示的ProfileSummary報告中顯示了所有函數(shù)執(zhí)行統(tǒng)計以及每個被調(diào)用函數(shù)的統(tǒng)計:

●?FunctionName:調(diào)用到的函數(shù)或子函數(shù)列表。第一次顯示時,這些函數(shù)將按它們耗費時間的多少從大到小排列。單擊FunctionName超鏈接后,可以將函數(shù)按字母表順序

排列。

●?Calls:函數(shù)被調(diào)用的次數(shù)。單擊Calls超鏈接后則按它們被調(diào)用次數(shù)的多少從大到小排列。●?TotalTime:每個函數(shù)總共耗費的時間,包含所有被調(diào)用的子函數(shù)。單擊TotalTime超鏈接后可以按它們耗費時間的多少從大到小排列。

●?SelfTime:每個函數(shù)總共耗費的時間,不包含所有被調(diào)用的子函數(shù)。單擊SelfTime超鏈接后可以按它們耗費時間的多少從大到小排

溫馨提示

  • 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論