學習matlab心得體會

來源:果殼範文吧 2.96W

學習matlab心得體會篇一:

學習matlab心得體會

最近在學習matlab,一直不入其法門。從網上看到了一些大蝦的經驗心得,感觸頗深,轉貼過來,希望給初學者有一定的指引。

一)寫給學習matlab的新手們

本人接觸matlab已經有5年多的時間了,一直想寫點東西,但是之前不知道放在哪裡才能發揮它的最大作用,直到幾天前碰上了這個論壇(有點像諸葛亮遇見姜維,哈哈)。

廢話不說,我想借貴論壇寶地,寫一些經驗給使用matlab的新手們,當然了,老大們也可以看看,不嫌棄我寫得粗糙的話還可以指點一下,先謝過了~~~~

首先我想說的是,matlab跟其他語言不一樣(我用的比較多的程式語言,除了matlab就應該是c或c++了,VB和Delphi也接觸過,我想版面(matlab版)大部分人也差不多),如果你抱著“把其他語言的思想運用在matlab裡面”的話,那麼我想,即使程式執行不出錯,也很難把握matlab的精髓,也就很難發揮matlab的作用了。所以,如果你是希望matlab作為VC的附屬品,即你不想在matlab上面花太多功夫,只純粹想用matlab來完成VC做不了或很難做成的任務的話,那麼,這篇文章你也不需要再閱讀下去了;如果你是希望掌握一門語言、一個工具,使它更有效為你服務的話,那麼,希望本文對你有所幫助。

Matlab是一個基於矩陣運算的軟體,這恐怕是眾所周知的事情了,但是,真正在運用的時候(就是在程式設計的時候),許多人(特別是初學者)往往沒有注意到這個問題,因此,for迴圈(包括while迴圈)滿天飛…………..這不僅是暴殄天物(沒有發揮matlab所長),還浪費了你寶貴的時間。對此,版友MVH在他的“MATLAB小技巧”一文中也有所涉及,雷同的東西我也就不重複了,matlab的“幫助”裡面也有相關的指示。我這裡想說的一點是,初學者往往在初始化矩陣的時候注意到這個問題,懂得了使用矩陣而不是迴圈來賦值,但是,在其他環節上,就很容易疏忽,或者說,仍然沒有擺脫C++的思想。舉個例子吧,下面的程式碼是我的一個師弟寫的,我想他接觸matlab也有2、3年時間了(在此說明一下,接觸2、3年並不是表示每天都會跟matlab打交道,我本人也不是,只是在一年某幾個時間段裡面連續使用),但是仍然會出現類似的問題:

J=0;

lt=size(imf1,2);

for(i=1:lt)

if(abs(imf1(i))>1)

J=1;

break

end

end

上面的程式碼實現了一個目的??檢查訊號imf1(一個向量)是否存在絕對值大於1的點,這顯然是基於C++的思想寫出來的。如果在matlab下面,其實用兩個語句就足夠了(當然,可以合併為一個): q=find(imf1>1);

J=~isempty(q);

這樣的修改帶來的好處是很可觀的。

又如:

forj=1:num

imf1(start1+j)=2*li1(j+1)-imf1(start1+j);

end

這是一個對稱翻折的問題,它完全可以用以下這個語句簡潔表示:

imf1(start1+1:start1+num)=2*li1(2:num+1)-imf1(start1+1:start1+num);

因此,如果是新手,可以先用迴圈(基於C++的思想)來編寫程式碼,然後看看能否用matlab的語言(基於矩陣的思想)來改進。當然,這樣做的前提是你對matlab提供的一些函式比較熟悉才行,這些函式在matlab的“幫助”那裡搜尋“FunctionsUsedinVectorizing”就可以找到一些,其他的也可以找相關的書籍(沒找到?不可能,電子版總可以下載到的)

對提高matlab程式設計能力的方法,我想主要有以下三個:

1.查help

2.多上上論壇,搜尋帖子、發帖子問人

3.閱讀別人、特別是牛人的程式

當然了,正如所有的程式語言一樣,“3分課本7分上機”,一定要動手才行,不能光看。多想、多思考、多嘗試,才是正路。

最後,整理一下常用的快捷鍵(用【】表示)或命令:

1.在命令視窗(CommandWindow)中:

