版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章MATLAB程序設(shè)計(jì)3.1概述3.2循環(huán)程序3.3分支結(jié)構(gòu)3.4人機(jī)交互語(yǔ)句3.5程序的常見錯(cuò)誤處理 3.1概述
3.1.1MATLAB程序設(shè)計(jì)方法
MATLAB程序可以分為兩類:交互式和M文件的編程。
對(duì)于一些簡(jiǎn)單問(wèn)題的程序,用戶可以直接在MATLAB的命令窗口中輸入命令,用交互式的方式來(lái)編寫。這種方式適用于命令比較簡(jiǎn)單,輸入比較方便,同時(shí)處理問(wèn)題的步驟較少的情況。但是,對(duì)于較復(fù)雜的問(wèn)題,由于處理所需的命令較多,即需要邏輯運(yùn)算、需要一個(gè)或多個(gè)變量重復(fù)驗(yàn)證、需要進(jìn)行流程控制等,那么此時(shí)采用直接輸入命令的方法則會(huì)引起不便。為此,MATLAB提供了一個(gè)合理的解決方法,就是事先將一系列MATLAB命令輸入到一個(gè)文本文件中加以保存,只要執(zhí)行該文件,則文件中所有MATLAB命令都被執(zhí)行,其結(jié)果與直接在MATLAB的命令窗口中輸入命令執(zhí)行的結(jié)果一樣。由于該文本文件以“.M”為擴(kuò)展名,因此被稱為M文件。當(dāng)需要處理重復(fù)、復(fù)雜且容易出錯(cuò)的問(wèn)題時(shí),可以建立一個(gè)M文件,進(jìn)行合理的程序設(shè)計(jì),這就是M文件的編程工作方式。3.1.2MATLAB程序結(jié)構(gòu)
MATLAB作為一種常用的編程語(yǔ)言,支持各種決策或流程控制結(jié)構(gòu)。流程控制極其重要,因?yàn)樗眠^(guò)去、現(xiàn)在的計(jì)算影響將來(lái)的結(jié)果。MATLAB程序結(jié)構(gòu)分為順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu),具體如圖3-1所示。
由于這些結(jié)構(gòu)經(jīng)常包含大量的MATLAB命令,故經(jīng)常出現(xiàn)在M文件中,而不是直接加在MATLAB提示符下。圖3-1MATLAB程序結(jié)構(gòu)
1.順序結(jié)構(gòu)
順序程序結(jié)構(gòu)是一種最簡(jiǎn)單的程序結(jié)構(gòu),將MATLAB語(yǔ)句按先后次序排列即可。系統(tǒng)在編譯程序時(shí),按照程序的物理位置順序執(zhí)行。這種程序容易編制,但是結(jié)構(gòu)單一,能夠?qū)崿F(xiàn)的功能有限。例如:
a=1;b=2;c=3;
s1=a+b;
s2=s1+c;
s3=s2/s2;
2.分支結(jié)構(gòu)
程序在運(yùn)行過(guò)程中要根據(jù)不同的情況或條件作出判斷,并依據(jù)判斷的結(jié)果轉(zhuǎn)向相應(yīng)的處理程序,這種程序結(jié)構(gòu)稱為分支結(jié)構(gòu)。
分支是通過(guò)條件轉(zhuǎn)移指令實(shí)現(xiàn)的,進(jìn)行分支結(jié)構(gòu)程序設(shè)計(jì)之前,應(yīng)首先確定要判斷的是什么條件,以及當(dāng)判斷結(jié)果為不同的情況(“真”或“假”)時(shí)應(yīng)該執(zhí)行什么樣的操作。MATLAB提供條件轉(zhuǎn)移的if…end分支程序結(jié)構(gòu)。
有的分支結(jié)構(gòu)為多分支,可依次測(cè)試各個(gè)條件是否滿足。若滿足條件則轉(zhuǎn)入相應(yīng)分支入口,若不滿足則繼續(xù)向下測(cè)試,直到全部測(cè)試完。分支選擇程序結(jié)構(gòu)簡(jiǎn)單、直觀,但執(zhí)行速度慢。MATLAB提供條件轉(zhuǎn)移的switch開關(guān)分支程序結(jié)構(gòu)。
分支結(jié)構(gòu)程序設(shè)計(jì)需要使用關(guān)系運(yùn)算、邏輯運(yùn)算、條件運(yùn)算等。
3.循環(huán)結(jié)構(gòu)程序設(shè)計(jì)
在日常的實(shí)際生活中,會(huì)經(jīng)常用到“循環(huán)結(jié)構(gòu)”,例如數(shù)據(jù)的累加計(jì)算等,但又與順序結(jié)構(gòu)和選擇結(jié)構(gòu)不同,無(wú)論是順序還是選擇分支語(yǔ)句,它們中的每一條語(yǔ)句一般只執(zhí)行一次。而循環(huán)結(jié)構(gòu)中,有時(shí)常要重復(fù)某幾條語(yǔ)句,所以循環(huán)結(jié)構(gòu)就是用于完成一些重復(fù)的操作,但它并不是單純的重復(fù)執(zhí)行,每次執(zhí)行時(shí),語(yǔ)句的參數(shù)一般都是不同的。
按循環(huán)控制方式分類可分為手動(dòng)循環(huán)和自動(dòng)循環(huán)。手動(dòng)循環(huán)在程序運(yùn)行時(shí)通過(guò)反復(fù)操作控件實(shí)現(xiàn)某事件過(guò)程的反復(fù)執(zhí)行,自動(dòng)循環(huán)是由程序中的語(yǔ)句控制的,是程序執(zhí)行時(shí)根據(jù)循環(huán)的條件自動(dòng)實(shí)現(xiàn)的循環(huán)。自動(dòng)循環(huán)又可分為有條件循環(huán)(當(dāng)循環(huán)條件滿足或不滿足時(shí)才執(zhí)行的循環(huán))和無(wú)條件循環(huán)(無(wú)條件地執(zhí)行循環(huán))。 3.2循環(huán)程序
3.2.1for循環(huán)
1.for循環(huán)的一般形式
for循環(huán)允許一組命令以固定的和預(yù)定的次數(shù)重復(fù)。For循環(huán)的一般形式:
forvariable=values
commands
…
end
commands是循環(huán)體語(yǔ)句組,這里的循環(huán)語(yǔ)句是以end結(jié)尾的,這與C語(yǔ)言的結(jié)構(gòu)不完全一致。values可以是如表3-1所示的格式之一。
(1)??initval:step:endval形式。索引變量以增量形式循環(huán),從初始值initval到結(jié)束值endval,增量步長(zhǎng)為step,并重復(fù)循環(huán)。如果step為負(fù)數(shù),則以減量方式循環(huán),該形式的初始值initval大于結(jié)束值endval。
fors=s1:s2:s3
commands
...
end
注意:s是一個(gè)合法的字符串代表循環(huán)變量。s1、s2、s3可以是標(biāo)量數(shù)字s1是起始值;s2是步長(zhǎng),如果步長(zhǎng)s2的值為1,則可以省略;s3是終了值。例3-2-1
求出的值。
解該例可以作下列的循環(huán):
>>x=0;
fori=1:1:100
x=x+i;
end;
>>x
結(jié)果為x=5050
(2)?initval:endval形式。索引變量以增量形式循環(huán),從初始值initval到結(jié)束值endval,增量步長(zhǎng)為1,并重復(fù)循環(huán)。
在上例的式子中,可以看到for循環(huán)語(yǔ)句中s2的值為1。在實(shí)際編程中,如果s2的步長(zhǎng)值為1,則可以在該語(yǔ)句中省略,故該語(yǔ)句可以簡(jiǎn)化成fori=1:100。
(3)?valArray形式。在每個(gè)迭代,從數(shù)組valArray列的子列創(chuàng)建一個(gè)列向量index。例如,在第一次迭代,index=valArray(:,1)。循環(huán)執(zhí)行n次,其中n是valArray列的最大數(shù)字,即for循環(huán)按照數(shù)組的列數(shù)決定循環(huán)次數(shù),每執(zhí)行一次for循環(huán),index就取數(shù)組的一個(gè)列作為其值,直到最后一列。
forindex=V
commands
end
在for和end語(yǔ)句之間的循環(huán)體語(yǔ)句組“commands”按數(shù)組中的每一列執(zhí)行一次。在每一次迭代中,index被指定為數(shù)組的一列,在第n次循環(huán)中,index=V(:,n),即V的第n列。例如:
A=[0.81470.63240.95750.95720.4218;
0.90580.09750.96490.48540.9157;
0.12700.27850.15760.80030.7922;
0.91340.54690.97060.14190.9595];
forn=A
s=n*2;
end
第5次循環(huán)結(jié)果:
0.8436
1.8314
1.5844
1.9190上面的語(yǔ)句就等價(jià)于:
forindex=1:5,m=A(:,index);
s1=m*2;
end
任何合法的數(shù)組生成語(yǔ)句都可以作為條件數(shù)組。
MATLAB并不要求循環(huán)點(diǎn)等間距,假設(shè)V為任意一個(gè)向量,則可以用
fori=V來(lái)表示循環(huán),這時(shí)valArray只有一個(gè)向量V,其元素必須是正整數(shù)。例如,在命令行輸入:
>>V=[12357];
forn=V
x(n)=sin(n*pi/10);
end
則輸出結(jié)果:
>>x
x=0.30900.58780.809001.000000.8090
程序語(yǔ)句的意思是:對(duì)n等于1到V,求所有語(yǔ)句的值,直至下一個(gè)end語(yǔ)句。第一次通過(guò)for循環(huán)n=1;第二次,n=2;如此繼續(xù),直至n=7。在實(shí)際編程中,采用循環(huán)語(yǔ)句會(huì)降低其執(zhí)行速度,所以前面的例3-3-1程序可以由下面的命令來(lái)代替:
i=1:100;
mysum=sum(i)
在這一語(yǔ)句中,首先生成了一個(gè)向量i,然后用內(nèi)部函數(shù)sum()求出i向量的各個(gè)元素之和。
更簡(jiǎn)單地,該語(yǔ)句還可以寫成sum(1:100)。如果前面的100改成10?000,再運(yùn)行這一程序,則可以明顯地看出,后一種方法編寫的程序比前一種方法快得多。
2.for循環(huán)的嵌套
在一個(gè)for循環(huán)中,可以根據(jù)需要嵌套另外的多個(gè)for循環(huán)。例如:
forn=1:5
form=5:-1:1
B(n,m)=n^2+m^2;
end
disp(n)
end
循環(huán)結(jié)果:
1
2
3
4
5例3-2-2
列出構(gòu)成hibert矩陣的程序。
解程序如下:
formatrat,n=input('n='),
fori=1:n
forj=1:n
h(i,j)=1/(i+j-1);
end
end
h
n=5
h=
11/21/31/41/5
1/21/31/41/51/6
1/31/41/51/61/7
1/41/51/61/71/8
1/51/61/71/81/93.2.2while循環(huán)
與for循環(huán)以固定次數(shù)求一組命令的值相反,while循環(huán)以不定的次數(shù)求一組語(yǔ)句的值。while循環(huán)的一般形式是
whileexpression
commands
end
只要表達(dá)式expression里的所有元素都為真,就可以執(zhí)行while和end語(yǔ)句之間的commands。通常,表達(dá)式的求值給出一個(gè)標(biāo)量值,但數(shù)組值也同樣有效。在數(shù)組情況下,所得到數(shù)組的所有元素必須都為真。例3-2-3while循環(huán)。
解在例3-2-1中同樣的問(wèn)題,在while循環(huán)結(jié)構(gòu)下可以表示為
>>x=0;i=1;
while(i<=100)
x=x+i;
i=i+1;
end
>>x
x=50503.2.3break語(yǔ)句
break命令強(qiáng)迫f(wàn)or循環(huán)或while循環(huán)提早結(jié)束,當(dāng)執(zhí)行break語(yǔ)句時(shí),MATLAB跳到循環(huán)體外下一個(gè)語(yǔ)句。
如果一個(gè)break語(yǔ)句出現(xiàn)在一個(gè)嵌套的for循環(huán)或while循環(huán)結(jié)構(gòu)里,那么MATLAB只跳出break所在的那個(gè)循環(huán),不跳出整個(gè)嵌套結(jié)構(gòu)。3.2.4continue語(yǔ)句
continue命令一般用在for循環(huán)或while循環(huán)中,通過(guò)if語(yǔ)句使用continue命令,當(dāng)滿足語(yǔ)句if條件時(shí),continue命令被調(diào)用。與break語(yǔ)句不同的是,執(zhí)行continue命令后,系統(tǒng)只是不再執(zhí)行相關(guān)命令,而不跳出當(dāng)前循環(huán)體外。
例3-2-5
計(jì)算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('文件有效文本有%d行',count));
文件有效文本有25行。3.2.5end語(yǔ)句
end命令用于終止for、while、switch、try和if語(yǔ)句,每一個(gè)end與最近的for、while、switch、try或if語(yǔ)句成對(duì)出現(xiàn)。
end也可以用于索引表達(dá)式中,代表最后一個(gè)索引。例如:X(3:end)和
X(1,1:2:end-1)。 3.3分支結(jié)構(gòu)
3.3.1條件轉(zhuǎn)移結(jié)構(gòu)
很多情況下,命令的序列必須根據(jù)條件關(guān)系的檢驗(yàn)結(jié)果有序地執(zhí)行,這種根據(jù)條件而轉(zhuǎn)移的分支結(jié)構(gòu)是條件轉(zhuǎn)移結(jié)構(gòu)。
判斷表達(dá)式緊跟在關(guān)鍵字if后面,使得它可以首先被計(jì)算,判斷其值為真否。若計(jì)算判斷表達(dá)式的結(jié)果為1,判斷值為真,則執(zhí)行其后的執(zhí)行語(yǔ)句;若結(jié)果為0,判斷值為假,則跳過(guò)、不予執(zhí)行。
條件轉(zhuǎn)移語(yǔ)句與C語(yǔ)言類似,條件轉(zhuǎn)移結(jié)構(gòu)包括以下三種:if…end、if…else…end、if…elseif…else…end。
1.if…end
當(dāng)只有一種選擇時(shí),使用該形式。此時(shí)的程序結(jié)構(gòu)如下:
ifexpression
commands
…
end
expression是條件表達(dá)式,commands是執(zhí)行代碼塊。這是最簡(jiǎn)單的判斷語(yǔ)句,只有一個(gè)判斷語(yǔ)句。其中的表達(dá)式為邏輯表達(dá)式,當(dāng)表達(dá)式expression結(jié)果為真時(shí),執(zhí)行相應(yīng)的語(yǔ)句commands,否則,直接跳到end下一段語(yǔ)句。
如果在表達(dá)式中的所有元素為真(非零),那么就執(zhí)行if和end語(yǔ)言之間的commands。當(dāng)表達(dá)式包含有幾個(gè)邏輯子表達(dá)式時(shí),即使前一個(gè)子表達(dá)式?jīng)Q定了表達(dá)式的最后邏輯狀態(tài),仍要計(jì)算所有的子表達(dá)式。例如:
>>apples=10;
>>cost=apples*25
cost=
250
>>ifapples>5 %如果購(gòu)買量大于5,給予20%的價(jià)格折扣
cost=(1-0.2)*cost;
end
>>cost
cost=
200
2.if…else…end
當(dāng)程序有兩個(gè)選擇時(shí),可以選擇if…else…end結(jié)構(gòu),此時(shí)的程序結(jié)構(gòu)如下:
ifexpression
commands1
else
commands2
end
當(dāng)判斷表達(dá)式expression為真時(shí),執(zhí)行代碼塊commands1,否則執(zhí)行代碼塊commands2。例3-3-2
輸入數(shù)n,判斷其正負(fù)性。
解程序如下:
m=input('m='),
ifm<0
disp('m為負(fù)數(shù)!'),
else
disp('m為正數(shù)!'),
end
m=-9
m=
-9
m為負(fù)數(shù)!
m=7
m=
7
m為正數(shù)!
3.if…elseif…else…end
上面的兩種形式中,分別包含一個(gè)選擇和兩個(gè)選擇,當(dāng)判斷包含三個(gè)或多個(gè)選擇時(shí),可以采用elseif語(yǔ)句,其結(jié)構(gòu)如下:
ifexpression1
commands1
elseifexpression2
commands2
elseif...
...
...
else
commands
end例3-3-3
輸入數(shù)n,判斷其正負(fù)及奇偶性。
解程序如下:
n=input('n='),
ifn<0
A='負(fù)數(shù)',
elseifrem(n,2)==0
A='偶數(shù)',
else
A='奇數(shù)',
end
n=5
n=
5
A=
奇數(shù)3.3.2switch開關(guān)結(jié)構(gòu)
MATLAB中的另一種分支結(jié)構(gòu)為開關(guān)分支語(yǔ)句。開關(guān)分支語(yǔ)句的結(jié)構(gòu)如下:
switchexpression
caseexpression_1
commands_1
caseexpression_2
commands_2
...
otherwise
commands
end其中的分支語(yǔ)句開關(guān)表達(dá)式expression為一個(gè)變量,可以是數(shù)值變量或者字符串變量,如果該變量的值與某一條件expression_n相符,則執(zhí)行相應(yīng)的語(yǔ)句;否則執(zhí)行otherwise后面的語(yǔ)句。在每一個(gè)條件中,可以包含一個(gè)條件語(yǔ)句,可以包含多個(gè)條件,當(dāng)包含多個(gè)條件時(shí),將條件以單元數(shù)組的形式表示。例如:
>>method=‘Bilinear’;
>>switchlower(method)
case{‘linear’,‘bilinear’}
disp(‘Methodislinear’)
case‘cubic’
disp(‘Methodiscubic’)
case‘nearest’
disp(‘Methodisnearest’)
otherwise
disp(‘Unknownmethod.’)
end
顯示結(jié)果為
Methodislinear
MATLAB的分支語(yǔ)句類似于C語(yǔ)言的分支語(yǔ)句,但是又不完全相像,MATLAB開關(guān)語(yǔ)句與C語(yǔ)言的區(qū)別如下:
(1)當(dāng)開關(guān)表達(dá)式的值等于表達(dá)式expression_1時(shí),將執(zhí)行語(yǔ)句段commands_1,執(zhí)行完語(yǔ)句段commands_1后將轉(zhuǎn)出開關(guān)體,即MATLAB語(yǔ)句從上到下依次判斷條件,條件符合則執(zhí)行相應(yīng)的代碼塊,之后退出該分支語(yǔ)句,無(wú)需像C語(yǔ)言那樣在下一個(gè)case語(yǔ)句前加break語(yǔ)句,所以本結(jié)構(gòu)在這點(diǎn)上和C語(yǔ)言是不同的。
(2)當(dāng)需要在開關(guān)表達(dá)式滿足若干個(gè)表達(dá)式之一時(shí)執(zhí)行某一程序段,則應(yīng)該把這樣的一些表達(dá)式用大括號(hào)括起來(lái),中間用逗號(hào)分隔。事實(shí)上,這樣的結(jié)構(gòu)是MATLAB語(yǔ)言定義的單元結(jié)構(gòu)。
(3)當(dāng)前面枚舉的各個(gè)表達(dá)式均不滿足時(shí),則將執(zhí)行otherwise語(yǔ)句后面的語(yǔ)句段,此語(yǔ)句等價(jià)于C語(yǔ)言中的default語(yǔ)句。
(4)在case語(yǔ)句引導(dǎo)的各個(gè)表達(dá)式中,不要用重復(fù)的表達(dá)式,否則列在后面的開關(guān)通路將永遠(yuǎn)也不能執(zhí)行。
(5)程序的執(zhí)行結(jié)果和各個(gè)case語(yǔ)句的次序是無(wú)關(guān)的。例3-3-4
判斷輸入數(shù)n的奇偶空的程序。
解程序如下:
n=input('n=');
switchmod(n,2);
case1;A='奇';
case0;A='偶';
otherwise;A='空';
end
A
n=6
A=偶3.3.3try-catch試探結(jié)構(gòu)
MATLAB從5.2版本開始提供了一種新的試探式語(yǔ)句結(jié)構(gòu),用于捕獲MATLAB編譯時(shí)出現(xiàn)的錯(cuò)誤,其一般的形式為
try
語(yǔ)句段1
catch
語(yǔ)句段2
end
try塊以關(guān)鍵字try開始,結(jié)束于catch關(guān)鍵字,catch塊以關(guān)鍵字catch開始,結(jié)束于end關(guān)鍵字。本語(yǔ)句結(jié)構(gòu)首先試探性地執(zhí)行語(yǔ)句段1,如果在此段語(yǔ)句執(zhí)行過(guò)程中沒有出現(xiàn)錯(cuò)誤,則直接跳到end。
如果在此段語(yǔ)句執(zhí)行過(guò)程中出現(xiàn)了錯(cuò)誤,則直接跳到catch模塊。在catch模塊中將錯(cuò)誤信息賦給保留的lasterr變量,轉(zhuǎn)而執(zhí)行語(yǔ)句段2中的語(yǔ)句。語(yǔ)句段2可以根據(jù)獲取的該錯(cuò)誤信息,執(zhí)行相應(yīng)的動(dòng)作。
try-catch試探結(jié)構(gòu)也可以嵌套使用。 3.4人機(jī)交互語(yǔ)句
3.4.1echo命令
echo命令使文件命令在執(zhí)行時(shí)可見,對(duì)程序的調(diào)試和演示有用。語(yǔ)法如下:
echoon/off:打開(關(guān)閉)?echo命令。
echo:在打開、關(guān)閉echo命令之間切換。
echofilenameon/off:打開(關(guān)閉)文件名為filename的M文件。
echoon/offall:打開(關(guān)閉)所有的M文件。3.4.2用戶輸入提示命令input
input命令顯示用戶輸入提示,并接受用戶輸入。語(yǔ)法如下:
(1)?evalResponse=input(prompt):在屏幕上顯示提示的字符串,等候用戶在鍵盤的輸入,并賦值于變量evalResponse。
(2)?strResponse=input(prompt,'s'):把用戶在鍵盤的輸入,作為一個(gè)MATLAB串返回。例如:
>>R=input(‘Whatisyourname?’,’s’)3.4.3等待用戶反應(yīng)命令pause
pause命令暫停程序執(zhí)行,等待用戶反應(yīng)。語(yǔ)法如下:
pause:pause命令暫停程序執(zhí)行,等待用戶反應(yīng),用戶單擊任意鍵后,程序重新開始執(zhí)行。
pause(n):n秒后繼續(xù)運(yùn)行。
pauseon:顯示并執(zhí)行pause命令。
pauseoff:顯示但不執(zhí)行該命令。 3.5程序的常見錯(cuò)誤處理
3.5.1錯(cuò)誤的產(chǎn)生
在MATLAB程序設(shè)計(jì)或開發(fā)函數(shù)M文件過(guò)程中,容易產(chǎn)生兩類錯(cuò)誤:語(yǔ)法錯(cuò)誤和運(yùn)行時(shí)錯(cuò)誤。
當(dāng)MATLAB計(jì)算一個(gè)表達(dá)式的值或一個(gè)函數(shù)被編譯到內(nèi)存時(shí)會(huì)發(fā)現(xiàn)語(yǔ)法錯(cuò)誤。一旦發(fā)現(xiàn)語(yǔ)法錯(cuò)誤,MATLAB立即標(biāo)志這些錯(cuò)誤,并提供有關(guān)所遇到的錯(cuò)誤類型,以及發(fā)生錯(cuò)誤處M文件的行數(shù)。給定這些反饋信息,就很容易糾正這些錯(cuò)誤。運(yùn)行時(shí)的錯(cuò)誤是指當(dāng)程序試圖執(zhí)行一個(gè)系統(tǒng)不能運(yùn)行的動(dòng)作時(shí)導(dǎo)致的錯(cuò)誤。當(dāng)發(fā)現(xiàn)運(yùn)行錯(cuò)誤時(shí),MATLAB把控制權(quán)返回給命令窗口和MATLAB的工作空間,失去了對(duì)發(fā)生錯(cuò)誤的函數(shù)空間的訪問(wèn)權(quán),用戶不能詢問(wèn)函數(shù)工作空間中的內(nèi)容排除問(wèn)題。因此,即使MATLAB標(biāo)志了運(yùn)行錯(cuò)誤,但找出錯(cuò)誤一般比較困難。
含有選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的程序,比只含簡(jiǎn)單的順序結(jié)構(gòu)的程序出錯(cuò)的概率大得多。3.5.2NaNs錯(cuò)誤、除數(shù)為0的處理
1.NaNs錯(cuò)誤
當(dāng)一些操作結(jié)果導(dǎo)致空矩陣或NaNs時(shí),最容易發(fā)生運(yùn)行錯(cuò)誤,任何有關(guān)NaNs的操作都返回NaNs值。因此,如果有可能出現(xiàn)NaNs結(jié)果,則當(dāng)出現(xiàn)NaNs時(shí),最好運(yùn)用邏輯函數(shù)isnan()來(lái)執(zhí)行一些缺省操作。語(yǔ)法如下:
TF=isnan(A):返回一個(gè)與A大小相同的數(shù)組,包含邏輯1(即true),元素為NaN;邏輯0(即false),元素不為NaN。對(duì)于一個(gè)復(fù)數(shù)z,如果z的實(shí)數(shù)或虛數(shù)部分是NaN,isnan(z)返回1。如果z的實(shí)數(shù)或虛數(shù)部分都是有限或Inf,isnan(z)返回0。例如:
>>a=[-2-1012]
>>isnan(1./a)
Warning:Dividebyzero.
ans=
00000
因?yàn)榭站仃嚍榱憔S,所以對(duì)空矩陣尋址常常導(dǎo)致錯(cuò)誤。函數(shù)find()表示了可產(chǎn)生空矩陣結(jié)果的一般情況。如果函數(shù)find()的空矩陣輸出用于索引其他數(shù)組,所返回的值也將是空的。這樣,空矩陣具有傳播性質(zhì)。例如:
>>x=pi*(1:4)
>>i=find(x>20)
>>y=2*x(i)
x=
3.14166.28329.424812.5664
i=
Emptymatrix:1-by-0
y=
Emptymatrix:1-by-0很清楚,當(dāng)希望y具有有限維數(shù)和值時(shí),可能發(fā)生運(yùn)行錯(cuò)誤。當(dāng)執(zhí)行一個(gè)操作或使用可返回空結(jié)果的函數(shù)時(shí),邏輯函數(shù)isempty()有利于為空矩陣定義一個(gè)缺省值,這樣可避免運(yùn)行錯(cuò)誤。語(yǔ)法如下:
TF=isempty(A):判斷數(shù)組(矩陣)A是否空。如果A是一個(gè)空的數(shù)組,返回邏輯true(1),否則為邏輯false(0)。空數(shù)組至少有一個(gè)維度的大小為零,例如,0?×?0或0?×?5。
2.除數(shù)為0的處理
除數(shù)為0是MATLAB編程的調(diào)試和分析中經(jīng)常遇到的問(wèn)題,對(duì)該問(wèn)題的解決,可以使程序開發(fā)事半功倍。例如:
>>x=(-3:3)/3
x=
-1.0000-0.6667-0.333300.33330.66671.0000
由于x的第4個(gè)元素為0,當(dāng)把x作為除數(shù)進(jìn)行除法運(yùn)算時(shí),就出現(xiàn)了除數(shù)為0的情況,MATLAB會(huì)發(fā)出除數(shù)為0的警告,并在該位置給出NaN的結(jié)果(
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年新版中國(guó)工業(yè)氧氣瓶項(xiàng)目可行性研究報(bào)告
- 2024-2030年新版中國(guó)不銹鋼平盤項(xiàng)目可行性研究報(bào)告
- 2024-2030年撰寫:中國(guó)雙輥清彈機(jī)行業(yè)發(fā)展趨勢(shì)及競(jìng)爭(zhēng)調(diào)研分析報(bào)告
- 2024-2030年撰寫:中國(guó)二羥丙茶堿項(xiàng)目風(fēng)險(xiǎn)評(píng)估報(bào)告
- 2024-2030年安達(dá)通膜衣錠公司技術(shù)改造及擴(kuò)產(chǎn)項(xiàng)目可行性研究報(bào)告
- 2024-2030年國(guó)家甲級(jí)資質(zhì):中國(guó)抽氣盤融資商業(yè)計(jì)劃書
- 2024-2030年國(guó)家甲級(jí)資質(zhì):中國(guó)固廢處理融資商業(yè)計(jì)劃書
- 2024-2030年反芻開胃散公司技術(shù)改造及擴(kuò)產(chǎn)項(xiàng)目可行性研究報(bào)告
- 2024-2030年單乙醇胺(MEA)行業(yè)市場(chǎng)現(xiàn)狀供需分析及重點(diǎn)企業(yè)投資評(píng)估規(guī)劃分析研究報(bào)告
- 幼兒學(xué)英語(yǔ)課程設(shè)計(jì)
- 《中國(guó)園林發(fā)展》課件
- 菏澤學(xué)院教育科學(xué)研究方法(專升本)復(fù)習(xí)題
- 小學(xué)科技節(jié)活動(dòng)總結(jié)15篇
- 船運(yùn)居間協(xié)議合同范例
- 質(zhì)控競(jìng)聘課件
- 2024-2025學(xué)年統(tǒng)編版道德與法治三年級(jí)上冊(cè) 期末測(cè)試卷(含答案)
- 教育學(xué)原理項(xiàng)賢明第九章教師與學(xué)生
- 嚴(yán)禁在學(xué)校組織宗教活動(dòng)
- 2023-2024學(xué)年廣東省湛江市赤坎區(qū)某中學(xué)七年級(jí)上學(xué)期期末數(shù)學(xué)試卷及參考答案
- (完整)蘇教版小學(xué)五年級(jí)上冊(cè)數(shù)學(xué)口算練習(xí)題
- 2024年云南省中考物理試題含答案
評(píng)論
0/150
提交評(píng)論