數(shù)學(xué)軟件1matlab語言程序設(shè)計(jì)_第1頁
數(shù)學(xué)軟件1matlab語言程序設(shè)計(jì)_第2頁
數(shù)學(xué)軟件1matlab語言程序設(shè)計(jì)_第3頁
數(shù)學(xué)軟件1matlab語言程序設(shè)計(jì)_第4頁
數(shù)學(xué)軟件1matlab語言程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、2022/9/2第二章 MATLAB程序設(shè)計(jì)Chapter Two: MATLAB ProgrammingMATLAB 語 言MATLAB Language2022/9/2MATLAB ProgrammingMATLAB具有以下兩種操作方式: 1.命令行交互操作方式 2. M文件編程模式Neither of the two can be dispensed.(二者缺一不可)2022/9/2M文件是用Matlab語言編寫的原程序(腳本),是一系列命令的集合。有如下兩類M文件。1. 命令文件它沒有輸入?yún)?shù)和輸出參數(shù)。它可以通過鍵入文件名在命令窗口運(yùn)行。2. 函數(shù)文件它可以有輸入?yún)?shù)和輸出參數(shù)。它需

2、要由命令文件或命令窗口的命令調(diào)用。一. M文件(M-File)2022/9/21. 建立與編輯M文件(Setting up and editing M-file)建立M文件(Setting up new M-file) MATLAB default windows File New M-file MATLAB7.0或更低版本新建腳本(script) 更高版本的MATLAB 編輯M-文件(Editing existing M-file) MATLAB default windows File Open M-file.一. M文件(M-File)2022/9/2.命令文件(Command file

3、)命令文件是包含一個(gè)或多個(gè)命令的文件。用戶可以把文件名作為命令執(zhí)行它。命令解釋器可以按順序接受命令文件中的命令?!纠?】 建立一個(gè)命令文件將變量a,b的值互換。 先建立e31.m程序文件: a=1:9; b=11,12,13;14,15,16;17,18,19; c=a; a=b; b=c; a, b在MATLAB命令窗口中輸入e31,將會(huì)執(zhí)行該命令文件。問題:如何只使用a, b兩個(gè)變量實(shí)現(xiàn)a, b的交換?一. M-文件(M-File)答:當(dāng)a, b是同維數(shù)組時(shí):a=a+b; b=a-b; a=a-b2022/9/21. Input函數(shù)功能: 給出文本字符串提示并等待鍵盤輸入。格式: A=in

4、put(prompt message,option);注釋: s 選項(xiàng)指定字符串輸入。舉例: xm=input(Whats your name:, s)注意Whats your name:, 字符串中有時(shí)要使用!二數(shù)據(jù)輸入輸出(Data input/output)【例2】求一元二次方程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)將該程序以aa.m文件存盤,然后運(yùn)行aa.m文件。2022/9/22. Pause函數(shù)功能: Su

5、spend the execution of a running program.格式: pause(seconds of delay) Note:如果省略延遲時(shí)間,直接使用pause,則將暫停程序,直到用戶按任一鍵后程序繼續(xù)執(zhí)行。若要強(qiáng)行中止程序的運(yùn)行可使用Ctrl+C命令。 3. Disp 函數(shù)功能: Display the array without printing the array name. 格式: disp(string or matrix)舉例: A=Hello, MATLAB; disp(A)輸出為:Hello, MATLAB %無空行無變量名%二數(shù)據(jù)輸入輸出(Data i

6、nput/output)2022/9/24. Fprintf函數(shù)格式:Count = fprintf(Fid, Format, A, .) 功能:將格式應(yīng)用于數(shù)組A及省略的其他數(shù)組的所有元素的實(shí)數(shù)部分,按列順序?qū)?shù)據(jù)寫入文本文件或屏幕。二數(shù)據(jù)輸入輸出(Data input/output)格式字符串作用%dDisplay value as an integer.%eDisplay value in exponential format.%fDisplay value in floating point format.%sDisplay character vector or string arr

7、ay. .rCarriage returnnSkip to a new line.Format=格式字符串,其用法和作用見下表。Fid為fopen函數(shù)打開文件時(shí)生成的文件標(biāo)識(shí)符,去除Fid或令Fid=1則輸出到屏幕。(請?jiān)囋嘑id=2的結(jié)果)2022/9/25. Keyboard命令 遇到keyboard命令時(shí),將“控制權(quán)”交給鍵盤,用戶可以從鍵盤輸入各種MATLAB命令。僅當(dāng)用戶輸入return命令后,“控制權(quán)”才交還給程序。它與input的區(qū)別是:它允許輸入任意多個(gè)MATLAB命令,而input只能輸入賦給變量的“值”。二數(shù)據(jù)輸入輸出(Data input/output)Matlab數(shù)據(jù)的

