當前位置:學問谷 >

個人範例 >心得體會 >

學習matlab心得體會

學習matlab心得體會

學習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的一些心得體會,限於學習的程度及能力有限,上文難免有認識膚淺之處,懇請批評指正。

  • 文章版權屬於文章作者所有,轉載請註明 https://xuewengu.com/flgr/xinde/el94pk.html