1)【上、下鍵】??切換到之前、之後的命令,可以重複按多次來達到你想要的命令

2)clc??清除命令視窗顯示的語句,此命令並不清空當前工作區的變數,僅僅是把螢幕上顯示出來的語句清除掉

3)clear??這個才是清空當前工作區的變數命令,常用語句clearall來完成

4)【Tab】鍵??(轉自版友心燈)在[email][/email]看到的:在command視窗,輸入一個命令的前幾個字元,然後按tab鍵,會彈出前面含這幾個字元的所有命令,找到你要的命令,回車,就可以自動完成。目前討論結果是:matlab6.5版本中,如果候選命令超過100個,則不顯示。而在matlab7以後版本中,則沒有這個限制,均可正常提示

其餘的例如在Debug狀態下的快捷鍵就不多說了,自己看選單Debug吧

累了,有時間再寫吧。希望大家多交流~~~~~~

Coming:(以下東西都是一年前做的了,不知道能否記起,呵呵)

1)關於神經網路的??呼叫matlab的nntool命令後的使用問題(我做的時候沒有看過其他書籍或資料,是自己閉門造車的結果,如果寫之前發現其他書籍有相關介紹的話就不寫了)

2)關於外部介面的??matlab與C++Builder的介面,想詳細介紹如何利用matcom4.5在C++Builder中呼叫matlab的程式碼以及matcom的一些技巧。由於我不是搞專案開發的(搞科研、搞課題的),所以對VC不熟悉,大學的時候學過一點,不過我想對於搞科研來說C++Builder就足夠了,免去很多麻煩,Builder在介面設計和資料庫連線上面(我只接觸過這兩方面)還是做得不錯的。同樣,如果發現其他書籍上有類似的東西就不寫了

3)GUI方面也寫寫吧,只是一點點心得或者體會,呵呵,這個相對簡單些,篇幅相對要少些。

學習matlab心得體會篇二:

Matlab是一個基於矩陣運算的軟體

1.helpwin只是尋找函式類,一般不如用doc(相當於幫助文件中的搜尋),但在用doc搜尋不到幫助檔案時可用helpwin,如找有關的幫助等;開啟格式非標準的mat或xls等資料檔案如dat檔案或無後綴名的檔案時,不要用開啟方式開啟,而應先開啟應用程式如MATLAB或excel,然後在應用程式中開啟資料檔案,這樣能得到正確的行數和列數;lookfor可對M檔案的第一行進行關鍵字搜尋,比help條件寬鬆;MATLAB大小寫有區分。用which搜尋路徑;要開啟matlab自帶的m檔案直接用open即可,不需要找到路徑,會在當前目錄和set path的路徑中搜索。

2 矩陣的運算注意:標量與矩陣進行四則運算時該標量與矩陣的每個元素進行運算;兩矩陣相乘左矩陣列數須等於右矩陣行數;矩陣除法有左除(反斜槓)和右除/(斜槓),AB=inv(A)*B,A/B=A*inv(B);方陣的乘方運算有四種:A^n,A^p,s^A,s.^A,其中A為方陣,n為整數,p為非整數,s為標量;A’表示矩陣A的轉置,一般選中了Hermitian(共軛)複選框則元素帶共軛;funm(A,’fun’)表示矩陣的函式運算,要求A是方陣,fun為矩陣運算函式名;給矩陣賦值時維數必須匹配,用方括號,一個分號為一行。

3.陣列的運算注意:陣列乘法運算子為.*,表示兩陣列中對應元素相乘;陣列的除法運算子為.和./,表示對應元素相除;陣列與陣列運算時,參與運算的陣列必須同維,結果為陣列中每個元素進行運算所得;直接用結構名賦值即省略了(1); varargout返回輸出變數list即一系列變數名稱;feval(@fun,var1,?)用var1,?試算[evaluate]fun的值;讀二進位制檔案常用fopen()和fread()組合,matlab讀fortran寫出的二進位制檔案時往往要在fopen()中加b;讀文字檔案常用textread()和fopen();fscanf()組合,要注意格式,最好讀完後對照開啟看看。

