import numpy as np import matplotlib.pyplot as plt # Nombre d'étapes nbSteps = 30 # Chaine de Markov non ergodique (irreductible et periodique): Distribution stationnaire unique (0.224138, 0.203448, 0.275862, 0.296552) # P = np.array([ # [0, 0.6, 0, 0.4], # [0.3, 0, 0.7, 0], # [0, 0.25, 0, 0.75], # [0.55, 0, 0.45, 0] # ]) # Chaine de Markov non ergodique (ireductible) avec une inifnité de distribution stationnaire. Exemple: stationnaire (1,0,0,0) , (0,0,0,1), (0.5,0.5,0,0) # P = np.array([ # [1.0, 0.0, 0.0, 0.0], # État 1 : absorbant (classe fermée) # [0.0, 1.0, 0.0, 0.0], # État 2 : absorbant (classe fermée) # [0.3, 0.2, 0.4, 0.1], # État 3 : transitoire → vers 1,2,3,4 # [0.1, 0.6, 0.2, 0.1] # État 4 : transitoire → vers 1,2,3,4 # ]) # Chaine de Markov non ergodique (reductible avec 1 etat absorbant) avec une Distribution stationnaire unique (1,0,0,0) # P = np.array([ # [1.0, 0.0, 0.0, 0.0], # Etat 1 : absorbant # [0.5, 0.0, 0.5, 0.0], # Etat 2 : peut aller vers 1 ou 3 # [0.3, 0.2, 0.3, 0.2], # Etat 3 : transitions mixtes # [0.4, 0.0, 0.4, 0.2] # Etat 4 : peut atteindre l'absorbant 1 # ]) # Chaine de Markov ergodique avec une Distribution stationnaire unique [0.18987342 0.11392405 0.53797468 0.15822785] P = np.array([ [0.2, 0.6, 0.1, 0.1], [0.5, 0.0, 0.5, 0.0], [0.0, 0.0, 0.8, 0.2], [0.6, 0.0, 0.2, 0.2] ]) # Matrice de transition # P = np.array([[0.7, 0.3], [0.2, 0.8]]) #TD Exercice 1 #P = np.array([[0.75, 0.25], [0.5, 0.5]]) #TD Exercice 2 #P = np.array([[0.7, 0.3], [0.5, 0.5]]) #TD Exercice 3 #P = np.array([[0.2, 0.2, 0, 0.6], [0, 0.55, 0.15, 0.3],[0, 0, 0.1, 0.9],[0, 0, 0, 1]]) #TD Exercice 4 # P = np.array([[0.95, 0.05, 0], [ 0, 0.9, 0.1],[0.02, 0, 0.98]]) # P = np.array([[0.70, 0.3, 0], [ 0, 0.7, 0.3],[0.02, 0, 0.98]]) # P = np.array([[0.3, 0.7, 0, 0], [0.5, 0.5, 0, 0], [0, 0.2, 0.8, 0], [0, 0, 0, 1]]) # Chaine non ergodique, distrbution stationnaire (0.5 0.5) #P = np.array([[0, 1], [1, 0]]) # Chaine non ergodique, distrbution stationnaire (0.25 0.25 0.25 0.25) #P = np.array([[0, 0.5, 0, 0.5], [0.5, 0, 0.5, 0],[0, 0.5, 0, 0.5],[0.5, 0, 0.5, 0]]) print("========================================") print("Matrice de transition P =\n", P) print("========================================") initDist = [] # Ditribution initiale print("Ditribution initiale: ") for i in range(P.shape[0]): p = float(input(f"Probabilité de l'état {i+1} : ")) initDist.append(p) if not np.isclose(np.sum(initDist), 1.0): raise ValueError("La somme des probabilités doit être égale à 1.") print ("Ditribution initiale=", initDist) print("========================================") # Calcul des distributions currentDist = initDist histDist = [currentDist] for i in range(nbSteps): currentDist = np.dot(currentDist, P) histDist.append(currentDist) # Affichage des distributions for i in range(len(histDist)): print("Distribution à l'étape", i, ":π_",i,"=", np.round(histDist[i], 3)) plt.figure(figsize=(12, 9)) histDist = np.array(histDist) for i in range(histDist.shape[1]): plt.plot(histDist[:, i], label=f'État {i+1}', marker='o') plt.xlabel('Étapes', fontsize=16) plt.ylabel('Probabilités', fontsize=16) plt.title(f'Distribution de probabilités de 0 à {nbSteps}', fontsize=18) plt.legend(fontsize=12) plt.grid() plt.show()