8、最大有效值是1. 88*21023, 或1.797693134*10308 溢出上限為21024 2022/9/2Including if statement and switch statement.1. 判斷語句 (if.else.end)格式1: if 表達(dá)式 執(zhí)行代碼塊 end三程序設(shè)計(jì)(program design)格式2: if 表達(dá)式1 執(zhí)行代碼塊1 else 執(zhí)行代碼塊2 end(一)選擇結(jié)構(gòu) (Selective structure)2022/9/2(一)選擇結(jié)構(gòu) (Selective structure)格式3:if 表達(dá)式1 執(zhí)行代碼塊1elseif 表達(dá)式2 執(zhí)行代碼塊

9、2elseif 表達(dá)式m 執(zhí)行代碼塊melse 執(zhí)行代碼塊m+1end三程序設(shè)計(jì)(program design)其中可以包含任意多個(gè) elseif 語句,且 elseif 和 else 均可省略。2022/9/2【例3】 輸入三角形的三條邊,求面積。程序如下:A=input(請輸入三角形的三條邊:);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(三角形面積為:, num2str(s); %將s轉(zhuǎn)換成字符串else disp(

10、不能構(gòu)成一個(gè)三角形。)end運(yùn)行:請輸入三角形的三條邊:4 5 6結(jié)果:三角形面積為9.9216(一)選擇結(jié)構(gòu) (Selective structure)三程序設(shè)計(jì)(program design)2022/9/2num2str 將數(shù)字轉(zhuǎn)換為數(shù)字字符串str2num 將數(shù)字字符串轉(zhuǎn)換為數(shù)字mat2str 將數(shù)組轉(zhuǎn)換成字符串int2str 把數(shù)值數(shù)組轉(zhuǎn)換為整數(shù)數(shù)字組成的字符數(shù)組lower(str) 將字符串中的字母轉(zhuǎn)換成小寫upper(str) 將字符串中的字母轉(zhuǎn)換成大寫strcmp 比較兩個(gè)字符串是否完全相等, 是,返回真,否則,返回假strncmp 比較兩個(gè)字符串前n個(gè)字符是否相等, 是,返回

11、真,否則,返回假strcmpi 比較兩個(gè)字符串是否完全相等,忽略字母大小寫strncmpi 比較兩個(gè)字符串前n個(gè)字符是否相等, 忽略字母大小寫(一)選擇結(jié)構(gòu) (Selective structure)三程序設(shè)計(jì)(program design)2022/9/2【例4】輸入一個(gè)字符,若為大寫字母,則輸出其后繼字符,若為小寫字母,則輸出其前導(dǎo)字符,若為其他字符則原樣輸出。c=input(,s);if c=A & c=a& c=z disp(setstr(abs(c)-1);else disp(c);end(一)選擇結(jié)構(gòu) (Selective structure)三程序設(shè)計(jì)(program desig

12、n)2022/9/22.分支語句(Switch statement)分支語句的結(jié)構(gòu)為:switch 分支表達(dá)式 case 條件表達(dá)式 語句序列 case條件表達(dá)式1, 條件表達(dá)式2, 條件表達(dá)式3, 語句序列 otherwise 語句序列end(一)選擇結(jié)構(gòu) (Selective structure)三程序設(shè)計(jì)(program design)分支表達(dá)式是一個(gè)變量,可以是數(shù)值變量,也可以是字符串變量。當(dāng)分支表達(dá)式取值與條件表達(dá)式相同時(shí)則執(zhí)行相應(yīng)的語句序列。否則,執(zhí)行otherwise后面的語句序列。注意:otherwise可以省略! 引入元胞(cell)數(shù)組,引入普通數(shù)組。2022/9/2【例5

13、】 根據(jù)變量 num 的值來決定顯示的內(nèi)容。 num=input(請輸入一個(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(You are a student.); end(一)選擇結(jié)構(gòu) (Selective structure)三程序設(shè)計(jì)(program design)2022/9/2【例6】某商場對顧客所購買的商品實(shí)行打折銷售,標(biāo)準(zhǔn)如下(商品價(jià)格用price來表示): price200 沒有折

14、扣 200price500 3%折扣 500price1000 5%折扣 1000price2500 8%折扣 2500price5000 10%折扣 5000price 14%折扣輸入所售商品的價(jià)格,求其實(shí)際銷售價(jià)格。(一)選擇結(jié)構(gòu) (Selective structure)三程序設(shè)計(jì)(program design)2022/9/2price=input(請輸入商品價(jià)格);switch fix(price/100) %fix()向0取整 See round() case 0,1 %價(jià)格小于200 rate=0; case 2,3,4 %價(jià)格大于等于200但小于500 rate=3/100;

15、case num2cell(5:9) %價(jià)格大于等于500但小于1000 rate=5/100; case num2cell(10:24) %價(jià)格大于等于1000但小于2500 rate=8/100; case num2cell(25:49) %價(jià)格大于等于2500但小于5000 rate=10/100; otherwise %價(jià)格大于等于5000 rate=14/100;endprice=price*(1-rate) %輸出商品實(shí)際銷售價(jià)格(一)選擇結(jié)構(gòu) (Selective structure)三程序設(shè)計(jì)(program design)2022/9/2語句格式為: try 語句組1 cat

16、ch 語句組2 endtry語句先試探性執(zhí)行語句組1,如果語句組1在執(zhí)行過程中出現(xiàn)錯(cuò)誤,則將錯(cuò)誤信息賦給保留的lasterr變量,并轉(zhuǎn)去執(zhí)行語句組2。(一)選擇結(jié)構(gòu) (Selective structure)三程序設(shè)計(jì)(program design)3. 檢測語句(try statement)2022/9/2【例7】矩陣乘法運(yùn)算要求兩矩陣的維數(shù)相容,否則會(huì)出錯(cuò)。先求兩矩陣的乘積,若出錯(cuò),則自動(dòng)轉(zhuǎn)去求兩矩陣的點(diǎn)乘。A=1,2,3;4,5,6; B=7,8,9;10,11,12;try C=A*B;catch C=A.*B;enddisp(C)lasterr %顯示出錯(cuò)原因(一)選擇結(jié)構(gòu) (Sel

17、ective structure)三程序設(shè)計(jì)(program design)3. 檢測語句(try statement)2022/9/2(二)循環(huán)結(jié)構(gòu) (Loop structure)循環(huán)結(jié)構(gòu)包含for語句和while語句。1. For語句(for statenent)格式: for loop_var = expr1:expr2:expr3 語句序列(循環(huán)體) end 注釋: expr1是循環(huán)變量loop_var的初值,expr2是步長,expr3是終值。當(dāng)expr2=1時(shí)可將其省略,變成 loop_var = expr1:expr3.三程序設(shè)計(jì)(program design)2022/9/2

18、2. while語句(while statement)格式: while 條件 語句序列(循環(huán)體) end當(dāng)條件為真(值非零)時(shí)執(zhí)行語句序列.【例8】 y=1+1/3+1/(2*n-1) ,求: (1) y=3 break; end i=i+1; end n=i-1 y=y-f(二)循環(huán)結(jié)構(gòu) (Loop structure)三程序設(shè)計(jì)(program design)2022/9/23.循環(huán)嵌套 (Nested loop) 一個(gè)循環(huán)包含在另一循環(huán)中時(shí)稱為循環(huán)嵌套,也叫多重循環(huán)。嵌套重?cái)?shù)可以是任意正整數(shù)。根據(jù)嵌套數(shù)分別稱為雙循環(huán)、三循環(huán)等。內(nèi)循環(huán)結(jié)構(gòu)稱為內(nèi)環(huán),外循環(huán)結(jié)構(gòu)稱為外環(huán)。(二)循環(huán)結(jié)構(gòu) (

19、Loop structure)三程序設(shè)計(jì)(program design)2022/9/2【例9】求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; endendprime %變量prime存放素?cái)?shù)(二)循環(huán)結(jié)構(gòu) (Loop structure)三程序設(shè)計(jì)(program design)3.循環(huán)嵌套 (Nested loop) 2022/9/2 與循環(huán)結(jié)構(gòu)相關(guān)的語句還有br

