東北大學 2017 年大學生數學建模競賽 A 題一等獎成果。
在 GitHub 上:https://github.com/lalxyy/NEU-2017-MCM-A
由于不能顯示行內公式,部分 LaTeX 公式以原形式展現。
摘要
東京時間 2011 年 3 ? 11 ? 14 時 46 分,?本東北地?太平洋海域發??? 9.0 級地震,并伴隨有 7.0 到 7.4 級的多次強余震。9.0 級地震也造成了歷史記錄以來罕見的?達 39 ?的巨?海嘯。截?到 2011 年 5 ?,超過 2.4 萬?被官?報告為死亡或失蹤;另外,福島第?核電站因此發?的嚴重核事故也導致了千余?的?直接死亡,這些?并發?的重?事故也給?本及周邊國家帶來了嚴重的損失。本?通過評估磐城、仙臺、宮古與橫須賀的地震破壞及損失情況,利?多元線性回歸的?式,建?了災害有關因素(地震強度、海嘯等)與災害造成的后果(?員傷亡、經濟損失)的模型。
本?根據互聯?中能夠查得的數據進?提取,并獲得了沿岸海浪最??度、與震中距離、地震??烈度、經濟?平(GDP)等數據,以及?員傷亡、財產損失的數據。根據繪制的散點圖確定多元擬合中每個分量對應的多項式次數,之后將?次單項式換元轉化為?次單項式,使?多元線性擬合來得出多項式系數。利?所得出的模型,本?又簡要分析了仙臺市的災情情況,并且指出數據點較少帶來的模型的不?之處。
關鍵詞: 多項式擬合; 地震破壞性評估; 東?本?地震
1 問題背景與分析
1.1 背景
2011 年 3 ? 11 ??本福島發??? 9.0 級?地震,強震引發海嘯,導致當時全球最?的在役核電站——福島核電站放射性物質外泄。該事故根據國際核事件分級被評為最?級 7 級,與切爾諾貝利核電站泄漏事故等級相同。截? 2014 年 2 ?,“3.11”東?本?地震和?海嘯死亡的?數達到 15884 ?。 截? 2014 年 5 ?,受東?本?地震和福島第?核電站事故影響,?直接死亡的?數已經達到 1699 ?,超過了在事故中直接死亡的 1603 ?。
建?數學模型,在以下?本沿海城市:磐城、仙臺、宮古和橫須賀 中。?較各種規模??的地震破壞以及所造成的后果,并為當地報紙準備?篇?章,解釋根據你的模型關于其中?個城市的發現。
1.2 問題分析
該問題本質為求解?個地震因?向量 x = (x_1 , x_2 , ..., x_m) 到影響程度向量 y = (y_1 , y_2 , ..., y_n) 的函數 F(可能包含多個線性變換),表示為
,怎樣得出 F(x) 也是本?討論的核?內容。
由于災害產?的影響與?類?產??平的發展情況和???的主觀能動性有很?的關聯,所以單純憑借歷史以來的地震傷亡?數、財產損失情況不能作為衡量當今災害情況與財產損失的直接依據,但是?類??因素又是衡量地震帶來的破壞性的必要考慮因素,且關系極其復雜。為了簡化模型、提?模型準確性與說服?,我們將磐城、仙臺、宮古和橫須賀四個地區在同?時間橫向對?,不需控制時間的變量,?是通過與震中的距離來衡量地震的影響規模。
題?所給出的四個地區的建設、經濟發展?平不盡相同。圖 1 是 Google Maps 的數據,給出了四城的地理位置與震中坐標,最右側海域中的是本次地震的震中,其余點從上到下依次為宮古、仙臺、磐城、橫須賀;
以及四城 2010 年當時的國民?產總值(GDP)[1][2][3][4]:
城市 | 國民生產總值 |
---|---|
仙臺 | 61.7 |
橫須賀 | 12.2882 |
磐城 | 16.5905 |
宮古 | 5.19 |
表 1: 2010 年四城國民?產總值(單位:億美元)
由此我們將經濟因素(代表抗災、救災?平)納?到考慮因素中。除此之外,根據常識,地震破壞性本?又與震中位置、震源深度以及城市與震中的距離相關,也是模型中必要的考慮因素。Google Maps 分別提供了四城市中?到震中的直線距離(表 2);
城市 | 與震中距離 / km |
---|---|
宮古 | 186.45 |
仙臺 | 176.75 |
磐城 | 207.31 |
橫須賀 | 423.28 |
表 2: 震中直線距離
此外,連帶因素還包括由于?本部分區域近海?產?的由地震引發的海嘯影響、以及福島核電站放射性物質外泄造成的事故。四個城市的海嘯浪?度最?值可以在?象數據中查得 [5][6](表 3); 以及從各城市與所屬縣政府查得的?員傷亡與財產損失情況(表 4)[7][8][9][10]。
城市 | 海嘯沿岸最??度 / ? |
---|---|
宮古 | 8.5 |
仙臺 | 8.6 |
磐城 | 6.51 |
橫須賀 | 2.06 |
表 3: 觀測到的海嘯?度
注:部分觀測點不以城市命名,選取對應最近的觀測點。
城市 | 傷亡?數 | 經濟損失(億美元) |
---|---|---|
宮古 | 611 | 22.4775 |
仙臺 | 904 | 119.0022 |
橫須賀 | 0 | 0.92 |
磐城 | 466 | 0.1478 |
表 4: 四城傷亡?數與經濟損失
注:橫須賀市政府沒有說明有任何?員傷亡情況(參考?獻 10),擬合過程中暫計為 0。(附錄 B.2)
2 模型假設與說明
2.1 符號說明
符號 | 代表意義與說明 |
---|---|
A_1 | 仙臺市 |
A_2 | 橫須賀市 |
A_3 | 宮古市 |
A_4 | 磐城市 |
X | 表示地震整體因素的向量 |
x_1, ..., x_m | 影響地震破壞性的各個因素 |
Y | 表示地震破壞性結果的向量 |
y_1, ..., y_n | 地震破壞程度的不同衡量特征(財產損失等) |
F | 最終求解的地震破壞性衡量函數 |
d_1, ..., d_4 | 對應 A_1 , ..., A_4 到震中的直線距離,單位為千? |
表 5: 本?所使?的符號說明
2.2 模型假設
假設 1:?本本?海岸線在地震中沒有?規模(超過 10 ?的顯著)偏移;[11]
假設 2:?類的能動性(主觀性與?產?)與發展時間相關且滿?映射關系;
假設 3:?類在地震中的抗災防災?平與經濟發展程度正相關;
假設 4:?個城市區域內的建筑物強度可以??個平均值來表示,且可以?建筑物的強度、破壞程度作為衡量城市破壞程度的主要因素。
3 模型建立
3.1 知識背景
3.1.1 地震影響場
采?的地震烈度影響場衰減公式:
沿長軸?向,
沿短軸?向,
其中 d 表示城市與震中的直線距離。[12]
3.1.2 海嘯等級
采?太平洋地區普遍適?的今村-飯?強度分級來評定海嘯的強度等級,其中 H_av 表示沿最近海岸的平均海嘯?度,I 為輸出強度值。[13]
3.2 具體問題參數引入
由問題分析所述,已經基本可以確定 X、Y 各分量的表?含義。將 x_1 , x_2 , y_1 , ... 等分量指派為表 6、7 中所示的含義;四城中每個城市都與且僅與?組向量對應。
維度 | 表示含義與單位說明 |
---|---|
x_1 | 地震震級(??) |
x_2 | 國民?產總值(億美元) |
x_3 | 輸?值在 d_1 , ..., d_4 范圍內,與震中直線距離(千?) |
x_4 | 海嘯沿岸最??度(?) |
表 6: 地震影響因?向量 x 各分量表示含義
維度 | 表示含義與單位說明 |
---|---|
y_1 | 傷亡?數 |
y_2 | 經濟損失(億美元) |
表 7: 影響結果 y 各分量表示含義
并通過 Python 語?與 Matplotlib 庫繪制 y 各分量與 x 各分量散點圖:
3.3 基本模型
根據現有散點圖及統計回歸模型,認為 y_1 , y_2 為被解釋變量,x_1 , ..., x_4 為解釋變量。觀察散點圖,認為 y_1 與 x_3 ,y_2 與 x_3 滿??次多項式擬合的圖像特征,且函數對應單調遞減:
其中 a_{ij}, b_{ij} 為需要求出的多項式系數,i = 1, 2, 3, 4,j = 0, 1, 2,而且擬合曲線應當單調遞減。類似方法可得 y_1 與 x_2、y_2 與 x_2 線性關系,
以及 y_1 與 x_4, y_2 與 x_4 的圖像特征也可用二次多項式來擬合:
y_1 與 y_2 的取值受到以上因素的影響。所以可以得出關于 x_2, x_3, x_4 的兩個三元多項式擬合函數
,其中 c_1,c_2 為該多項式擬合模型中的常數,也就是
4 模型求解
引?擬合?法中的最??乘法,使?多元線性回歸的?法求解該模型。令
,此時原函數變為五元線性擬合。
對于任意一個取值點 (x_{ij}, y_{kj}),其中 j = 0, ..., 3,i = 1, ..., 6,k = 1, 2(已知四個城市對應的數據點),有
,對于 y_1,也就是
此時令
,就有
兩側同時左乘 A^T,得
,整理得
,求出 c_1, a_{21}, a_{31}, a_{41}, a_{32}, a_{42}。
使用計算機求出的最后結果為
5 模型評價與改進
該模型可以根據已有的?然災害數據較為準確地求得財產損失與?員傷亡的程度,能夠給出范圍內的合理值,可?于防災減災與災害造成后果的快速估計與判斷。然?本模型利?的數據點較少,如果使??量的數據來進?擬合則會使模型更有說服?。
6 推廣與應用:仙臺市
仙臺市是?本東北地?的區域中?,也是本題?已知條件中離震中最為接近的城市。從之前繪制的圖像和模型預估的情況來看,仙臺的情況并不容樂觀:常識上講,?個發達區域的經濟發展?平越?,防災減災能?也應該越強,這也是本?在模型建?時考慮 GDP(國民?產總值)作為防災減災因素的原因;但是由此看來,仙臺及?本東北地?城市仍然需要加強對于防災減災?采取的措施,例如削弱海嘯因素帶來的影響,可以體現在本模型中的擬合曲線更為平滑,?且海嘯是導致此次地震及連帶事故中?員傷亡與財產損失的?個主要的原因。
參考文獻
[1] 宮古市役所. 平成 23 年度 財政狀況資料集 [EB/OL]. 2011. http://www.city.miyako.iwate.jp/data/open/cnt/3/5677/1/H23zaiseijoukyou.pdf.
[2] 橫須賀市. 財政?書(平成 23 年度決算)[EB/OL]. 2012. http://www.city.yokosuka.kanagawa.jp/1610/finas/documents/hakusyo23.pdf.
[3] KANEMOTO Y. Metropolitan Employment Area (MEA) Data[EB/OL]. 2011. http://www.csis.u-tokyo.ac.jp/UEA/uea_data_e.htm.
[4] いわき市役所. 平成 23 年度決算 [EB/OL]. 2012. http://www.city.iwaki.lg.jp/www/contents/1001000003486/simple/H23_kessann.pdf.
[5] ?本気象庁. 國內の津波観測施設で観測された津波の観測値 [EB/OL]. 2011. http://www.data.jma.go.jp/svd/eqev/data/2011_03_11_tohoku/tsunami_jp.pdf.
[6] ?本気象庁. 気象庁|津波観測點(東北地?)[EB/OL]. 2017. http://www.data.jma.go.jp/svd/eqev/data/tsunamimap/.
[7] 宮古市役所. The Great East Japan Earthquake and Tsunami Records of Miyako City[EB/OL]. 2015. http://www.city.miyako.iwate.jp/data/open/cnt/3/5971/1/records_of_miyako_city. pdf.
[8] 仙臺市役所. 東?本?震災における本市の被害狀況等 [EB/OL]. 2017. https://www.city.sendai.jp/okyutaisaku/shise/daishinsai/higai.html.
[9] いわき市役所. いわき市災害対策本部週報 [EB/OL]. 2015. http://www.city.iwaki.lg.jp/www/contents/1449132951986/simple/higai0524.pdf.
[10] 橫須賀市. 東?本?震災関連情報 [EB/OL]. 2011. http://www.city.yokosuka.kanagawa.jp/shinsai311/index.html.
[11] NASA. Japan’s Coastline Before and After the Tsunami[EB/OL]. 2011. https://www.nasa.gov/multimedia/imagegallery/image_feature_1893.html.
[12] 傅再揚, 危福泉, 林巖釗. 福建地震災害損失計算分析與思考 [J]. 災害學, 2007, 22(1) : 90 – 93.
[13] PAPADOPOULOS G A, IMAMURA F. A proposal for a new tsunami intensity scale[C] // ITS 2001 proceedings. 2001 : 569 – 577.
附錄
A 程序源碼
帶有運?結果的源碼與部分互動界?可以通過 Jupyter Notebook 打開根?件夾中的 /j-note ?件 夾內的 ipynb ?件來查看。
以下代碼均為 Python 語?(Python 3)。
import numpy as np
import matplotlib.pyplot as plt
import sklearn.linear_model
import sklearn.preprocessing
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimSun'] # 在其他機器上可能需要修改字體名
mpl.rcParams['axes.unicode_minus'] = False
mpl.rcParams['savefig.dpi'] = 108
A.1 數據引入
# GDP、震中直線距離、沿岸海浪高度、震級
# x2, x3, x4, x1
miyako_x = np.array([5.19, 186.45, 8.5, 9.0]) # 宮古
iwaki_x = np.array([16.5905, 207.31, 6.51, 9.0]) # 磐城
yokosuka_x = np.array([12.2882, 423.28, 2.06, 9.0]) # 橫須賀
sendai_x = np.array([61.7, 176.75, 8.6, 9.0]) # 仙臺
matrix_x = np.array([miyako_x, iwaki_x, yokosuka_x, sendai_x])
# 人員傷亡、財產損失
miyako_y = np.array([611, 22,4775])
iwaki_y = np.array([466, 0.1478])
yokosuka_y = np.array([0, 0.92])
sendai_y = np.array([904, 119.9022])
matrix_y = np.array([miyako_y, iwaki_y, yokosuka_y, sendai_y])
A.2 散點圖繪制
def draw_scatter_pic(x, y, description, x_label, y_label):
"""
繪制散點圖的(統一方式)函數
"""
fig = plt.figure(dpi=600)
ax1 = fig.add_subplot(111)
ax1.set_title(description)
plt.xlabel(x_label)
plt.ylabel(y_label)
ax1.scatter(x, y, c = 'r', marker = 'o')
# plt.legend('x1')
plt.show()
# x_gdp = np.array([miyako_x[0], iwaki_x[0], yokosuka_x[0], sendai_x[0]])
x_gdp = matrix_x[:, 0:1]
y_person = np.array([miyako_y[0], iwaki_y[0], yokosuka_y[0], sendai_y[0]])
draw_scatter_pic(x_gdp, y_person, '散點圖:人員傷亡與 GDP', 'GDP', '人員傷亡')
x_distance = np.array([miyako_x[1], iwaki_x[1], yokosuka_x[1], sendai_x[1]])
# fig = plt.figure(dpi=600)
# ax1 = fig.add_subplot(111)
# ax1.set_title('散點圖:震中直線距離與傷亡人數')
# plt.xlabel('直線距離')
# plt.ylabel('人員傷亡')
# ax1.scatter(x_distance, y_person, c='r', marker='o')
# plt.show()
draw_scatter_pic(x_distance, y_person, '散點圖:震中直線距離與傷亡人數', '直線距離', '人員傷亡')
x_tsunami_height = np.array([miyako_x[2], iwaki_x[2], yokosuka_x[2], sendai_x[2]])
fig = plt.figure(dpi=600)
ax1 = fig.add_subplot(111)
ax1.set_title('散點圖:沿岸海浪高度與傷亡人數')
plt.xlabel('海浪高度')
plt.ylabel('人員傷亡')
ax1.scatter(x_tsunami_height, y_person, c='r', marker='o')
plt.show()
y_loss_economy = y_person = np.array([miyako_y[1], iwaki_y[1], yokosuka_y[1], sendai_y[1]])
draw_scatter_pic(x_gdp, y_loss_economy, '散點圖:GDP 與經濟損失', 'GDP', '經濟損失')
draw_scatter_pic(x_distance, y_loss_economy, '散點圖:震中直線距離與經濟損失', '直線距離', '經濟損失')
draw_scatter_pic(x_tsunami_height, y_loss_economy, '散點圖:沿岸海浪高度與經濟損失', '海浪高度', '經濟損失')
miyako_x_extended = np.array([1, miyako_x[0], miyako_x[1], miyako_x[2], miyako_x[1] * miyako_x[1], miyako_x[2] * miyako_x[2]])
iwaki_x_extended = np.array([1, iwaki_x[0], iwaki_x[1], iwaki_x[2], iwaki_x[1] * iwaki_x[1], iwaki_x[2] * iwaki_x[2]])
yokosuka_x_extended = np.array([1, yokosuka_x[0], yokosuka_x[1], yokosuka_x[2], yokosuka_x[1] * yokosuka_x[1], yokosuka_x[2] * yokosuka_x[2]])
sendai_x_extended = np.array([1, sendai_x[0], sendai_x[1], sendai_x[2], sendai_x[1] * sendai_x[1], sendai_x[2] * sendai_x[2]])
np_x = np.array([miyako_x_extended, iwaki_x_extended, yokosuka_x_extended, sendai_x_extended])
np_y = np.array([miyako_y[0], iwaki_y[0], yokosuka_y[0], sendai_y[0]])
A = np.matmul(np.linalg.inv(np.matmul(np.transpose(np_x), np_x)), np.matmul(np.transpose(np_x), np_y))
print(A)
np_y = np.array([miyako_y[1], iwaki_y[1], yokosuka_y[1], sendai_y[1]])
B = np.matmul(np.linalg.inv(np.matmul(np.transpose(np_x), np_x)), np.matmul(np.transpose(np_x), np_y))
print(B)
B 關于數據及其來源的說明
本?使?的所有數據均來源于各城市政府官?或其他學者分析報告,在參考?獻中都已經注明。然?數據中還有?些不夠準確之處:
B.1 概念理解
很多數據載體(?頁、報表等)只提供??版,故依據機器翻譯,數據理解上可能存在部分出?。
有些城市不提供 GDP 的精確數據,只提供了總收?、總?出。模型中的這部分數據根據國際通?的 GDP 計算?式計算得出。
B.2 橫須賀市
橫須賀市政府沒有說明有任何?員傷亡情況(參考?獻 10),擬合過程中暫計為 0。
B.3 仙臺市
仙臺市的?些災難結果數據(?員傷亡、財產損失)?較違背常理,在第六節針對仙臺的分析中已提及。