4.標準差std(x,flag,dim)預設flag=0,dim=1計算公式為 的平方根,flag=1時分母為n;可通過h=figure(i),後用get(h)獲得圖形物件所有屬性的當前值,其格式為:屬性名=屬性值;結構陣列可在域名後加(a,b)再加.變數名,呼叫時輸變數名可使用tab完成;利用struct函式一次輸入多個結構元素時注意用單元陣列,用{}而非[]。

5. 左除和右除的兩邊不一定是方陣,當A為m*n矩陣,B為列向量時,AB表示A*X=B在最小平方意義上的解,需對A進行QR分解,mn時解通過(A*A)(A*b)求得,而A/B = (BA);積分可以查一下積分命令quad 或者 trapz。

6.註解塊操作符%{和%}必須單獨成行否則不起應有作用;struct([])表示結構陣列,2表示name1為結構陣列;函式名切記不要與MATLAB內建函式重名否則會出現錯誤因為系統先從當前目錄尋找匹配的函式;MATLAB可以把程式製作的動畫生成avi格式的視訊,須把avifile(),getframe(),addframe(),close()配合起來使用。

7.啟動notebook後word文件的選單欄中沒有出現Notebook選單項,可以依次單擊工具-》自定義-》命令-》巨集,選擇保存於上的巨集TemplateProject. mwNewNotebook.. MAIN(把他拖到選單欄然後單擊,沒必要)就會出現Notebook選單項;計算區(Calc Zone)不要弄,evaluate M-book一般也不要用;單元轉換為文字可以常用。

8. 低階檔案I/O函式很重要,因為它可讀寫二進位制檔案,便於與FORTRAN結合;讀寫之前先用fopen(filename,mode),注意都要加單引號,返回值如ans=0表示操作成功,-1表示不成功;一定要注意r和w因為w會刪除原檔案所有內容;讀用fread(fid,count,precision,skip)其中precision如uint8=>char讀取文字檔案,注意在fclose(fid)之前是連續讀的,不指定precision預設按位元組讀取可能會出現很多元素為0;fwrite(fid,A,precision,skip)用二進位制格式寫入檔案,skip引數對於將資料插入到已知長度的記錄中非常有用;重設檔案指標位置用fseek(fid,offset,origin)表示在fid指定的檔案上按照origin給出的參照點,相對移動offset個位元組,注意如果指標不在開頭要重置到開頭origin應選cof當前位置而不選bof檔案開始,重置完後可用ftell(fid)知道指標當前位置相對於bof的位元組數,還可用ferror(fid)查詢錯誤資訊;還可用frewind(fid)函式將檔案位置指標返回到檔案起始位置;從文字檔案讀字串行用fgets(fid,nchar)表示讀一行文字並帶有行結束符,每次讀nchar個字元直到遇上結束符。

9.如果執行的M檔案有錯誤,而且在命令視窗又要執行M檔案中定義錯誤的內建函式時可能會出現錯誤,這時應改工作目錄;有些內建函式可在命令視窗執行但在M檔案中執行可能會出現錯誤,如sphere(n);指令碼M檔案與命令視窗公用變數工作區,而函式M檔案有單獨的變數工作區,切實注意了;關係操作表示式返回的是邏輯型值即0和1。

10.陣列維數擴充套件時下標不要用1,因這是預設下標用1後結果是重新賦值;不同陣列型別轉換如cell2struct等之前一定要先看陣列尺寸size(array);變數名切記不要用函式名,否則呼叫函式時會出錯還不知錯在哪,因MATLAB優先使用變數名而非函式名,比如定義了變數max再呼叫max()函式時就會報錯Subscript indices must either be real positive integers or logicals;中括號加引號用於多個檔名可以,用於多個變數名不行;簡單統計量比如最大值,最小值,平均值加減後再統計和統計後再加減結果一樣;函式不管用或者出錯應檢查是否不小心加了等號。

11.設定座標軸刻度和屬性時用set(gca,xtick,數值陣列); set(gca,xticklabel,字串陣列); 切記是label不要寫成lable;用box off可以去掉右邊和上邊的刻度和邊框;把右邊和上邊分別作為y和x軸可以加畫圖形,但最好不用plot而用line;有關座標軸設定的例子可見我的程式plotNino.m;要實現座標軸隔點標註數值且所有點間隔線均保留需設定兩次座標軸,第一次顯示所有間隔線第二次用ax2=axes()後隔點標註;放大工具只對ax2有效;標註時字元向量用{}且非數字字元必須加引號;注意annotation()中[x y w h]的x,y是對整個figure而言;標記單個數據點用scatter()即可。