20、eak語句和continue語句。它們一般與if語句配合使用。 break語句用于終止循環(huán)的執(zhí)行。當(dāng)在循環(huán)體內(nèi)執(zhí)行到該語句時(shí),程序?qū)⑻鲅h(huán),不再執(zhí)行該循環(huán)的任何操作,接著執(zhí)行該循環(huán)語句下面的語句。 continue語句通常用在循環(huán)控制中,包括for循環(huán)和while循環(huán),用于結(jié)束當(dāng)次循環(huán),繼續(xù)執(zhí)行下一次循環(huán),但不結(jié)束當(dāng)前循環(huán)。一般continue語句和if語句相結(jié)合,當(dāng)滿足一定條件時(shí)執(zhí)行 continue 語句。(二)循環(huán)結(jié)構(gòu) (Loop structure)三程序設(shè)計(jì)(program design)4. break語句和continue語句2022/9/2【例10】求100,200之間第一個(gè)

21、能被21整除的整數(shù)。程序如下: for n=100:200 if rem(n,21)=0 continue end breakendn(二)循環(huán)結(jié)構(gòu) (Loop structure)三程序設(shè)計(jì)(program design)4. break語句和continue語句2022/9/2函數(shù)文件是另一種形式的M文件,每一個(gè)函數(shù)文件都定義一個(gè)函數(shù)。事實(shí)上,MATLAB提供的標(biāo)準(zhǔn)函數(shù)大部分都是由函數(shù)文件定義的。四函數(shù)文件(function file)(一)函數(shù)文件格式 (function file form)函數(shù)文件由function命令引導(dǎo),其格式為: function y1,y2,yn=fname(

22、x1,x2,xm) annotate function body return 注:函數(shù)名的命名規(guī)則與變量名相同。y1,y2,ym為輸出形參(參數(shù))表,x1,x2,xn為輸入形參(參數(shù))表。當(dāng)輸出形參為1個(gè)時(shí),可以省略方括號(hào)。2022/9/2四函數(shù)文件(function file)(一)函數(shù)文件格式 (function file form) 注意:任何一個(gè)函數(shù)文件中, function 命令都必須是第一個(gè)可執(zhí)行命令,其前面不能有任何可執(zhí)行語句。 Return 命令結(jié)束它所在函數(shù)的執(zhí)行,而把控制轉(zhuǎn)至主調(diào)函數(shù)或者命令窗口。否則,只有等整個(gè)被調(diào)用函數(shù)執(zhí)行完畢時(shí)才會(huì)轉(zhuǎn)出error(message)顯示

