UID 2 積分 1618402 威望 758914 布 龍e幣 859488 刀 注冊時間 2009-12-3 最后登錄 2021-1-14
〖Quant〗新手怎么學Matlab?
MATLAB 是美國MathWorks公司出品的商業數學軟件 ,用于算法開發 、數據可視化 、數據分析以及數值計算的高級技術計算語言和交互式環境 ,主要包括MATLAB和Simulink兩大部分 。MATLAB應用非常之廣泛 !
是由美國mathworks公司發布的主要面對科學計算 、可視化以及交互式程序設計的高科技計算環境 。它將數值分析 、矩陣計算 、科學數據可視化以及非線性動態系統的建模和仿真等諸多強大功能集成在一個易于使用的視窗環境中 ,為科學研究 、工程設計以及必須進行有效數值計算的眾多科學領域提供了一種全面的解決方案 ,并在很大程度上擺脫了傳統非交互式程序設計語言 (如C 、Fortran )的編輯模式 ,代表了當今國際科學計算軟件的先進水平 。
MATLAB和Mathematica 、Maple并稱為三大數學軟件 。它在數學類科技應用軟件中在數值計算方面首屈一指 。MATLAB可以進行矩陣運算 、繪制函數和數據 、實現算法 、創建用戶界面 、連接其他編程語言的程序等 ,主要應用于工程計算 、控制設計 、信號處理與通訊 、圖像處理 、信號檢測 、金融建模設計與分析等領域 。
MATLAB的基本數據單位是矩陣 ,它的指令表達式與數學 、工程中常用的形式十分相似 ,故用MATLAB來解算問題要比用C ,FORTRAN等語言完成相同的事情簡捷得多 ,并且MATLAB也吸收了像Maple等軟件的優點 ,使MATLAB成為一個強大的數學軟件 。在新的版本中也加入了對C ,FORTRAN ,C++ ,JAVA的支持 。可以直接調用 ,用戶也可以將自己編寫的實用程序導入到MATLAB函數庫中方便自己以后調用 ,此外許多的MATLAB愛好者都編寫了一些經典的程序 ,用戶直接進行下載就可以用 。
新手怎么學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打交道 ,我本人也不是 ,只是在一年某幾個時間段里面連續使用 ),但是仍然會出現類似的問題 :
上面的代碼實現了一個目的――檢查信號imf1 (一個向量 )是否存在絕對值大于1的點 ,這顯然是基于C++的思想寫出來的 。如果在matlab下面 ,其實用兩個語句就足夠了 (當然 ,可以合并為一個 ):
這樣的修改帶來的好處是很可觀的 。又如 :
這是一個對稱翻折的問題 ,它完全可以用以下這個語句簡潔表示 :
因此 ,如果是新手 ,可以先用循環 (基于C++的思想 )來編寫代碼 ,然后看看能否用matlab的語言 (基于矩陣的思想 )來改進 。當然 ,這樣做的前提是你對matlab提供的一些函數比較熟悉才行 ,這些函數在matlab的 “幫助 ”那里搜索 “Functions Used in Vectorizing ”就可以找到一些 ,其他的也可以找相關的書籍 (沒找到 ?不可能 ,電子版總可以下載到的 )!
對提高matlab編程能力的方法 ,我想主要有以下三個 :
1. 查help
2. 多上上論壇 ,搜索帖子 、發帖子問人
3. 閱讀別人 、特別是牛人的程序
當然了 ,正如所有的程序語言一樣 ,“3分課本7分上機 ”,一定要動手才行 ,不能光看 。多想 、多思考 、多嘗試 ,才是正路 。
最后 ,整理一下常用的快捷鍵 (用 【】表示 )或命令 :
1. 在命令窗口(Command Window)中 :
1) 【上 、下鍵 】――切換到之前 、之后的命令 ,可以重復按多次來達到你想要的命令
2) clc――清除命令窗口顯示的語句 ,此命令并不清空當前工作區的變量 ,僅僅是把屏幕上顯示出來的語句清除掉
3) clear――這個才是清空當前工作區的變量命令 ,常用語句clear all來完成
4) 【Tab 】鍵―― (轉自版友心燈 )在matlab @hit .edu.cn看到的 :在command窗口 ,輸入一個命令的前幾個字符 ,然后按tab鍵 ,會彈出前面含這幾個字符的所有命令 ,找到你要的命令 ,回車 ,就可以自動完成 。目前討論結果是 :matlab6.5版本中 ,如果候選命令超過100個 ,則不顯示 。而在matlab7以后版本中 ,則沒有這個限制 ,均可正常提示
5) 【Ctrl+C 】(或 【Ctrl+Break 】)在matlab程序運行過程中 ,可能由于程序編寫的失誤 ,導致程序不停的運行 ,在命令窗口輸入 “Ctrl+C ”可以將運行的程序停下來 ,而不需要將整個Matlab程序關掉 。不過進行此操作的前提是能夠激活切換到命令窗口才行 ,呵呵 。
2. 在編輯器(Editor)中 :
1) 【Tab 】(或 【Ctrl+] 】)――增加縮進 (對多行有效 )
2) 【Ctrl+[ 】--減少縮進 (對多行有效 )
3) 【Ctrl+I 】--自動縮進 (即自動排版 ,對多行有效 )
4) 【Ctrl+R 】――注釋 (對多行有效 )
5) 【Ctrl+T 】――去掉注釋 (對多行有效 )
6) 【Ctrl+B 】――括號配對檢查 (對版本6.5有效 ,但版本7.0無效 ,不知道是取消了還是換了另外的快捷鍵 ,其他版本沒有測試過 )
7) 【F12 】――設置或取消斷點
8) 【F5 】――運行程序
其余的例如在Debug狀態下的快捷鍵就不多說了 ,自己看菜單Debug吧!
二 、那些讓你欲罷不能的 “小命令 ”
我很喜歡上了matlab的簡單的語法,易于繪制圖形,gui編程也非常容易, 并且功能強大的開放式的toolbox 。因此,現將個人的matlab的一點學習體會列在這里,愿能夠對大家(特別是初學者)起到一點兒微薄的作用也好 。
help:最有效的命令
其實,可以這樣說吧,如果離開matlab軟件,我想我自己是基本上什么都不會 。一遇到什么問題,通常我的第一反應是:help ,就先說說自己對help的一些常用方法吧 。
1 )命令窗口直接敲 “help ”,你就可以得到本地機器上matlab的基本的幫助信息 。
2 )對于某些不是很明確的命令 ,只知道大體所屬范圍 ,譬如說某個工具箱 ,直接在命令窗口中敲入help toolboxname ,一幫可以得到本工具箱有關的信息 :版本號 ,函數名等 。
3 )知道函數名 ,直接用helpfunname就可以得到相應的幫助信息 。
2. see also :不可小瞧的關聯
在用help命令的時候 ,可能因為我們開始估計的方向不一定完全正確 ,在列出的幫助信息中沒有直接給出的我們要找的東西 ,但是我們一定不要忽略了在幫助的最后列出的see also 。
譬如 :曾經遇到一個畫橢球的問題 。剛開始我以為這個命令函數應該在graph3d中給出的 (順帶提一句 ,只用help的時候我們就可以看到matlab\graph3d - Three dimensional graphs. 。于是乎 ,我又help graph3d ,很遺憾 ,在 Elementary 3-D plots.中我沒有發現畫橢球的函數 ,但是我發現在see also中有SPECGRAPH. 抱著試試的態度 ,我又help specgraph ,^_^ ,這次在 Solid modeling 中找到了ellipsoid - Generateellipsoid 。
3. lookfor: matlab中的google
當我們很多什么頭緒都沒有的時候,我們可以求助于它 ,往往會收到意想不到的效果 。
譬如 :曾經在gui編程的時候 ,遇到過這樣一個問題 :想拖動鼠標時 ,要出現一個方框 ,就像你在桌面上拖動鼠標 ,會出現虛線框一樣 。當初我也剛開始一定都不知道該查找什么東西 ,后來想起用它了 。于是乎 ,>> lookfor Rectangle (很不好意思 ,當時這個矩形我還是在金山詞霸中搞定的-_- )。果然 ,在其中就找到這樣一條信息 :GETRECT Selectrectangle with mouse.^_^
4. get,set: GUI object 屬性的幫手
在GUI編程中 ,我們可能有時候想改變某些object的屬性 ,或者想讓它安裝自己的想法實現 ,但是我們又不記得這些object的屬性 ,更別提怎么設置他們的值了 。這時 ,可以用 get (handles )得到此對象的所有的屬及其當前值 。用set (handles )可以得到對象所有可以設置的屬性及其可能的取值 。找到我們需要的屬性名字和可能的取值之后 ,就意義用 get (handles ,‘propertyname ’)取得此屬性的值 ,用set (handles ,‘propertyname ’,values )設置此對象此屬性的值 。
最后 ,matlab只是一個很好的應用工具而已 ,也不像vc ,delphi ,vb等開發工具 ,最多的還是應用于算法的驗證 ,仿真等 。我們應該的是盡可能的知道一點兒基礎的 ,然后熟悉本專業的toolbox
作者:量化投資Quant
鏈接:https://xueqiu.com/5256769224/32778342
來源:雪球
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
風險提示:本文所提到的觀點僅代表個人的意見,所涉及標的不作推薦,據此買賣,風險自負。
MultiCharts微信群:廣告、業務人員自覺離開,純興趣、交流群:)
期貨論壇 - 版權/免責聲明
1.本站發布源碼(包括函數、指標、策略等)均屬開放源碼,用意在于讓使用者學習程序化語法撰寫,使用者可以任意修改語法內容并調整參數。僅限用于個人學習使用,請勿轉載、濫用,嚴禁私自連接實盤賬戶交易 。
2.本站發布資訊(包括文章、視頻、歷史記錄、教材、評論、資訊、交易方案等)均系轉載自網絡主流媒體,內容僅為作者當日個人觀點,本網轉載此文出于傳遞更多信息之目的,并不意味著贊同其觀點或證實其描述。本網不對該類信息或數據做任何保證。不對您構成任何投資建議,不能依靠信息而取代自身獨立判斷,不對因使用本篇文章所訴信息或觀點等導致的損失承擔任何責任。
3.本站發布資源(包括書籍、雜志、文檔、軟件等)均從互聯網搜索而來,僅供個人免費交流學習,不可用作商業用途,本站不對顯示的內容承擔任何責任。請在下載后24小時內刪除。如果喜歡,請購買正版,謝謝合作!
4.龍聽期貨論壇原創文章屬本網版權作品,轉載須注明來源“龍聽期貨論壇”,違者本網將保留追究其相關法律責任的權力。本論壇除發布原創文章外,亦致力于優秀財經文章的交流分享,部分文章推送時若未能及時與原作者取得聯系并涉及版權問題時,請及時聯系刪除。聯系方式:http://www.olxqsnbk.buzz/thread-262-1-1.html