來源: http://www.cnblogs.com/asxinyu/p/Basic_Matlab_Experience.htmlhtml
不記得上一次寫超過20行的matlab程序是何時了,大概是2013年吧,那個時候寫過2篇文章,實際用到了 一些matlab的內容,超過200行的matlab程序應該要追溯到2011年了,最近爲了幫助網友解決我博客一篇文章的問題,把本身2011年的matlab翻出來,感觸頗多,一言難盡,看到昔日熟悉的代碼,我竟然能理解,而後還能修修改過,感受好多年沒用了,連基本函數都忘記了,仍是碰到問題仍是會寫會改,這裏面也說明了編程不簡單是一個記憶和經驗的問題,更重要的是學習的方法和解決問題方法的問題。因此決定寫這篇文章把我說認識的Matlab的東西寫出來,也許再過一些年,我將老去,也不會再用Matlab了,這樣的話,算是給10年Matlab使用之路一個終結吧。編程
本站Matlab技術文章目錄:【目錄】Matlab和C#混合編程文章目錄c#
本文原文地址:接觸Matlab10年後的一個總結,隨時使用Matlab而掌握的一些要點數組
準確的說這篇文章不是給徹底的編程新手,特別是之前沒有過必定編程經驗的人準備的。併發
文章的適合對象是:已經有必定編程基礎的人,若是你想用Matlab來快速的完成算法驗證,以及科研學術研究等。編程語言
文章的範圍很大,信息量很大,個別問題新手不是很理解,請自行百度。至於有編程經驗的,本文提到的大部份內容應該是能夠理解的,根據思路,打開Matlab軟件也應該是能夠選擇的。編輯器
本文選擇的Matlab版本是:2012a,我的以爲這個版本一直都還不錯吧。新的版本雖然菜單中文化,但那個UI真是醜爆了,無力吐槽,也不必換。分佈式
另外,這裏提醒廣大Matlab使用者,對於80%人來講,低版本真的夠了,不必追求過高,特別是那些連破解或者工具箱選擇都不知道啥意思的,選擇一個低版本,麻煩事情可能會更少。新版本的破解不少不全面,本身安裝的時候要注意。不少人碰到這個問題,工具箱都沒安裝,你要找函數,怎麼找獲得。。。 函數
在國內,目前使用Matlab的主要人羣是學生和科研單位,商業環境的使用我見過一些,但不多。就不作推測和評價了。
Matlab如何如此受歡迎,我總結是4個方面:
1.高效的數值計算功能。這一點是出類拔萃,目前其餘編程語言以及其餘相似的數學軟件無可替代;
2.完備的計算結果和編程可視化功能。這一點一樣是出類拔萃,無可替代;個人博客有Matlab專欄,大部分是C#調用Matlab進行混合編程的問題,每年都有大量的學生和其餘工程人員有這個需求:直接調用Matlab的Figure。。。潛入到WinForm中去。。。這和Matlab的結果優秀的可視化功能密不可分;
3.友好完善的編程開發環境,以及接近數學表達式的天然化m語言。很是易於學習和掌握;Matlab軟件就是一個編程開發環境,自帶的m語言簡單易用,有編程開發經驗的人應該是很是容易掌握的;
4.功能豐富的應用工具箱與Help系統,目前Matlab的工具箱總數已經超過80個,覆蓋了數學,統計,仿真,電子,生物信息學,金融,測試等等各個方面。與其說Matlab強大,不如說它的工具箱強大,每個工具箱都包括與涵蓋了行業內經典的一些算法和處理方法。省去了大量的麻煩,因此對於科研來講,快速的驗證本身的想法,實現算法並進行測試。
若是要使用Matlab,安裝Matlab必不可少,下面是Matlab的主界面,下面介紹幾個主要窗口的做用。本文使用的是Matlab2012a,其餘版本若是是Ribbon UI,除了菜單不同,窗口也大概相似的。
上面就是Matlab的主界面,我用的是2012a版本,新版本2013後可能有些改變,感受更醜。。仍是這個習慣。但大概功能都差很少。看看每一個部分的功能吧,菜單欄暫時就不說了,看名字通常都能懂。具體說說上圖各個部分的做用。
1.Current Folder:當前路徑。是當前matlab工做文件夾的路徑,這個通常啓動改好後,不會變更,做用不大,但有時候找文件用得上;這裏會加載你常用的Matlab目錄,能夠經過下拉箭頭快速切換不一樣的Matlab工做路徑;
2.Current Folder:也是當前的工做文件夾的文件顯示,這裏顯示文件夾的全部資源,比較好懂,須要打開文件的時候,雙擊對應m文件就能夠了;
3.單個m文件或者函數,點擊以後,會在4中顯示包含的函數,就好比VS顯示類中的屬性,方法之類的,能夠了解文件結構;
4.是3中選擇文件中包括的函數,不用打開文件夾,就能夠看到m文件中的函數結構;
5.Command Window 主窗口,也就是輸入命令的地方,最最重要的地方吧,作一些簡單的測試,學習命令的時候均可以在這裏面進行,不過習慣後更喜歡用m文件,習慣就知道了;
6.WorkSpace,工做變量空間,主要是顯示當前matlab中存在的變量的值,包括變量名稱,值,若是是數組,會顯示最大,最小值,這個地方主要是調試程序用的,至關於VS中加斷點後的局部變量的值,只不過這裏顯示更加直觀,很是有用。
7.Command History,歷史命令窗口。這裏有一個小技巧,就是你在命令窗口輸入的命令,這裏都會顯示,並且你還能夠用小鍵盤的,上下鍵來直接跳到前面的命令,測試的時候也更加方便;
常用Matlab的命令或者進行一些簡單的測試,掌握和知道一些常見的命令是頗有必要的,下面這些命令若是記不住,能夠根據功能百度,找到對應的函數,再用,其實很快。熟練以後,也就30秒鐘的事情,多了,也就記住了。
1.clear :清除內存變量和函數,也就是把WorkSpace的變量給清空;
2.clc :清楚當前Matlab命令窗口的內容;至關於清楚屏幕吧,從新開始,簡潔一點,注意clc是不清楚變量的。通常在編寫m文件的時候,不是函數的話,前面通常都要加上 clear;clc; 目的就是在m文件運行的時候,把內存和屏幕都清空,以避免同名稱的變量影響以及屏幕容易觀察;
3.help :這也是最重要的一個函數吧。在想要知道某個函數的相關說明的時候,可使用help 函數名來獲取,固然也能夠打開幫助文檔。不過這種方法是比較快的。
4.zeros:建立1個都爲0的矩陣;ones:建立1個都爲1的矩陣。參數能夠是多維的,例如zeros(2,3)...
5.size:能夠計算矩陣的大小,一樣相關的還有length,size能夠計算不一樣的維上的大小,例如size(A,1)..
6.rand :隨機數生成器,能夠直接使用生成任意緯度的矩陣,例如rand(2,3),也是一個常常用的東西;
6.plot:繪製圖像的操做,具體格式能夠參考幫助。操做應該很是頻繁,作科研的時候,常常要看趨勢,繪圖在matlab是很是常見的一件事情。。。還有一個subplot函數是將一個figure分割爲多個塊來操做。想一想本身在C#中用mschart繪圖,也是醉了。。。不過仍然得堅持,這些年來爲何拋棄matlab,全部matlab能夠乾的事情都拿C#來幹,是一個很遠的話題,之後有機會再說吧。
7.figure,hold on :在使用plot繪圖的時候,默認都是在figure上面,figure能夠新建一個空白圖像,同時還可使用hold on在同一個figure上面繪製多條曲線;
最重要的幾個函數就介紹在這裏吧。要掌握matlab的核心語法,還得看一下基本的matlab矩陣操做的語法,太靈活了 ,掌握幾個基本的就能夠完成不少工做了。
前面已經提到Matlab最重要的一點強大的數值計算功能,不只體現其函數庫的強大,更重要的是其操做語法的靈活性。隨便找一本Matlab的編程入門書籍,確定有這方面的介紹。其實矩陣操做的靈活性,強大到以致於我不敢看,平常只要掌握幾個基本的操做就能夠作不少事情了。特別在這裏特別介紹一下,能夠給你提升很多效率。
在編寫各類算法的時候,常常要對矩陣初始化。例如前面提到的zeros,one,等等都是產生矩陣的方法,一樣還有其餘的產生對角矩陣等方法。這裏特別要提到的是產生數據或者等差數列的方法。例如
a = 1 : 10 ;%產生1-10的步長默認爲1的等差數列; b = 0:0.1:1;%產生0-1的步長爲0.1的等差數量;
是否是很簡潔高效。。。在其餘編程語言,可能本身要封裝一個方法了。而後來調用,可是在matlab裏面,這一切都簡化了。
在matlab中,數組或者叫作矩陣是能夠任意擴充的,不須要其餘,一樣對矩陣的變化易如反掌,不須要那些for循環來進行。看看幾個例子,管中窺豹,你們以此類推:
data = rand(4,4) %初始化1個10*10的隨機矩陣 a = data(:,1) %取data的全部行,第1列 b = data(:,[1,3]) %取全部行,第1,3列 c = data([2,3],[1,2]) %%取第2,3行,以及1,2列
看下面的運行結果,比較直觀:
其餘還有更多,如find就很少說了。。。。這裏只是冰山一角。。
看完上面的語法,有沒有心動?那接下來看看matlab的m語言的一些基本語法。咱們能夠在命令行窗口作一些簡單的測試,但並不適合於開放。當咱們要完成一個完整的邏輯時,那就要用到m文件編輯器了。打開編輯器,界面以下,你就能夠寫了。。。這個開發環境也很強大,能夠斷點調試,分步執行。這是一篇總結性的文章,我身邊也沒有了matlab書籍,因此想到哪寫到哪吧。
1.matlab中變量名大小寫敏感的,官方的函數裏面也沒有所謂的命名規則,基本都是小寫開頭,習慣就行了
2.注意,若是一行語句結束,後面不加;號,就會直接在Command Window顯示變量的值,加分號就只顯示在WorkSpace了,在命令行窗口也是這樣的,不信你能夠試一下, a = 100; 和 b = 100 的區別
3.matlab中,註釋的符號是 %
4.變量無需定義,你能夠給它一個[]空值,在使用的時候再賦其餘值。它的長度也不是固定的,你能夠按你想象進行增長。
5.matlab的數據類型中,我的認爲比較變態的是字符和元胞,元胞數組是一個大雜燴,能夠容納各類複雜的類型,而字符類型,踩過很多坑,每次都轉不過彎來。這裏分享一下。matlab拼接字符串路徑或者數組,不是咱們其餘編程語言想象的那樣哦。用 + 就能夠解決。須要這樣:
['ab' 'cde' num2str(2)] %注意中間有空格,結果:abcde2
6.雖然矩陣操做,很靈活,大部分的均可以直接一句話完成,但免不了仍是要用循環的。matlab也有for,while語法。須要注意的是,每一層的for 或者while都要對應end 才行。
7.在matlab中,如今也支持面向對象編程,但我不會,使用Matlab暫時也只是用用函數,面向過程的編程啊。。。面向對象編程的使用若是你們有興趣能夠去找一下相關資料啊。matlab最經常使用的仍是函數,和其餘語言的方法相似。可是matlab的函數沒有靜態方法和實例方法之分,總的來講,都是靜態的吧,直接調用。
編寫函數使用的關鍵字是 function ,輸入和輸出參數能夠是多個,例如 function [r1,r2,r3] = testfun(p1,p2,p3)
這裏有一個注意:函數是不能直接運行的,你們能夠寫一個m文件調用你寫的函數 就能夠了,這個有編程經驗的應該都懂,我要說的是,在c#中調用matlab的函數的時候,必須是function纔可以被編譯和調用,非function是不支持的哦。
雖然會Matlab作不少事情,但如今我已經徹底脫離它了,剛開始不少不習慣,好比不少數學函數要本身寫,本身去發掘,但經過慢慢積累,併發掘開源的資源,我使用了Math.NET組件來替代了它的數值計算部分,雖然語法沒那麼優雅,可是功能上沒問題了。至於其餘的功能組件,好比統計,數據挖掘等工具箱,也有相應的開源組件來完成,實在找不到的,本身根據算法來完成,其實也不難,因此在這個過程當中,使用C#的能力也愈來愈強。
這並非說Matlab很差,Matlab目前最大的問題,從實際應用上來講,主要有幾個肯定:
1.大的不能再大的MCR運行時,曾幾什麼時候,.NET 幾十M的.net環境,就讓人受不了,更加不用說Matlab的MCR,300多M了。安裝後超過1G。。
2.在與其餘平臺交互應用還不太靈活與方便,例如在C#中調用Matlab的m函數,雖然如今支持還不錯,但效率和使用門檻仍是有必定的差距,不能普及;
3.雖然Matlab在分佈式計算,效率以及部署方面花了很大精力,也愈來愈好用,可是價格讓人望而卻步。。。有幾個工具箱我都沒找到破解版。。沒法試用;這方面是一個硬傷吧,別說學習了,即便買了,招幾個這樣的人都是個難事。。。
4.Matlab的資源太少,目前主流的開源項目託管平臺,Matlab項目寥寥無幾,雖然官方有一個開源的交流論壇,但人氣過低,並且也是英文的,沒什麼用。。加上國內的研究人員,各自爲戰,基本不分享一些寫過的Matlab代碼,因此後人前仆後繼,天天都在寫重複的代碼。。。
每一次安裝系統的時候,老是莫名其妙的要把Matlab給安裝上去,但貌似不多打開,這個月還打開了幾回。。。但願不是終點,Matlab的確是一個好的工具。
最後說一下Matlab的幫助系統吧:在若干年前微軟的MSDN還有離線版的時候,它應該是最好的幫助系統吧。但如今MSDN好像都不包括在VS的安裝包裏面了,離線版也沒有多大的意義。可是Matlab一直在這樣作,這也是它強大的緣由之一。因此的東西均可以從幫助文檔中獲得。但前提你得會基本的英文,這也是一大硬傷吧,沒有中文版,不過想一想也可怕,這麼多文章翻譯爲不一樣版本,工做量得多大。之前有論壇翻譯這些文檔中的函數,但好像被官方叫停了,版權緣由。悲哀,人家給你免費普及作廣告,竟然這樣。。。最後附上一張圖,曾經摸爬打滾過的help系統:
若是您以爲閱讀本文對您有幫助,請點一下「推薦」按鈕,您的「推薦」將是我最大的寫做動力!歡迎各位轉載,可是未經做者本人贊成,轉載文章以後必須在文章頁面明顯位置給出做者和原文鏈接,不然保留追究法律責任的權利。