數學建模專欄 | 開篇:如何備戰數學建模競賽之 MATLAB 編程

作 者 簡 介

卓金武,MathWorks中國高級工程師,教育業務經理,在數據分析、數據挖掘、機器學習、數學建模、量化投資和優化等科學計算方面有多年工作經驗,現主要負責MATLAB校園版業務。曾2次獲全國大學生數學建模競賽一等獎,1次獲全國研究生數學建模競賽一等獎。

MATLAB 是公認的最優秀的數學模型求解工具,在數學建模競賽中超過 95% 的參賽隊使用 MATLAB 作爲求解工具,在國家獎隊伍中,MATLAB 的使用率幾乎 100%。雖然比較知名的數模軟件不只 MATLAB,

爲什麼 MATLAB 在數學建模中的使用率如此之高?

作爲資深的數模愛好者(從大一到研三每年都參加數模比賽,大學生數學建模大賽 2 次國一,研究生賽 1 次國一),我認爲:

1. MATLAB 的數學函數全,包含人類社會的絕大多數數學知識。

2. MATLAB 足夠靈活,可以按照問題的需要,自主開發程序,解決問題。

尤其最近幾年,國賽中的題目都很開放,靈活度很大,這種情況,MATLAB 的編程靈活的優勢越發明顯。

在數學建模中最重要的就是模型的建立和模型的求解,當然兩者相輔相成。

有過比賽經驗的數模客們都有這樣的一種體會,如果 MATLAB 編程弱的話,在比賽中,根本不敢放開建模,生怕建立的模型求解不出來。要知道,模型如果求解不出來,在比賽中是致命的,所以首先要避免這種問題。所以如果某個參賽隊 MATLAB 弱的話,最直接的問題就是還敢建模嗎?不敢放開建模,畏手畏腳,思路不敢展開,可想而知,想取得好成績就很難了。

其實 MATLAB 編程的弱,並不是真的弱,因爲 MATLAB 本身很簡單,不存在壁壘,最大的問題是在心裏上弱,沒有樹立正確的 MATLAB 應用理念,沒有經歷編程成功的經歷,當然在比賽中就心裏害怕了。這些數模客之所以沒有樹立對 MATLAB 使用的信心,就是因爲在學習 MATLAB 的時候,就一直機械地、被動地學習知識,而沒有掌握技巧去搜索知識、運用知識。要知道,MATLAB 各種知識對個人來說,永遠是學不完的。如果按照這個方式,也就永遠不會用 MATLAB 了。但如果掌握正確的 MATLAB 使用方法和實用的小技巧,在半小時內就可以很快地變成 MATLAB 高手了。高手的區別就只在一點,就是一直有自己的編程思路,需要什麼知識就是學習什麼知識,然後繼續按照自己的思路編程,雖然在過程中,要不斷學習,但最高效,也最容易建立強大的對 MATLAB 的使用信心。

當然數學建模還有自己的特點, 爲了幫助大家更有效地備戰國賽, 接下來我們將系統地梳理如何備戰數學建模競賽中的 MATLAB 編程。

1. 認識 MATLAB 在數學建模的地位

下圖是整個數模過程所需要的知識矩陣。第二列是模型的求解,包括編程、算法、函數、技巧。如果說整個技能矩陣的是條蛇,那麼求解正是在7寸的位置,正是連接建模與其他板塊的樞紐。如果此環節弱的話,導致不敢放開思路建模,那麼模型基礎就不好,後面的論文什麼的就都是浮雲了。因此模型的求解必須重視,而 MATLAB 是模型的最有力的求解的工具,所以 MATLAB 的編程水平對數模客來說就尤其重要了。


如果不考慮時間,只要掌握了 MATLAB 編程技巧和理念,建模中遇到的問題總可以用 MATLAB 解決的。

但畢竟比賽是有時間限制的,所以還要相應地提高速度、效率。所以爲了備戰數模比賽,在模型的求解環節,除了要掌握基本的 MATLAB 編程技巧,還要積累一些常用的算法、函數,這樣比賽的時候不用花太多的時間去消化算法,也不用花太多時間去摸索函數用法,有效地提高解題速度。數模比賽中常用算法、函數的準備我會在之後詳細介紹,基礎核心卻是 MATLAB 的編程理念。

2. 正確且高效的 MATLAB 編程理念

