- 數學建模:算法與編程實現
- 張敬信等編著
- 9字
- 2022-11-23 17:01:38
第1章 數學建模概述
1.1 什么是數學建模
數學建模,簡單來說就是用計算機和數學知識來解決實際問題。大學期間我們往往是跟著課本學習了若干專業知識,也會涉及一些例題。但這些離實際問題還很遠,結果就是感覺學了很多知識,但是不知道這些知識有什么用?怎么用?而數學建模恰好是這樣一種很好的實踐鍛煉活動,不但需要調動所學的各種知識,還要鍛煉迅速查閱文獻、數據,快速學習并應用它們的能力。
平時,教師引導學生解一道數學題時,教學生怎么從定義出發,加上邏輯推理,完成最終結論。數學建模大體上也是一樣的,只是由數學題變成更復雜的實際問題,首先需要讀懂并明確它,然后分解成小問題,表達成數學問題,再用數學方法和計算機編程來解決問題,得到的結果還需要驗證其合理性、穩定性、有效性、可推廣性等。
數學建模這個過程對能力的鍛煉是受益無窮的,可謂“一次參賽,終身受益”。
數學模型——為了定量地解決一個實際問題,從中抽象、歸結出來的數學結構。具體可以描述為:對于現實世界的一個研究對象,為了一個特定目的,根據對象的內在規律做出必要的簡化假設,運用適當的數學工具得到的一個數學結構。
數學建模——指的是建立數學模型、解決實際問題的全過程,包括模型的建立、求解、分析和檢驗。
數學建模沒有最好,只有更好。模型評判不在于方法“高大上”“包醫百病”,而在于思想精髓、對癥下藥[1]。
1.用數學幫助解決實際問題,離不開數學建模
數學是和數學建模一直是相伴而發展起來的。數學建模就是把要研究或要解決的問題用數學語言表達出來,主要是選擇變量及確定變量間的關系。數學建模是在實際問題和數學之間架設一座橋梁,使得可以用數學分析、計算的各種方法、手段工具以及計算機編程來解決實際問題。掌握數學建模需要學好數學,學好數學并不在于修了多少門課,以及考試成績如何。重要的是是否掌握了數學語言和數學思維。
2.數學課程與數學建模的異同[2]
數學基礎課主要是為傳授知識打基礎,數學建模則是培養運用數學的能力。
相同:兩者都需要概念定義、條件結論、分析計算和邏輯推理,也都需要理出思路、找到正確的路線。
不同:數學課后的題目大多直接用數學語言敘述,條件、結論給得很明確,答案通常是唯一的,方法也大同小異(有“套路”),做對做錯很容易評判,目的是幫助理解和掌握這一部分知識內容;而數學建模面對的實際問題一般是用自然語言描述的,條件和結論并不明確、具體,甚至是相當開放的,討論或解決的路線、方法及用到的知識內容可能是多種多樣的、綜合的,更重要的是得到的結果要經過實際檢驗。
對數學建模,更要先做定性思考/討論,不要急于去找方法、想答案。面對一個問題,先要想一想:這是個什么問題(怎么理解),從何而來(怎么想出來的),要回答什么、弄清楚什么,怎樣才算是“回答了”、是否需要檢驗及怎樣檢驗,必要條件是什么、充分條件是什么,可以合理地分解成哪幾步,可能的困難在哪里,與已有的問題/知識有何關聯,有沒有熟悉的類似問題,等等。這些準備和思考做得好就容易走下去,容易找到一條正確的路線而不至于盲目“搬”方法、套公式。這一步很重要但僅靠數學知識是不夠的,需要學習相關知識或找人合作。
接下來是選擇變量和建立變量之間的關系,即建立數學模型。這一步需要明確假設:沒有假設是無法建立模型的,假設不合理會偏離問題的本源,而模型太復雜又會超越現有的能力。有了模型,就可以通過數學分析和編程計算來回答原始的問題,這基本上依靠的是對數學知識的運用和計算機編程的能力。最后,還必須檢驗所得的結果是否正確或合適。
3.相對于數學基礎課,數學建模需要強化幾方面意識和能力
問題意識:數學建模面對的是實際問題而不是數學問題,要先問用什么模型,再問用什么方法。倘若現有的方法和問題之間都已經可以建立一一對應,那世界上就不會有困難的事情了,也不需要創新發展,更輪不到人們施展才華。合適的模型需要合理的假設,合理的假設需要把實際問題搞清楚。問題比答案重要,實踐比理論優先。
分解問題的意識和能力:一步到位、一攬子解決、畢其功于一役的想法和心態難以面對富有挑戰性的問題。有些困難的問題我們雖然做不了但卻能讀懂別人的工作,這是因為別人把問題巧妙地分解成一系列有辦法處理的子問題。合理分解的標準是:子問題的難度大大降低了;子問題解決的結果拼起來就能回答原問題。
檢驗意識:數學問題的解答正確與否可以靠邏輯和證明來判定,但邏輯與證明不能作為實際問題是否得到了正確解決的唯一準則,而必須一開始就考慮檢驗的標準和途徑。做數學建模除了必要的數學基礎外,更需要充滿好奇、敏銳捕捉、虛心學習、合理假設、恰當分解、規范研究、科學檢驗。
4.重視編程語言學習
編程即讓計算機代為解決問題。從信息時代到大數據、機器學習時代,計算機編程能力已經是一種必備的基本能力了。
編程語言是人與計算機溝通的一種形式語言,根據設計好的編程元素和語法規則,來嚴格規范地表達我們想要做的事情的每一步(程序代碼),使得計算機能夠明白并正確執行,從而得到期望的結果。