董亚
Precipitation Estimation Based on Weighted Markov Chain Model
概括
序号 | 研究方向 | 研究问题 | 研究方法 | 研究结论 |
---|
1 | 数据处理 | 中长期降水预报 | 首先对数据平滑预处理;然后采用均值-方差法建立降水状态的分类标准;最后根据分类标准,确定历史降水状态,最终得到状态转移矩阵 | 略 |
方法/模型
- 对每年的降雨数据进行平滑预处理以消除异常值,本文采用三重移动平均线对数据进行平滑处理:
X
i
=
(
X
i
+
X
i
+
1
+
X
i
+
2
)
/
3
X_i=(X_i+X_{i+1}+X_{i+2})/3
Xi=(Xi+Xi+1+Xi+2)/3
- 利用均值-方差法建立年降雨状态的分类标准,通常将降雨状态分为5类。
- k应该是转移步数
程序
import numpy as np
def smoothing(data):
newdata=[]
n=len(data)-2
for i in range(n):
smresult=(data[i]+data[i+1]+data[i+2])/3
newdata.append(smresult)
return newdata
def datatostate(newdata):
data=np.array(newdata)
meanfdata=np.mean(data)
stdofdata=np.std(data)
state=[]
for i in newdata:
if i<(meanfdata-stdofdata):
state.append(0)
elif i>=(meanfdata-stdofdata) and i<(meanfdata-stdofdata*0.5):
state.append(1)
elif i>=(meanfdata-stdofdata*0.5) and i<(meanfdata+stdofdata*0.5):
state.append(2)
elif i>=(meanfdata+stdofdata*0.5) and i<(meanfdata+stdofdata):
state.append(3)
elif i>=(meanfdata+stdofdata):
state.append(4)
return state
def stpm(state):
n=len(state)-1
p=np.zeros((5,5),dtype=int)
for i in range(n):
a=state[i]
b=state[i+1]
if state[i]==a and state[i+1]==b:
p[a,b]=p[a,b]+1
return p
data=np.loadtxt("test",delimiter='\n')
newdata=smoothing(data)
state=datatostate(newdata)
print(state)
p=stpm(state)
print(p)
print(type(p))