12. MatLab小波分析工具箱中一些學習心得:進行多解析度分析時,wavedec()得到的小波係數是由最後一層的低頻係數和各層的高頻係數首尾相連而成,不是相加;用wrcoef()可重構各單支系數的對應訊號且saN+sdN+sdN-1+?+sd1近似等於原始訊號s;用waverec()一次重構的結果和單支重構的和稍有差別但差別很小如e-15;用wavedec()時注意有些小波函式不能用如Morlet小波基等,具體可看wfilters();小波分解再重構後與原始訊號相差最小的小波函式為db1即Haar小波基;

13. 只有函式式M檔案才能定義函式,指令碼檔案和函式不能寫入同一個m檔案中,即指令碼檔案中不允許出現function()語句但可以呼叫同目錄下函式檔案中的函式;函式檔案要想保留一些中間變數的值就要在函式外部呼叫因為函式呼叫結束時會銷燬臨時變數空間,需另寫指令碼檔案,要不然就將需要匯出的變數作為返回的引數或者用global申明全域性變數;要使函式檔案中的函式易被其他指令碼檔案呼叫,檔名最好為第一函式名;一張圖中畫多張子圖時注意subplot(‘Position’,[ ])和axes(‘OuterPosition’,[ ])在[]中值一樣時子圖的位置大小不一樣,axes的[]所給區域按比例縮小包含座標軸標題等故值易確定但呼叫時要加(..,’Parent’,*),此外subplot()可有系統給定區域;

1. help:最有效的命令(參閱了瀚海mathtools的 starrynight網友的文章)其實,可以這樣說吧,如果離開matlab軟體,我想我自己是基本上什麼都不會。 一遇 到什麼問題,通常 我的第一反應是:help ,就先說說自己對help的一些常用方法吧。 1)命令視窗直接敲“help”,你就可以得到本地機器上matlab的基本的幫助資訊。 2)對於某些不是很明確(轉 載 於:w :matlab心得體會)的命令,只知道大體所屬範圍,譬如說某個工具箱,直接在 命令視窗中敲入 help toolboxname,一幫可以得到本工具箱有關的資訊:版本號,函式名等。 3)知道函式名,直接用help funname就可以得到相應的幫助資訊。