23、出錯(cuò)信息message,終止程序。warning(message)顯示告警信息message,程序繼續(xù)運(yùn)行。2022/9/2【例11】 編寫函數(shù)文件求后兩項(xiàng)之和小于任意自然數(shù)n的Fibonacci數(shù)列各項(xiàng)。數(shù)列為1, 1, 2, 3, 5, 8, 13, 21, function f=ffib(n) %求Fibonacci數(shù)列的函數(shù)文件 %f=ffib(n) %1999年9月30日編 f=1,1; i=1; while f(i)+f(i+1)n f(i+2)=f(i)+f(i+1); i=i+1; end f(end)=;將以上函數(shù)文件以文件名ffib.m存盤,然后在MATLAB命令窗口輸入以

24、下命令,可求小于2 000的Fibonacci數(shù)。 ffib(2000)四函數(shù)文件(function file)2022/9/2(二)函數(shù)調(diào)用 (function call) 函數(shù)文件編制好后,就可調(diào)用函數(shù)進(jìn)行計(jì)算了。如上面定義ffib函數(shù)后,調(diào)用它求小于2000的Fibonacci數(shù)。函數(shù)調(diào)用的一般格式是:fname(x1,x2,xm) y1,y2,yn=fname(x1,x2,xm)其中:y1,y2,yn為輸出實(shí)參表 x1,x2,xm為輸入實(shí)參表四函數(shù)文件(function file)2022/9/2【例12】 利用函數(shù)文件,實(shí)現(xiàn)直角坐標(biāo)(x,y)到極坐標(biāo)(, )的轉(zhuǎn)換。 Function

25、 file: tran.m: function gama,theta=tran(x,y) gama=sqrt(x*x+y*y); theta=atan(y/x); Main programmain1.m: x=input(Please input x=:); y=input(Please input y=:); gam,the=tran(x,y); gam the已知轉(zhuǎn)換公式如下:矢徑: = sqrt(x*x+y*y)幅角: = atan(y/x)四函數(shù)文件(function file)2022/9/2【例13】 利用函數(shù)的遞歸調(diào)用(調(diào)用自己),求n!。 function f=factor(n

26、) if n=1 f=1; else f=factor(n-1)*n; end return; %返回 Main program main2.m for i=1:10 fac(i)=factor(i); end facRunning results: fac = Columns 1 through 6 1 2 6 24 120 720 Columns 7 through 10 504 40320 362880 3628800注:Matlab的factorial()函數(shù)計(jì)算正整數(shù)的階乘。factorial(4)=4!=24prod(X)為X的所有元素之積。四函數(shù)文件(function file)

27、2022/9/2利用函數(shù)的遞歸調(diào)用,求n!的改進(jìn)程序。 function f=factor1(n) %首先判斷輸入?yún)?shù)n是否為非負(fù)整數(shù) if (isnumeric(n)=0) | (n0) | (n=round(n) disp(參數(shù)必須是非負(fù)整數(shù)) return; %返回 end if ns=clock;A=1,2;3,4;B=5,6;7,8;x=A/B,e=clock; t=e(6)-s(6) date %返回當(dāng)前日期 日-月-年,例如 07-Oct-2015,時(shí)間超過一天時(shí)要用它計(jì)時(shí)。六計(jì)時(shí)2022/9/2 num2str Convert number to string數(shù)值轉(zhuǎn)字符串。 int2str Convert integer to string整數(shù)轉(zhuǎn)字符串。 mat2str Convert matrix to string矩陣轉(zhuǎn)字符串。 str2num Convert string to number字符串轉(zhuǎn)數(shù)值。 hex2num Convert hexadecimal number string to double-precision number十六進(jìn)制數(shù)字串轉(zhuǎn)雙精度數(shù)值。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論