如何優雅地使用Matlab?
01-08
對Matlab軟體本身以及語言一直提不起興趣來,如果有機會我總是會用其他語言替代Matlab。但考慮到老師和同學,Matlab又是同他人交流的唯一語言,請教一下如何優雅地使用Matlab?
我大概有3000-5000行左右的Matlab經驗,但由於寫的代碼都是一些重複性的簡單工作,我對Matlab的認識還停留在翻本工具書調用個函數解決問題的初級階段。對Matlab的語言的整體設計思路也一點都沒有頭緒。對其軟體本身,對比Mathematica也覺得並不好用。請問下,如何深入的了解Matlab的設計/工作原理,並且優雅的使用它?
Matlab是個軟體,作為用戶的我們根本無從知道其工作原理,頂多就是看看官方手冊介紹。所以我只說一下如何優雅的使用Matlab,僅僅是個人經驗之談,歡迎打臉
1. 多借鑒其他語言特性,主要就是Fortran語言的模塊化思想,還有C++中對象的概念;2. 想編寫一個簡潔優雅的程序要經過這麼一種循環:看書-&>學到的知識用到自己項目中-&>讀別人代碼,找到閃光點-&>修改自己代碼-&>再去讀書……下面詳細解釋下
1. 作為工科生難免會自己建立一個模型什麼的,例如我們就經常鼓搗各種CFD模型。Matlab提供了一種幾乎是積木似的語言,裡面有各種現成的數學函數,但是想要把積木搭成城堡也需要一點學問不是?對我們來說這學問就是Fortran的模塊化語言。下面再說就有點離題太遠了,樓主有興趣可以去找個現成的模型去看;2. 雖然最早的Matlab是用Fortran語言編寫的,但是Matlab也可以有對象。(現在Fortran也有了,時髦啊!)在過去我從不用對象的時候,每次做項目的後處理都要針對各個項目重新寫:提取結果文件,數據處理(插值排序等等),畫圖,輸出圖像或視頻……每次都是那個累啊,終於有一天我看了本c++,裡面提到了對象有代碼通用性的好處,有了過去編程的基礎再加上對象的思想,僅僅一個禮拜我就看完了Matlab官方的手冊,後來我把每次後處理函數全部寫成幾個主要對象方法的形式(網格對象,計算結果對象,實測結果對象等等),雖然每次還是要改,但是比過去每次都重新編寫要輕鬆太多了。而且我也發現「增加對象方法的數量」+「讓方法功能減少」就會使對象越來越靈活……當初真是應該多聽幾門計算機的編程語言課啊3. 為什麼要多讀書我就不說了,書籍是人類進步階梯,要是誰說「我Matlab學的非常好但是從沒看過Matlab的書」的話請 @李龍翔,我保證不打死他……4. 其次還要多讀別人代碼,因為有的東西書里沒告訴你,這時候要是你智商又不夠悟不出來,所以參考一些大神還是很有必要的。舉個栗子:初學者應該都認識reshape函數,我剛學的時候也覺得這函數老方便了,你看它能把矩陣化成向量,也能把向量化成矩陣,所以有時候一個插值函數里用不下十幾次,而且還有的在循環里用(循環上千次啊)。後來在一個程序里看到,當需要一個矩陣M按列排列成向量時候,直接用M(:)的形式。雖然讀程序可能會看走眼,不過不要忘了在上千次循環里這樣可以有效提高程序運行速度,而且Matlab的矩陣在內存里就是按列排列的,可以說M(:)的讀取速度基本上是最快的……所以要寫好代碼,讀程序也很重要,這裡推薦去 File Exchange - MATLAB Central 逛逛,裡面又許程序提供下載。雖然許多仍不完美,但是肯定能找到提高自己編程地方。聽說過這麼一句話,程序=數據結構 + 演算法,Matlab是一種能夠很直接的把數學方法轉化為程序的語言,所以能夠很方便的驗證你的演算法是否正確,假如你只是想把它當作計算器來使,那麼多用就可以了。
上面只是大致講下自己學習的經歷,反正樓主也沒問什麼具體問題,所以不算偏題吧……
廢話這麼多,求給來個贊MATLAB不僅僅是一種語言, 而是一套面向科研工作的工具集合.
學習MATLAB是為了解決問題的, 不是為了學而學. 所以, 我認為首先要明確你的學習目的和應用環境, 要用MATLAB來解決哪些方面的問題. 掌握了MATLAB的基本語法和相關工具箱的使用後, 可以去MATLAB官網的 File Exchange 查找一些與你的工作相關的例子和源碼, 會開闊你的思路. 網上一些開源的MATLAB工具箱也是很好的學習材料.edit看看那些內置函數的寫法,可以用用vargarin之類的方法把自己寫的函數改造成針對不同輸入變數個數的函數,也可以學學GUI,為程序加上圖形界面,感覺很有意思,也挺高端的
step1 .把你用過的函數全都edit一遍,看看怎麼寫的,edit為空的都是內核級的,不用管了極大改善你的代碼風格step2 做個大演算法解決個大問題,比如n=2000+的MTSP,你會發現你寫的代碼效率如此之低,就會絞盡腦汁的改善,自然就會查很多東西來學極大改善你的代碼質量
無所不能的Matlab!
先上一張超有愛的圖片~~
M,你又調皮了^^=======================我是源碼分割線 ========================[x,y]=meshgrid(-10:0.01:10);%% meshgrid是生成網格採樣點的函數,該語句用於生成「心形」網格的採樣點矩陣x,yz=-(17*x.^2-16*y.*abs(x)+17.*y.^2);%%該語句是「心形」 函數,生成
「心形」網格的採樣點矩陣 z
[c,h]=contourf(z,100);
%%contourf是繪製矩陣等高線的函數,該語句用於繪製 「心形」網格的等高線,100代表100條set(h,"linestyle","none")完全向量化。可以用矩陣運算代替循環的時候,堅決不用循環。
優雅的使用??學習python和r,回過頭再來看matlab就會發現自己比他更優雅。。
我: 弄了一個演算法完成模擬了我大學畢業前掛掉學分所有課程的模擬 感覺 優雅爆了
用MATLAB看時間
語法上Matlab和其他腳本語言沒有太大不同,有覆蓋各專業的科學計算庫和豐富的數據結構。本身的GUI可以構建客戶端程序,比直接開發PC客戶端方便,並且Matlab也有UNIX版,可以在Mac和Linux上安裝。樓主還是花一周時間啃本書學學吧,或許這是最好的結果。
沒有什麼優雅不優雅,只夠用就行啊
matlab缺點: 安裝程序太大,啟動速度慢,語法不簡潔(行結尾加分號), 畫圖不好看,而你用的應該是盜版的。所以談不上優雅的使用,適合注重實用,不談美感的人士。
想優雅,matlab不是一個理想工具,R呀mathematica都比它強。matlab的作用就是數值計算工具。什麼畫圖要美美觀功能要多樣語法要優雅……那根本是走歪路了,請找其它工具去。
推薦閱讀:
※為什麼說 MATLAB 快?
※把大圖裡面的漢字分割成每一個小圖?
※simulink中如何輸出兩個上升沿之間的時間差?或記住某一時刻。用s函數么。請見下面詳細描述,謝謝
※matlab中的randn函數如何重複前一次的隨機數?
※Matlab求解方程組?