MATLAB 雖然功能很強(qiáng)大,但上手卻很容易,尤其是 R2013a 以后的版本, 使用起來(lái)更加容易。 現(xiàn)在使用 MATLAB 的一個(gè)理念就是像 Word 一樣去使用 MATLAB。本講將通過(guò)一個(gè)實(shí)例介紹如何像使用 Word 一樣去使用 MATLAB,真正將 MATLAB 當(dāng)工具來(lái)使用,即使對(duì)于從來(lái)沒(méi)有用過(guò) MATLAB 的模友來(lái)說(shuō),也可以輕松入門。
1.MATLAB 的功能
如果想用 MATLAB 首先要了解 MATLAB 具有哪些功能,圖 1 是 MATLAB 家族產(chǎn)品的結(jié)構(gòu),包含了眾多工具箱,所以其應(yīng)用領(lǐng)域非常廣泛。在各行業(yè)和學(xué)術(shù)機(jī)構(gòu)中,工程師和科學(xué)家使用 MATLAB 大大提高了他們的工作效率。了解 MATLAB 具有哪些功能,就知道在什么情況下可以使用 MATLAB , 縱觀這幅圖就可以知道,無(wú)論從事哪個(gè)行業(yè),只要涉及到科學(xué)計(jì)算或工程設(shè)計(jì),都可以使用 MATLAB。
圖1 MATLAB家族產(chǎn)品結(jié)構(gòu)圖
2.快速入門案例
MATLAB 雖然是一款程序開發(fā)工具,但依然是工具,所以它可以像其他工具(如 Word)一樣易用。而傳統(tǒng)的學(xué)習(xí) MATLAB 方式一般是從學(xué)習(xí) MATLAB 入門知識(shí)開始,比如 MATLAB 矩陣操作、繪圖、數(shù)據(jù)類型、程序結(jié)構(gòu)、數(shù)值計(jì)算等內(nèi)容。學(xué)這些知識(shí)的目地是能夠?qū)?MATLAB 用起來(lái),可是即便學(xué)完了,很多人還是不自信自己能獨(dú)立、自如地使用 MATLAB。這是因?yàn)樵谖覀儗W(xué)習(xí)這些知識(shí)的時(shí)候,目標(biāo)是虛無(wú)的,不是具體的目標(biāo),具體的目標(biāo)應(yīng)該是要解決某一問(wèn)題。
數(shù)模哥雖然已使用多年的 MATLAB,但記住的 MATLAB命令不超過(guò) 20 個(gè),每次都靠幾個(gè)常用的命令一步一步地實(shí)現(xiàn)各種項(xiàng)目。所以說(shuō)想使用 MATLAB 并不需要那么多知識(shí)的積累,只要掌握住 MATLAB 的幾個(gè)小技巧就可以了。下面將通過(guò)一個(gè)小項(xiàng)目,帶著大家一步一步用 MATLAB 解決一個(gè)實(shí)際問(wèn)題,并假設(shè)我們都是 MATLAB 的門外漢(還不到菜鳥的水平)。
我們要解決的問(wèn)題是:已知股票的交易數(shù)據(jù):日期、開盤價(jià)、最高價(jià)、最低價(jià)、收盤價(jià)、成交量和換手率,試用某種方法來(lái)評(píng)價(jià)這只股票的價(jià)值和風(fēng)險(xiǎn)。
這是個(gè)開放的問(wèn)題,但比較好的方法肯定是用定量的方式來(lái)評(píng)價(jià)股票的價(jià)值和風(fēng)險(xiǎn),所以這是個(gè)很典型的科學(xué)計(jì)算問(wèn)題。通過(guò)前面對(duì) MATLAB 功能的介紹,我們可以確信 MATLAB 可以幫助我們(選擇合適的工具)。
現(xiàn)在拋開 MATLAB,我們來(lái)看對(duì)于一個(gè)科學(xué)計(jì)算問(wèn)題,一個(gè)典型的處理流程是怎樣的。一個(gè)典型科學(xué)計(jì)算的流程如圖 2 所示,即獲取數(shù)據(jù),數(shù)據(jù)探索和建模,最后是將結(jié)果分享出去。
圖2 MATLAB典型科學(xué)計(jì)算流程
現(xiàn)在根據(jù)這個(gè)流程,看如何用 MALTAB 實(shí)現(xiàn)這個(gè)項(xiàng)目。
第一階段:從外部讀取數(shù)據(jù)
對(duì)于一個(gè)門外漢,我并不知道如何用命令來(lái)操作,但計(jì)算機(jī)操作經(jīng)驗(yàn)告訴我們當(dāng)不知如何操作的時(shí)候,不妨嘗試一下右鍵,故:
Step1.1:選中數(shù)據(jù)文件,右鍵,將彈出右鍵列表,很快可發(fā)現(xiàn)有個(gè)“導(dǎo)入數(shù)據(jù)”菜單,如圖 3 所示。
圖3啟動(dòng)導(dǎo)入數(shù)據(jù)引擎示意圖
Step1.2:?jiǎn)螕簟皩?dǎo)入數(shù)據(jù)”這個(gè)按鈕,則很快發(fā)現(xiàn)起到一個(gè)導(dǎo)入數(shù)據(jù)引擎,如圖 4 所示。
圖2-4導(dǎo)入數(shù)據(jù)界面
圖4導(dǎo)入數(shù)據(jù)界面
Step1.3:觀察圖 4,只在右上角有個(gè)“導(dǎo)入所選內(nèi)容”按鈕,則可直接單擊之。馬上我們就會(huì)發(fā)現(xiàn)在 MATLAB 的工作區(qū)(當(dāng)前內(nèi)存中的變量)就會(huì)顯示這些導(dǎo)入的數(shù)據(jù),并以列向量的方式表示,因?yàn)槟J(rèn)的數(shù)據(jù)類型就是“列向量”,當(dāng)然您可以可以選擇其他的數(shù)據(jù)類型,大家不妨做幾個(gè)實(shí)驗(yàn),觀察一下選擇不同的數(shù)據(jù)類型后會(huì)結(jié)果會(huì)有什么不同。至此,第一步獲取數(shù)據(jù)的工作的完成。
第二階段:數(shù)據(jù)探索和建模
現(xiàn)在重新回到問(wèn)題,對(duì)于該問(wèn)題,我們的目標(biāo)是能夠評(píng)估股票的價(jià)值和風(fēng)險(xiǎn),但現(xiàn)在我們還不知道該如何去評(píng)估,MATLAB 是工具,不能代替我們決策用何種方法來(lái)評(píng)估,但是可以輔助我們得到合適的方法,這就是數(shù)據(jù)探索部分的工作。下面我們就來(lái)嘗試如何在 MATLAB 中進(jìn)行數(shù)據(jù)的探索和建模。
Step2.1:查看數(shù)據(jù)的統(tǒng)計(jì)信息,了解我們的數(shù)據(jù)。具體操作方式是雙擊工具區(qū)(直接雙擊這三個(gè)字),此時(shí)會(huì)得到所有變量的詳細(xì)統(tǒng)計(jì)信息。通過(guò)查看這些基本的統(tǒng)計(jì)信息,有助于快速在第一層面認(rèn)識(shí)我們所正在研究的數(shù)據(jù)。當(dāng)然,只要大體瀏覽即可,除非這些統(tǒng)計(jì)信息對(duì)某個(gè)問(wèn)題都有很重要的意義。數(shù)據(jù)的統(tǒng)計(jì)信息是認(rèn)識(shí)數(shù)據(jù)的基礎(chǔ),但不夠直觀,更直觀也更容易發(fā)現(xiàn)數(shù)據(jù)規(guī)律的方式就是數(shù)據(jù)可視化,也就是以圖的形式呈現(xiàn)數(shù)據(jù)的信息。下面我們將嘗試用 MATLAB 對(duì)這些數(shù)據(jù)進(jìn)行可視化。
由于變量比較多,所以還有必要對(duì)這些變量進(jìn)行初步的梳理。對(duì)于這個(gè)問(wèn)題,我們一般關(guān)心收盤價(jià)隨時(shí)間的變化趨勢(shì),這樣我們就可以初步選定日期(DateNum)和收盤價(jià)(Pclose)作為重點(diǎn)研究對(duì)象。也就是說(shuō)下一步,要對(duì)這這兩個(gè)變量進(jìn)行可視化。
對(duì)于一個(gè)新手,我們還不知道如何繪圖。但不要緊,新版 MATLAB 提供了更強(qiáng)大的繪圖功能——“繪圖”面板,這里提供了非常豐富的圖形原型,如圖 5 所示。
圖5 MATLAB繪圖面板中的圖例
要注意,需要在工作區(qū)選中變量后繪圖面板中的這些圖標(biāo)才會(huì)激活。接下來(lái)就可以選中一個(gè)中意的圖標(biāo)進(jìn)行繪圖,一般都直接先選第一個(gè)(plot)看一下效果,然后再瀏覽整個(gè)面板,看看有沒(méi)有更合適的。下面我們進(jìn)行繪圖操作。
Step2.2:選中變量 DataNum 和 Pclose,在繪圖面板中單機(jī) plot 圖標(biāo),馬上可以得到這兩個(gè)變量的可視化結(jié)果,如圖 6 所示,同時(shí)還可以在命令窗口區(qū)顯示繪制此圖的命令:
>> plot(DateNum,Pclose)
圖6通過(guò)plot圖標(biāo)繪制的原圖
這樣我們就知道了,下次再繪制這樣的圖直接用 plot 命令就可以了。一般情況下,用這種方式繪圖的圖往往不能滿足我們的要求,比如我們希望更改:
(1)曲線的顏色、線寬、形狀;
(2)坐標(biāo)軸的線寬、坐標(biāo),增加坐標(biāo)軸描述;
(3)在同個(gè)坐標(biāo)軸中繪制多條曲線。
此時(shí)我們就需要了解更多關(guān)于命令 plot 的用法,這時(shí)就可以通過(guò) MATLAB 強(qiáng)大的幫助系統(tǒng)來(lái)幫助我們實(shí)現(xiàn)期望的結(jié)果。最直接獲取幫助的兩個(gè)命令是 doc 和 help,對(duì)于新手來(lái)說(shuō),推薦使用 doc,因?yàn)?doc 直接打開的是幫助系統(tǒng)中的某個(gè)命令的用法說(shuō)明,不僅全,而且有應(yīng)用實(shí)例,這樣就可以“照貓畫虎”,直接參考實(shí)例,從而將實(shí)例快速轉(zhuǎn)化成自己需要的代碼。
接下來(lái)我們就要考慮如何評(píng)估股票的價(jià)值和風(fēng)險(xiǎn)呢?
從圖 6 可以大致看出,對(duì)于一只好的股票,我們希望股票的增幅越大越好,體現(xiàn)在數(shù)學(xué)上,就是曲線的斜率越大越好。而對(duì)于風(fēng)險(xiǎn),則可用最大回撤來(lái)描述更合適。不妨一個(gè)一個(gè)來(lái),我們先來(lái)看如何計(jì)算曲線的斜率。對(duì)于這個(gè)問(wèn)題,比較簡(jiǎn)單,由于從數(shù)據(jù)的可視化結(jié)果來(lái)看,數(shù)據(jù)近似成線性,所以不妨用多項(xiàng)式擬合的方法來(lái)擬合該改組數(shù)據(jù)的方程,這樣我們就可以得到斜率。
如何擬合呢?對(duì)于一個(gè)新手來(lái)說(shuō),我并不清楚用什么命令。此時(shí)又可以用幫助系統(tǒng)了。在 MATLAB 主面板(靠近右側(cè))點(diǎn)擊“幫助”,就可以打開幫助系統(tǒng),在搜索框中搜索多項(xiàng)式擬合的英文單詞“polyfit”,馬上就可以列出與該關(guān)鍵詞相關(guān)的幫助信息,同時(shí)很快就會(huì)發(fā)現(xiàn),正好有個(gè)命令就是 polyfit,果斷點(diǎn)擊該命令,進(jìn)入該命令的用法頁(yè)面,了解該命令的用法,就可以直接用了。也可以直接找中意的案例,然后直接將案例中的代碼拷貝過(guò)去,修改數(shù)據(jù)和參數(shù)就可以了。
Step2.3:通過(guò)幫助搜索多項(xiàng)式擬合的命令,并計(jì)算股票的價(jià)值,具體代碼為:
>> p = polyfit(DateNum,Pclose,1);%多項(xiàng)式擬合
>> value = p(1)%將斜率賦值給value,作為股票的價(jià)值
value =
0.1212
Step2.4:用相似的方法,可以很快得到計(jì)算最大回撤的代碼:
>> MaxDD = maxdrawdown(Pclose);%計(jì)算最大回撤
>> risk = MaxDD%將最大回撤賦值給risk,作為股票的風(fēng)險(xiǎn)
risk =
0.1155
到此處,我們已經(jīng)找到了評(píng)估股票價(jià)值和風(fēng)險(xiǎn)的方法,并能用 MALTAB 來(lái)實(shí)現(xiàn)了。但是,我們都是在命令行中實(shí)現(xiàn)的,并不能很方便地修改代碼。而 MATLAB 最經(jīng)典的一種用法就是腳本,因?yàn)槟_本不僅能夠完整地呈現(xiàn)整個(gè)問(wèn)題的解決方法,同時(shí)更便于維護(hù)、完善、執(zhí)行,優(yōu)點(diǎn)很多。所以當(dāng)我們的探索和開發(fā)工作比較成熟后,通常都會(huì)將這些有用的程序歸納整理起來(lái),形成腳本。現(xiàn)在我們就來(lái)看如何快速開發(fā)解決該問(wèn)題的腳本。
Step2.5:像 Step1.1 一樣,重新選中數(shù)據(jù)文件,右鍵并單擊“導(dǎo)入數(shù)據(jù)”菜單,待啟動(dòng)導(dǎo)入數(shù)據(jù)引擎后,選擇“生成腳本”,然后就會(huì)得到導(dǎo)入數(shù)據(jù)的腳本,并保存該腳本。
Step2.6:從命令歷史中選擇一些有用的命令,并復(fù)制到 Step2.5 得到的腳本中,這樣就很容易得到了解決該問(wèn)題的完整腳本了,如下所示:
%% MATLAB入門案例
%%導(dǎo)入數(shù)據(jù)
clc, clear, closeall
%導(dǎo)入數(shù)據(jù)
[~, ~, raw] = xlsread('sz000004.xls','Sheet1','A2:H99');
%創(chuàng)建輸出變量
data = reshape([raw{:}],size(raw));
%將導(dǎo)入的數(shù)組分配給列變量名稱
Date = data(:,1);
DateNum = data(:,2);
Popen = data(:,3);
Phigh = data(:,4);
Plow = data(:,5);
Pclose = data(:,6);
Volum = data(:,7);
Turn = data(:,8);
%清除臨時(shí)變量
clearvars dataraw;
%%數(shù)據(jù)探索
figure%創(chuàng)建一個(gè)新的圖像窗口
plot(DateNum,Pclose,'k')%更改圖的的顏色的黑色(打印后不失真)
datetick('x','mm');%更白日期顯示類型
xlabel('日期');% x軸說(shuō)明
ylabel('收盤價(jià)');% y軸說(shuō)明
figure
bar(Pclose)%作為對(duì)照?qǐng)D形
%%股票價(jià)值的評(píng)估
p = polyfit(DateNum,Pclose,1);%多項(xiàng)式擬合,
%分號(hào)作用為不在命令窗口顯示執(zhí)行結(jié)果
P1 = polyval(p,DateNum);%得到多項(xiàng)式模型的結(jié)果
figure
plot(DateNum,P1,DateNum,Pclose,'*g');%模型與原始數(shù)據(jù)的對(duì)照
value = p(1)%將斜率賦值給value,作為股票的價(jià)值。
%%股票風(fēng)險(xiǎn)的評(píng)估
MaxDD = maxdrawdown(Pclose);%計(jì)算最大回撤
risk = MaxDD%將最大回撤賦值給risk,作為股票的風(fēng)險(xiǎn)
到此處,第二階段的數(shù)據(jù)探索和建模工作就完成了。
第三階段:發(fā)布
當(dāng)項(xiàng)目的主要工作完成之后,就進(jìn)入了項(xiàng)目的發(fā)布階段,換句話說(shuō),就是將項(xiàng)目的成果展示出去。下面還將繼續(xù)上面的案例將介紹如何通過(guò) MATLAB 的 publish 功能,來(lái)快速發(fā)布報(bào)告。
Step3.1:在腳本編輯器的“發(fā)布”面板,從“發(fā)布”按鈕(最右側(cè))的下拉菜單中,選擇“編輯發(fā)布選項(xiàng)”,這樣就打開了發(fā)布的配置面板。
Step3.2:根據(jù)自己的要求,選擇合適的“輸出文件格式”,默認(rèn)為 html,但比較常用的是 Word 格式,因?yàn)?Word 格式便于編輯,尤其是對(duì)于寫報(bào)告或論文。然后單擊“發(fā)布”按鈕,就可以運(yùn)行程序,同時(shí)會(huì)得到一份詳細(xì)的運(yùn)行報(bào)告,包括目錄、實(shí)現(xiàn)過(guò)程、主要結(jié)果和圖,當(dāng)時(shí)也可以配置其他選項(xiàng)來(lái)控制是否顯示代碼等內(nèi)容。
至此,整個(gè)項(xiàng)目就算完成了。我們可以發(fā)現(xiàn),這個(gè)過(guò)程中,我們并沒(méi)有需要記住多少個(gè) MATLAB 命令,只用少數(shù)幾個(gè)命令,MATLAB 就幫我們完成了想做的事情。通過(guò)這個(gè)項(xiàng)目,我們可以有這樣的基本認(rèn)識(shí),一是 MATLAB 的使用真的很簡(jiǎn)單,就像一般的辦公工具那樣好用;二是在做項(xiàng)目的過(guò)程中,思路是核心,我們只是用 MATLAB 快速實(shí)現(xiàn)了我們想做的事情。
3.入門后的提高
快速入門是為了讓我們快速建立對(duì) MATLAB 的使用信心,有了信心后,提高就是自然而然的事情了。為了幫助讀者能夠更自如的應(yīng)用 MATLAB,下面將介紹幾個(gè)入門后提高 MATLAB 使用水平的幾個(gè)建議:
一是要了解 MATLAB 最常用的操作技巧和最常用的知識(shí)點(diǎn),基本上是每個(gè)項(xiàng)目中都會(huì)用到的最基本的技巧。入門之后, 再去看 MATLAB 的基礎(chǔ)知識(shí)(幫助系統(tǒng)里有個(gè) Language Fundamentals ), 視角就完全不一樣了, 有種一覽眾山小的從容。
二是要了解 MATLAB 的開發(fā)模式,這樣無(wú)論項(xiàng)目多復(fù)雜,都能靈活面對(duì)。
三是在實(shí)踐中學(xué)習(xí),不斷積累經(jīng)驗(yàn)和知識(shí),拓展 MATLAB 的外延。
根據(jù)以上三點(diǎn),大家就可以逐漸變成 MATLAB 高手了,至少可以很自信地使用 MATLAB 。
-
編輯器
+關(guān)注
關(guān)注
1文章
806瀏覽量
31209 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8425瀏覽量
132770 -
數(shù)據(jù)分析
+關(guān)注
關(guān)注
2文章
1452瀏覽量
34077
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論