正確且高效的 MATLAB 編程理念就是以問題爲中心的主動編程。我們傳統學習編程的方法是學習變量類型、語法結構、算法以及編程的其他知識,因爲學習時候是沒有目標的,也不知道學的知識什麼時候能用到,收效甚微。

而以問題爲中心的主動編程,則是先找到問題的解決步驟,然後在 MATLAB 中一步一步地去實現。在每步實現的過程中,遇到問題查找知識(互聯網時代查詢知識還是很容易的),定位方法,再根據方法,查詢 MATLAB 中的對應函數,學習函數用法,回到程序,解決問題。

在這個過程中,知識的獲取都是爲了解決問題的,也就是說每次學習的目標都是非常明確的,學完之後的應用就會強化對知識的理解和掌握,這樣即學即用的學習方式是效率最高,也是最有效的方式。最重要的是,這種主動的編程方式會讓學習者體驗到學習的成就感的樂趣,有成就感,自然就強化對編程的自信了。這種內心的自信和強大在建模中會發揮意想不到的力量,所爲信念的力量。

3. 數學建模競賽中的 MATLAB 水平要求

要想在全國大學生數學建模競賽中拿到國獎, MATLAB 技能是必備的。 具體的技能水平應達到:

1)瞭解 MATLAB 的基本用法,包括幾個常用的命令,如何獲取幫助,腳本結構,程序的分節與註釋,矩陣的基本操作,快捷繪圖方式;

2)熟悉 MATLAB 的程序結構,編程模式,能自由地創建和引用函數(包括匿名函數);

3)熟悉常見模型的求解算法和套路,包括連續模型,規劃模型,數據建模類的模型;

4)能夠用 MALTAB 程序將機理建模的過程模擬出來,就是能夠建立和求解沒有套路的數學模型。 

要想達到如上要求, 不能按照傳統的學習方式一步一步地學習, 而要結合上述提到的學習理念制定科學的訓練計劃。

 4. 有計劃地快速提高 MATLAB 實戰水平

如何制定科學的訓練計劃,快速有效地提高 MATLAB 實戰水平呢?首先了解數模建模中常見的模型和求解算法,如下圖所示:


縱觀數學建模中的種種問題,可以將這些問題劃分爲以上 5 類,並匹配常用的方法。只要有針對性地訓練這些常用的方法,那麼在實際比賽中,遇到類似的問題可就得心應手多了,甚至一些程序框架可以直接套用。因此關鍵還要注意總結積累常用方法的 MATLAB 程序段

數學建模是非常開放的問題,對於 5 類問題,只要找 1 個題目,然後將這類問題的常用方法都用一遍,一是拓展建模思路,二是將所有方法都有 MALTAB 實現一遍,自然所得的程序將是印象非常深刻的,自然也就變成自己日後的程序庫了。

詳細分析這 5 類題型:

- 第二類和第四類,方法相對單一,所花的時間不用太多;

- 第一、三類,是建模競賽中的主力題型,方法很多,應該多注意積累;

- 第五類是最近興起的新題型,沒有固定套路,也不要期望直接套用經典模型了。需要認真分析問題,客觀地解決問題。這類題型,往往機理建模方法比較有效,及時從事物內部發展的規律入手,模擬事物的發展過程並建立模型,並用程序去實現。我認爲機理建模和求解纔是數學建模和編程的最高求解,已經達到心中無模型而勝有模型的境界了。所用的 MATLAB 編程也是最基本的程序編寫技巧,關鍵是思想。

結合這 5 類題型和數學建模競賽中 MATLAB 應該達到的水準,建議參考如下步驟開始準備,在之後的連載文章中也將詳解相應的內容, 總結部分方法供大家借鑑:

第二講: 瞭解MATLAB的基本用法, 包括幾個常用的命令, 如何獲取幫助, 腳本結構, 程序的分節與註釋, 矩陣的基本操作, 快捷繪圖方式;熟悉MATLAB的程序結構,編程模式, 能自由地創建和引用函數(包括匿名函數)。

第三講至第八講:熟悉常見模型的求解算法和套路, 包括連續模型, 規劃模型, 數據建模類的模型。

第九講:能夠用MALTAB程序將機理建模的過程模擬出來, 就是能夠建立和求解沒有套路的數學模型。

第十講至第十二講: 真題訓練, 強化實戰經驗。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章