Марковская цепь Монте-Карло (MCMC) моделирование ветра

Я хочу сгенерировать данные о ветре с помощью MCMC. Результаты, которые я получаю, сильно отличаются от измеренных средних значений, не знаю почему.

МОДЕЛИРОВАНИЕ ДАННЫХ ВЕТРА

## Import the packages ########
from sklearn.cluster import KMeans
### Let's generate some "wind" data from Weibul ###

Wind_sim=np.random.weibull(5, size=1250)## 1250 Wind values (measured data)

### Cluster the simulated wind in 20 clusters

kmeans = KMeans(n_clusters=20).fit(Wind_sim.reshape(-1,1))
labels=kmeans.labels_### Get the labels of categories #####
centers=kmeans.cluster_centers_### Get the centroids of the clusters

################### Построение матрицы перехода цепи Маркова #######

def transition_matrix(transitions):
    n = 1+ max(transitions) #number of states
    M = [[0]*n for _ in range(n)]
    for (i,j) in zip(transitions,transitions[1:]):
        M[i][j] += 1
    #now convert to probabilities:
    for row in M:
    s = sum(row)
    if s > 0:
        row[:] = [f/s for f in row]
return M


m = transition_matrix(labels) #### Get the MC transitions #######

Постройте кумулятивную матрицу переходов

cum_sum=[]
for i in range(len(m)):
    ss=np.cumsum(m[i])
    cum_sum.append(np.ravel(ss))

P = np.diff(np.hstack([np.zeros((len(cum_sum), 1)), cum_sum]), axis=1)

i = 0;
path = [0]
I = np.arange(len(P))
for _ in range(1250):
    i = np.random.choice(I, p = P[i])
    path.append(i);




simulated=centers[path].ravel()
measured=Wind_sim

np.mean(measured)
np.mean(simulated)

Сравнение средств моделирования и измерения совершенно неуместно. Есть ли лучший подход для достижения большей точности?

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *