數學建模必須用matlab嗎(數學建模為什麼要用matlab)

MATLAB 雖然功能很強大,但上手卻很容易,尤其是 R2013a 以後的版本, 使用起來更加容易。 現在使用 MATLAB 的一個理念就是像 Word 一樣去使用 MATLAB。對於從來沒有用過 MATLAB 的模友來說,也可以輕鬆入門。

1. MATLAB 的功能

如果想用 MATLAB 首先要了解 MATLAB 具有哪些功能,圖 1 是 MATLAB 家族產品的結構,包含了眾多工具箱,所以其應用領域非常廣泛。在各行業和學術機構中,工程師和科學家使用 MATLAB 大大提高了他們的工作效率。瞭解 MATLAB 具有哪些功能,就知道在什麼情況下可以使用 MATLAB , 縱觀這幅圖就可以知道,無論從事哪個行業,只要涉及到科學計算或工程設計,都可以使用 MATLAB。

圖1 MATLAB 家族產品結構圖

2. 快速入門案例

MATLAB 雖然是一款程式開發工具,但依然是工具,所以它可以像其他工具(如 Word)一樣易用。而傳統的學習 MATLAB 方式一般是從學習 MATLAB 入門知識開始,比如 MATLAB 矩陣操作、繪圖、資料型別、程式結構、數值計算等內容。學這些知識的目地是能夠將 MATLAB 用起來,可是即便學完了,很多人還是不自信自己能獨立、自如地使用 MATLAB。這是因為在我們學習這些知識的時候,目標是虛無的,不是具體的目標,具體的目標應該是要解決某一問題。

數模哥雖然已使用多年的 MATLAB,但記住的 MATLAB命令不超過 20 個,每次都靠幾個常用的命令一步一步地實現各種專案。所以說想使用 MATLAB 並不需要那麼多知識的積累,只要掌握住 MATLAB 的幾個小技巧就可以了。下面將通過一個小專案,帶著大家一步一步用 MATLAB 解決一個實際問題,並假設我們都是 MATLAB 的門外漢(還不到菜鳥的水平)。

我們要解決的問題是:已知股票的交易資料:日期、開盤價、最高價、最低價、收盤價、成交量和換手率,試用某種方法來評價這隻股票的價值和風險。

這是個開放的問題,但比較好的方法肯定是用定量的方式來評價股票的價值和風險,所以這是個很典型的科學計算問題。通過前面對 MATLAB 功能的介紹,我們可以確信 MATLAB 可以幫助我們(選擇合適的工具)。

現在拋開 MATLAB,我們來看對於一個科學計算問題,一個典型的處理流程是怎樣的。一個典型科學計算的流程如圖 2 所示,即獲取資料,資料探索和建模,最後是將結果分享出去。

圖2 MATLAB 典型科學計算流程

現在根據這個流程,看如何用 MALTAB 實現這個專案。

第一階段:從外部讀取資料

對於一個門外漢,我並不知道如何用命令來操作,但計算機操作經驗告訴我們當不知如何操作的時候,不妨嘗試一下右鍵,故:

Step1.1:選中資料檔案,右鍵,將彈出右鍵列表,很快可發現有個“匯入資料”選單,如圖 3 所示。

圖3 啟動匯入資料引擎示意圖

Step1.2:單擊“匯入資料”這個按鈕,則很快發現起到一個匯入資料引擎,如圖 4 所示。

圖2-4匯入資料介面

圖4 匯入資料介面

Step1.3:觀察圖 4,只在右上角有個“匯入所選內容”按鈕,則可直接單擊之。馬上我們就會發現在 MATLAB 的工作區(當前記憶體中的變數)就會顯示這些匯入的資料,並以列向量的方式表示,因為預設的資料型別就是“列向量”,當然您可以可以選擇其他的資料型別,大家不妨做幾個實驗,觀察一下選擇不同的資料型別後會結果會有什麼不同。至此,第一步獲取資料的工作的完成。

第二階段:資料探索和建模

現在重新回到問題,對於該問題,我們的目標是能夠評估股票的價值和風險,但現在我們還不知道該如何去評估,MATLAB 是工具,不能代替我們決策用何種方法來評估,但是可以輔助我們得到合適的方法,這就是資料探索部分的工作。下面我們就來嘗試如何在 MATLAB 中進行資料的探索和建模。

