初學數學建模,想研究一下seir模型,網上大多教程都是直接把參數設定好的,對求參數的方法沒有詳細的說明,沒有辦法知道參數是怎麼得到的。如果有書的話希望能推薦一本這方面的書


SEIR 模型參數較多,直接跟數據擬合併不容易把參數都定準。它的主要作用是利用每個參數代表的含義,模擬研究調參後對系統行為的影響,從而對實際問題給出指導性的意見。Logistic 模型參數少得多,後期擬合相對容易。但在做預報的時候,仍存在參數不易定準的情況。舉個例子,現在百度上有國外疫情的每日新增確診數據。對其擬合與預報結果如下:

Logistic 模型只有三個參數:增長速率 [公式]、拐點時間 [公式]、波及人數 N. 由於數據是每日新增,所以實際上是和 Logistic 模型的微分(或差分)做擬合。用最小二乘法擬合的結果接近於綠線(拐點 4 月 5 日,N = 218 萬),但將拐點調整為 4 月 10 日(黃線,N = 319 萬)或 4 月 15 日(紅線,N = 451 萬)以後,相應地調節另外兩個參數擬合出來的結果也不差。這時候並不能簡單認為綠線與歷史數據符合最好,就預報的越準。因為 Logistic 模型本身也有模型誤差。所以從實際數據擬合參數的過程最好不要採用點估計,而要盡量採用區間估計,多做參數敏感性分析,才能得出合理的結論。看了這個例子,應該知道為什麼即使是鍾南山也不敢輕易地判斷拐點是否到來了。參數擬合這件事並不簡單。從簡單的模型開始多練纔行。


理論就一句話: 模型=公式+邊界。公式包括微分方程組這些,邊界包括初值和物理邊界。舉個例子就是用牛頓定律求位移,就要知道初始速度和加速度以及它們之間的關係。

然後就簡單了,解微分方程最常用是龍格庫塔,找一門編程語言大概率都有已經實現的函數可以調用。入門級建議用matlab的ode45練練手。

高級點的,Fortran自己寫代碼,不熟悉只是用過就不多說了。主要還是這個語言是出現較早做數值計算的,很多精度演算法都是老前輩們用Fortran寫的。

再高級點的,自己推公式畫網格,前向後向迎風一階二階這些,或者…自己弄個公式,溜了


打開matlab....打開simulink...在軟體裡邊搭建模型...使用Parameter Estimation工具進行參數辨識


參數識別


暫時說一個看到過的思路吧,沒有具體討論合理性。

就是設初值,得到曲線和現有曲線進行比較,然後不斷更新參數使得擬合曲線和現有曲線在距離最小,就當作得到參數了。

最簡單的操作就是對參數取一個範圍,進行分割,然後每個參數選取都得到曲線,與現有曲線對比找距離最小。


有方程了,求參數。需要

1.準備數據:分訓練集,驗證集,測試集體。訓練集合驗證集,都是實際場景中的數據,測試集是預測的數據。

2.寫程序:可以用python,把訓練集中的數據步進法代入模型中,求出預計參數,預計方程,將驗證數據代入預計方程,計算結果與已知的結果進行比對,比對的方法很多,比如最小二乘法等。當比對值越來越小,則參數越靠近實際的值。最後將比對值最小的參數確定為參數。

3.測試結果:將測試集數據代入方程進行結果測試,分析。


推薦閱讀:
相關文章