matlab 程序设计
1、M文件
??用Matlab 語言編寫的程序,稱為M文件,后綴名為 .M。實(shí)質(zhì)上M文件也就是一個(gè)文本文件,可以使用任何編輯程序來建立和編輯,默認(rèn)使用Matlab提供的文本編輯器打開進(jìn)行編輯。
??在進(jìn)一步探討M文件之前,我們先回顧一下我們上一篇blogMatlab基礎(chǔ)知識(shí)中講解使用了那些類型的文件:
- 內(nèi)存變量文件 后綴名.mat
- 用 .M 文件 生成矩陣
- 用.dat文件生成矩陣
??也就是說我們已經(jīng)用過 .M文件了,而且上一次我們存的是數(shù)據(jù) mydata。這就要引出我們下面要說的了: M文件的分類
??M文件分為兩類:
- 命令文 件(Script File)
- 函數(shù)文件(Function File)
主要區(qū)別如下:
(1)命令文件沒有輸入?yún)?shù),也不返回輸出參數(shù), 而函數(shù)文件可以帶輸入?yún)?shù),也可返回輸出參數(shù)。
(2)命令文件對(duì)MATLAB工作空間中的變量進(jìn)行 操作,文件中所有命令的執(zhí)行結(jié)果也完全返回到工作空間中,而函數(shù)文件中定義的變量為局部變量, 當(dāng)函數(shù)文件執(zhí)行完畢時(shí),這些變量被清除。
(3)命令文件可以直接運(yùn)行,在MATLAB命令窗口輸入命令文件的名字,就會(huì)順序執(zhí)行命令文件中的命令,而函數(shù)文件不能直接運(yùn)行,而要以函數(shù)調(diào)用的方式來調(diào)用它。
PS:如果你理解了他們之間的區(qū)別,那么你現(xiàn)在應(yīng)該清楚的知道我們?cè)谏弦黄恼轮惺褂玫?M文件屬于 命令文件。
下面就來詳細(xì)講講函數(shù)文件
??函數(shù)文件是另一種形式的M文件,每一個(gè)函 數(shù)文件都定義一個(gè)函數(shù)。 事實(shí)上,MATLAB提供的標(biāo)準(zhǔn)函數(shù)大部分 都是由函數(shù)文件定義的。基本結(jié)構(gòu)如下:
說明:
??以function開頭的一行為引導(dǎo)行,表示該M 文件是一個(gè)函數(shù)文件。函數(shù)名的命名規(guī)則與變量名相同。輸入形參為函數(shù)的輸入?yún)?shù),輸出形參為函 數(shù)的輸出參數(shù)。當(dāng)輸出形參多于一個(gè)時(shí),則應(yīng)該用方括號(hào)括起來。 函數(shù)文件名通常由函數(shù)名再加上擴(kuò)展名.m組成,不過函數(shù)文件名與函數(shù)名也可以不相同。當(dāng)兩者不同時(shí),MATLAB將忽略函數(shù)名而確認(rèn)函數(shù)文件名,因此,調(diào)用時(shí)使用函數(shù)文件名。
??注釋非常極其重要,不寫注釋的代碼我基本是不愿意看的。標(biāo)準(zhǔn)注釋說明包括如下3部分內(nèi)容:
- 緊隨函數(shù)文件引導(dǎo)行之后以%開頭的第一注釋行。 這一行一般包括大寫的函數(shù)文件名和函數(shù)功能簡(jiǎn)要 描述,供lookfor關(guān)鍵詞查詢和help在線幫助用。
- 第一注釋行及之后連續(xù)的注釋行。通常包括函數(shù) 輸入輸出參數(shù)的含義及調(diào)用格式說明等信息,構(gòu)成 全部在線幫助文本
- 與在線幫助文本相隔一空行的注釋行。包括函數(shù) 文件編寫和修改的信息,如作者、修改日期、版本 等內(nèi)容,用于軟件檔案管理。
??MATLAB在函數(shù)調(diào)用上有一個(gè)與一般高級(jí)語言不同之處,就是函數(shù)所傳遞參數(shù)數(shù)目的可調(diào)性。 在調(diào)用函數(shù)時(shí),MATLAB用兩個(gè)永久變量nargin 和nargout分別記錄調(diào)用該函數(shù)時(shí)的輸入實(shí)參和輸出 實(shí)參的個(gè)數(shù)。只要在函數(shù)文件中包含這兩個(gè)變量, 就可以準(zhǔn)確地知道該函數(shù)文件被調(diào)用時(shí)的輸入/輸出 參數(shù)個(gè)數(shù),從而決定函數(shù)如何進(jìn)行處理。
再提一個(gè)小點(diǎn),如果在函數(shù)中想使用全局變量,用global var_name
2、程序控制結(jié)構(gòu)
??程序控制結(jié)構(gòu)對(duì)學(xué)過C++,學(xué)過Java的同學(xué)來說肯定是 a piece of cake ,這里簡(jiǎn)單的說一下Matlab的程序控制結(jié)構(gòu)。
- 順序結(jié)構(gòu)
- 選擇結(jié)構(gòu)
??switch子句后面的表達(dá)式應(yīng)為一個(gè)標(biāo)量 或一個(gè)字符串,case子句后面的結(jié)果不僅可以為一個(gè)標(biāo)量或一個(gè)字符串,而且還可以為 一個(gè)將多個(gè)結(jié)果用大括號(hào)括起來的單元數(shù)據(jù) (Cell)。如果case子句后面的結(jié)果為一個(gè) 單元數(shù)據(jù),則表達(dá)式的值等于該單元數(shù)據(jù)中 的某個(gè)元素時(shí),執(zhí)行相應(yīng)的語句組。
try 語句塊1 catch 語句塊2 end??try語句先試探性執(zhí)行語句塊1,如果語句塊1在執(zhí)行 過程中出現(xiàn)錯(cuò)誤,則將錯(cuò)誤信息賦給保留的lasterr 變量,并轉(zhuǎn)去執(zhí)行語句塊2。
- 循環(huán)結(jié)構(gòu)
劃重點(diǎn)
//執(zhí)行過程是依次將矩陣的各列元素賦給循環(huán)變 量,然后執(zhí)行循環(huán)體語句,直至各列元素處理完畢 for 循環(huán)變量=矩陣表達(dá)式 循環(huán)體語句 end while(條件) 循環(huán)體語句 End??最后提一下兩個(gè)循環(huán)的老朋友,break和continue:break語句用于終止循環(huán)的執(zhí)行。當(dāng)在循環(huán) 體內(nèi)執(zhí)行到該語句時(shí),程序?qū)⑻鲅h(huán),繼 續(xù)執(zhí)行循環(huán)語句的下一語句。continue語句控制跳過循環(huán)體中的某些語 句。當(dāng)在循環(huán)體內(nèi)執(zhí)行到該語句時(shí),程序?qū)?跳過循環(huán)體中所有剩下的語句,繼續(xù)下一次循環(huán)。
程序性能分析與優(yōu)化
??這是程序設(shè)計(jì)中個(gè)非常重要的一步,這就好比漂亮的車子有很多,但是錢不夠一切都是然并卵;而對(duì)于程序他需要考慮的是對(duì)資源的占用、時(shí)間的消耗。一個(gè)好的程序能夠在占用最少資源的情況好快速高效的完成規(guī)定業(yè)務(wù)。
??在matlib中,Profiler性能評(píng)估器、tic函數(shù)和toc函數(shù)能分析程序各環(huán)節(jié)的耗時(shí)情況,分析報(bào)告能幫助用戶尋 找影響程序運(yùn)行速度的“瓶頸”所在,以便于進(jìn)行程序優(yōu)化。例如,通過函數(shù)文件性能評(píng)估器(Profiler)用戶可以很 方便地了解程序執(zhí)行過程中各函數(shù)及函數(shù)中的每條 語句所耗費(fèi)的時(shí)間,從而有針對(duì)性地改進(jìn)程序,提 高程序的運(yùn)行效率。
matlab 程序優(yōu)化常見思路
向量化
??這是一個(gè)非常重要的編程思想,因?yàn)镚PU和CPU都含有并行化指令或者稱之為SIMD(single instruction multiple data)指令。向量化能夠充分利用并行化從而更加快速的計(jì)算,這點(diǎn)在GPU和CPU上面都是成立的,GPU更加擅長(zhǎng)SIMD計(jì)算但是CPU實(shí)際上也不差,只是沒有GPU擅長(zhǎng)而已。預(yù)分配內(nèi)存空間
??通過在循環(huán)之前預(yù)分配向量或數(shù)組的內(nèi)存空間可以提高for循環(huán)的處理速度。減小運(yùn)算強(qiáng)度
??采用運(yùn)算量更小的表達(dá)式,一般來說,乘法比乘方運(yùn)算快,加法比乘法運(yùn)算快,位運(yùn)算比求余運(yùn)算快。
總結(jié)
以上是生活随笔為你收集整理的matlab 程序设计的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: R语言入门2---R语言基础绘图
- 下一篇: find函数matlab_从零开始的ma