Step2.1:檢視資料的統計資訊,瞭解我們的資料。具體操作方式是雙擊工具區(直接雙擊這三個字),此時會得到所有變數的詳細統計資訊。通過檢視這些基本的統計資訊,有助於快速在第一層面認識我們所正在研究的資料。當然,只要大體瀏覽即可,除非這些統計資訊對某個問題都有很重要的意義。資料的統計資訊是認識資料的基礎,但不夠直觀,更直觀也更容易發現資料規律的方式就是資料視覺化,也就是以圖的形式呈現資料的資訊。下面我們將嘗試用 MATLAB 對這些資料進行視覺化。

由於變數比較多,所以還有必要對這些變數進行初步的梳理。對於這個問題,我們一般關心收盤價隨時間的變化趨勢,這樣我們就可以初步選定日期(DateNum)和收盤價(Pclose)作為重點研究物件。也就是說下一步,要對這這兩個變數進行視覺化。

對於一個新手,我們還不知道如何繪圖。但不要緊,新版 MATLAB 提供了更強大的繪圖功能——“繪圖”面板,這裡提供了非常豐富的圖形原型,如圖 5 所示。

圖5 MATLAB繪圖面板中的圖例

要注意,需要在工作區選中變數後繪圖面板中的這些圖示才會啟用。接下來就可以選中一箇中意的圖示進行繪圖,一般都直接先選第一個(plot)看一下效果,然後再瀏覽整個面板,看看有沒有更合適的。下面我們進行繪圖操作。

Step2.2:選中變數 DataNum 和 Pclose,在繪圖面板中單機 plot 圖示,馬上可以得到這兩個變數的視覺化結果,如圖 6 所示,同時還可以在命令視窗區顯示繪製此圖的命令:

>> plot(DateNum,Pclose)

圖6 通過 plot 圖示繪製的原圖

這樣我們就知道了,下次再繪製這樣的圖直接用 plot 命令就可以了。一般情況下,用這種方式繪圖的圖往往不能滿足我們的要求,比如我們希望更改:

(1)曲線的顏色、線寬、形狀;

(2)座標軸的線寬、座標,增加座標軸描述;

(3)在同個座標軸中繪製多條曲線。

此時我們就需要了解更多關於命令 plot 的用法,這時就可以通過 MATLAB 強大的幫助系統來幫助我們實現期望的結果。最直接獲取幫助的兩個命令是 doc 和 help,對於新手來說,推薦使用 doc,因為 doc 直接開啟的是幫助系統中的某個命令的用法說明,不僅全,而且有應用例項,這樣就可以“照貓畫虎”,直接參考例項,從而將例項快速轉化成自己需要的程式碼。

接下來我們就要考慮如何評估股票的價值和風險呢?

從圖 6 可以大致看出,對於一隻好的股票,我們希望股票的增幅越大越好,體現在數學上,就是曲線的斜率越大越好。而對於風險,則可用最大回撤來描述更合適。不妨一個一個來,我們先來看如何計算曲線的斜率。對於這個問題,比較簡單,由於從資料的視覺化結果來看,資料近似成線性,所以不妨用多項式擬合的方法來擬合該改組資料的方程,這樣我們就可以得到斜率。

如何擬合呢?對於一個新手來說,我並不清楚用什麼命令。此時又可以用幫助系統了。在 MATLAB 主面板(靠近右側)點選“幫助”,就可以開啟幫助系統,在搜尋框中搜尋多項式擬合的英文單詞“polyfit”,馬上就可以列出與該關鍵詞相關的幫助資訊,同時很快就會發現,正好有個命令就是 polyfit,果斷點選該命令,進入該命令的用法頁面,瞭解該命令的用法,就可以直接用了。也可以直接找中意的案例,然後直接將案例中的程式碼拷貝過去,修改資料和引數就可以了。

Step2.3:通過幫助搜尋多項式擬合的命令,並計算股票的價值,具體程式碼為:

>> p = polyfit(DateNum,Pclose,1); % 多項式擬合  >> value = p(1) % 將斜率賦值給value,作為股票的價值  value =   0.1212

Step2.4:用相似的方法,可以很快得到計算最大回撤的程式碼:

>> MaxDD = maxdrawdown(Pclose); % 計算最大回撤  >> risk = MaxDD % 將最大回撤賦值給risk,作為股票的風險  risk =   0.1155

到此處,我們已經找到了評估股票價值和風險的方法,並能用 MALTAB 來實現了。但是,我們都是在命令列中實現的,並不能很方便地修改程式碼。而 MATLAB 最經典的一種用法就是指令碼,因為指令碼不僅能夠完整地呈現整個問題的解決方法,同時更便於維護、完善、執行,優點很多。所以當我們的探索和開發工作比較成熟後,通常都會將這些有用的程式歸納整理起來,形成指令碼。現在我們就來看如何快速開發解決該問題的指令碼。