2. see also:不可小瞧的關聯 在用help命令的時候,可能因為我們開始估計的方向不一定完全正確,在列出的幫 助資訊中沒有直接 給出的我們要找的東西,但是我們一定不要忽略了在幫助的最後列出的see also。 譬如:曾經遇到一個畫橢球的問題。剛開始我以為這個命令函式應該在graph3d中給 出的(順帶提一句, 只用help的時候我們就可以看到matlabgraph3d - Three dimensional graphs. 。 於是乎,我又 help graph3d,很遺憾,在 Elementary 3-D plots.中我沒有發現畫橢球的函式,但是 我發現在see also中 有SPECGRAPH. 抱著試試的態度,我又help specgraph,^_^,這次在 Solid modeling 中找到了 ellipsoid - Generate ellipsoid。

3. lookfor: matlab中的google 當我們很多什麼頭緒都沒有的時候,我們可以求助於它,往往會收到意想不到的效果 。 譬如:曾經在gui程式設計的時候,遇到過這樣一個問題:想拖動滑鼠時,要出現一個方 框,就像你在桌面 上拖動滑鼠,會出現虛線框一樣。 當初我也剛開始一定都不知道該查詢什麼東西,後來 想起用它了。於是乎,>> lookfor Rectangle (很不好意思,當時這個矩形我還是在金山詞霸中搞定的`-_-) 。果然,在其中就找到 這樣一條資訊:GETRECT Select rectangle with mouse.^_^

4. get,set: GUI object 屬性的幫手 在GUI程式設計中,我們可能有時候想改變某些object的屬性,或者想讓它安裝自己的 想法實現,但是我們又不 記得這些object的屬性,更別提怎麼設定他們的值了。這時,可以用 get(handles)得 到此物件的所有的屬性 及其當前值。用set(handles)可以得到物件所有可以設定的屬性及其可能的取值。找 到我們需要的屬性名字和 可能的取值之後,就意義用 get(handles,‘propertyname’)取得此屬性的值, 用set(handles,‘propertyname’,values)設定此物件此屬性的值。

5. Edit: 檢視m原始檔的助手 在應用matlab過程中,可能我們想看看它的m原始檔,當然用editor定位開啟也行, 但是我經常採用的式直接 在command視窗中用edit funname.m,就省去了定位的麻煩。 6. 其他常用命令:which,what等 which:定位指定的函式和檔案,最好帶上引數-all,以便顯示更加多的資訊 what: 獲得指定目錄的m檔案,mex檔案以及mat檔名列表。

學習matlab心得體會篇三:

Matlab,提起它,不管我們上課是否認真聽講了,我們都應該對它不再陌生,我們不可否認它的強大之處,正如一節課時老師給我們說的“Matlab可以做很多事情”。通過近一段的學習,使我更加確信,它是一款集資料分析、矩陣運算、訊號處理和圖形顯示於一體,可方便地應用於數學計算、演算法開發、資料採集、系統建模和模擬、資料分析和視覺化、科學和工程繪圖、應用軟體開發等方面的強悍軟體,是研究人員、工程人員研究工作中 不可多得的工具。

正因為其強大之處,以及可視性及可互動性使我對它的學習產生了濃厚的興趣。開學至今,短短十次課,我們學習了Matlab矩陣及其運算、Matlab程式設計、M檔案操作、M檔案除錯、M檔案高階程式設計以及Matlab繪圖等??不敢保證每節課都認真聽講,但都盡力去聽,一段時間下來,對Matlab還是有了一定的框架性認識 及程式設計能力。但對於Matlab這樣的軟體來說,套用曾經一個老師 說的話“我給你們講的都是皮毛,你們學到的更是皮毛中的皮毛”,雖然有點搞笑,但卻是不爭的事實,學習軟體類的東西,最好的辦法就是激發興趣和多加練習。我想當老師在課堂上給我們演示如何用Matlab程式設計解決一些實際問題以及程式設計出現一些絢麗豐富的圖形時,我們無不驚歎其美麗,我想憑這一點激發起同學們的興趣是沒有問題的,但問題是同學們為什麼還說它難學呢?關鍵還是在於同學們下課後缺乏鍛鍊,加之每次課間隔時間較長,僅憑上課時記得的東西,是很難連貫及熟練運用的。

關於如何才能夠更好地學習好Matlab,通過下面同學們之間的交流,綜合同學及個人意見,提出以下幾點建議(純屬個人觀點,如有不妥,還請見諒):

1、針對學習資料:

希望郵箱中上傳PPT檔案標清章節號,一來方便有興趣及精力的同學提前學習,二來方便同學下來後及時按照章節複習。(注:尤其是對初學者由易到難的過程中顯得尤為重要)

2、針對上課學習

對於軟體類的學習存在這樣一個問題,那就是同學們上課挺感興趣得聽講,聽到入迷時恨不得立刻就找一臺電腦試一試,但下課後可能去忙其他事情,不一

會兒,這一份熱情就消退了,也不會再去練習。針對此,考慮到目前大多數同學都有電腦的情況下,我們是否可以讓同學們上課時帶電腦到課堂上,一方面老師在講臺上演示,另一方面同學們在下面即時練習,這樣也許會收到更好地教學效果。

3、針對課下學習

本學期Matlab學習,老師給的課下作業很少,也許老師考慮同學們比較忙,以及可能交上來的作業效果質量達不到預期效果。但我認為適量的課下作業還是非常有必要的,尤其是對於目前大學生普遍自制力較差的情況,這點顯得更加有意義。針對如何佈置課下作業以及佈置什麼作業,根據自身學習經驗認為這樣比較好:課下作業可以佈置那些上課老師演示過的程式或PPT中程式略加改動,讓同學們下課後及時完成上交。這不僅使同學們及時複習課上學習內容,也不至於使那些學習效果不佳的同學認為作業太難而直接放棄做去copy別人的。

以上即為近期學習Matlab的一些心得體會,限於學習的程度及能力有限,上文難免有認識膚淺之處,懇請批評指正。

熱門標籤