Step2.5:像 Step1.1 一樣,重新選中資料檔案,右鍵並單擊“匯入資料”選單,待啟動匯入資料引擎後,選擇“生成指令碼”,然後就會得到匯入資料的指令碼,並儲存該指令碼。

Step2.6:從命令歷史中選擇一些有用的命令,並複製到 Step2.5 得到的指令碼中,這樣就很容易得到了解決該問題的完整指令碼了,如下所示:

%% MATLAB 入門案例  %% 匯入資料 clc, clear, close all  % 匯入資料  [~, ~, raw] = xlsread(’sz000004.xls’,‘Sheet1’,‘A2:H99’);    % 建立輸出變數  data = reshape([raw{:}],size(raw));  % 將匯入的陣列分配給列變數名稱  Date = data(:,1);  DateNum = data(:,2);  Popen = data(:,3);  Phigh = data(:,4);  Plow = data(:,5);  Pclose = data(:,6);  Volum = data(:,7);  Turn = data(:,8);  % 清除臨時變數   clearvars data raw;   %% 資料探索  figure % 建立一個新的影象視窗  plot(DateNum,Pclose,’k’) % 更改圖的的顏色的黑色(列印後不失真)  datetick(’x’,‘mm’);% 更白日期顯示型別  xlabel(’日期‘); % x軸說明  ylabel(’收盤價‘); % y軸說明  figure  bar(Pclose) % 作為對照圖形  %% 股票價值的評估  p = polyfit(DateNum,Pclose,1); % 多項式擬合,  % 分號作用為不在命令視窗顯示執行結果  P1 = polyval(p,DateNum); % 得到多項式模型的結果  figure  plot(DateNum,P1,DateNum,Pclose,’*g’); % 模型與原始資料的對照  value = p(1) % 將斜率賦值給value,作為股票的價值。  %% 股票風險的評估  MaxDD = maxdrawdown(Pclose); % 計算最大回撤  risk = MaxDD % 將最大回撤賦值給risk,作為股票的風險

到此處,第二階段的資料探索和建模工作就完成了。

第三階段:釋出

當專案的主要工作完成之後,就進入了專案的釋出階段,換句話說,就是將專案的成果展示出去。下面還將繼續上面的案例將介紹如何通過 MATLAB 的 publish 功能,來快速釋出報告。

Step3.1:在指令碼編輯器的“釋出”面板,從“釋出”按鈕(最右側)的下拉選單中,選擇“編輯釋出選項”,這樣就開啟了釋出的配置面板。

Step3.2:根據自己的要求,選擇合適的“輸出檔案格式”,預設為 html,但比較常用的是 Word 格式,因為 Word 格式便於編輯,尤其是對於寫報告或論文。然後單擊“釋出”按鈕,就可以執行程式,同時會得到一份詳細的執行報告,包括目錄、實現過程、主要結果和圖,當時也可以配置其他選項來控制是否顯示程式碼等內容。

至此,整個專案就算完成了。我們可以發現,這個過程中,我們並沒有需要記住多少個 MATLAB 命令,只用少數幾個命令,MATLAB 就幫我們完成了想做的事情。通過這個專案,我們可以有這樣的基本認識,一是 MATLAB 的使用真的很簡單,就像一般的辦公工具那樣好用;二是在做專案的過程中,思路是核心,我們只是用 MATLAB 快速實現了我們想做的事情。

3. 入門後的提高

快速入門是為了讓我們快速建立對 MATLAB 的使用信心,有了信心後,提高就是自然而然的事情了。為了幫助讀者能夠更自如的應用 MATLAB,下面將介紹幾個入門後提高 MATLAB 使用水平的幾個建議:

一是要了解 MATLAB 最常用的操作技巧和最常用的知識點,基本上是每個專案中都會用到的最基本的技巧。入門之後, 再去看 MATLAB 的基礎知識(幫助系統裡有個 Language Fundamentals ), 視角就完全不一樣了, 有種一覽眾山小的從容。

二是要了解 MATLAB 的開發模式,這樣無論專案多複雜,都能靈活面對。關於 MATLAB 開發模式, 可以參考《大資料探勘:系統方法與例項分析》中的第三章, 或者 MathWorks 官網上的關於 MATLAB 程式開開發技巧的視訊,點選閱讀原文觀看視訊。

三是在實踐中學習,不斷積累經驗和知識,拓展 MATLAB 的外延。

根據以上三點,大家就可以逐漸變成 MATLAB 高手了,至少可以很自信地使用 MATLAB 。