Python, simulation chaîne de Markov
Bonsoir, j'aimerais simuler une chaîne de Markov à temps discret à valeurs dans $\mathbb{N}^2$ sous Python. Je sais le faire pour une dimension, mais pour deux dimensions j'ai des problèmes pour la définition de la matrice de transition dans la machine. Car à une dimension $P=(P_{ij})_{ij}$ ici $i $ et $j $ sont des entiers. Par contre à deux dimensions ce sont des vecteurs.
Merci d'avance pour votre aide.
Merci d'avance pour votre aide.
Réponses
-
Bonsoir,
Une remarque tout d'abord : très souvent c'est un peu pénible de revenir à la matrice de transition pour la simulation. Est-ce que dans ton cas ce ne serait pas plus simple de simuler directement? Par exemple si c'est une marche aux plus proches voisins, autant juste tirer des directions aléatoires à chaque coup.
Sinon tu as deux options : soit faire des listes de listes de listes de listes (pour avoir de la dimension ), soit définir une fonction à 4 arguments. -
Comment as-tu écrit ton script ?
C’est très vague, là.
Tu coinces parce que tu n’arrives pas à créer un dictionnaire avec une liste comme clé ? Si c’est le cas, utilise un tuple.Algebraic symbols are used when you do not know what you are talking about.
-- Schnoebelen, Philippe -
Voici le code que j'utilise pour simuler pour une dimension.
import numpy as np import matplotlib.pyplot as plt #Fonction générant une v.a de loi $P_i $ def generate(i,P): #taille de la matrice $P $ [nrow,ncol]=np.shape(P) #Somme cumulé de chaque ligne de $P $ scP=np.cumsum(P,axis=1) #tirage de v.a uniforme sur $(0,1) $ u=np.random.uniform (1) if u<=scP[i,0]: return(0) else: for j in range(1,ncol): if scP[i,j-1]<u and u<=scP[i,j]: return(j) break #fonction simulant les trajectoires de la chaîne de #Markov def Simul_Markov(P,n,init): #vecteur trajectoire X X=np.zeros(n,dtype=np.int) X[0]=init for k in range(1,n): X[k]=generate(X[k-1],P) plt.plot(X) plt.show()
La matrice de transition du processus dont je veux simuler est la suivante:
\[P\left((a,b,c), (d,e,f)\right)=\begin{cases}
\frac{\mu b}{\mu b+\lambda b \frac{a}{N}} &\mbox{ si } e=a,\,d=b-1\text{ et }f=c+1\\
\frac{\lambda b \frac{a}{N}}{\mu b+\lambda b \frac{a}{N}} &\mbox{ si } e=a-1,\,d=b+1\text{ et }f=c\\0&\mbox{ sinon}\end{cases}\]où $\mu,\,\lambda\text{N} $ sont des paramètres bien définis. -
La remarque de Lucas s'applique parfaitement.
De chaque point, il y a au plus deux successeurs possibles; pas besoin de matrice. -
Oui tu as raison. Ça marche.
Merci.
Connectez-vous ou Inscrivez-vous pour répondre.
Bonjour!
Catégories
- 163.1K Toutes les catégories
- 7 Collège/Lycée
- 21.9K Algèbre
- 37.1K Analyse
- 6.2K Arithmétique
- 52 Catégories et structures
- 1K Combinatoire et Graphes
- 11 Sciences des données
- 5K Concours et Examens
- 11 CultureMath
- 47 Enseignement à distance
- 2.9K Fondements et Logique
- 10.3K Géométrie
- 62 Géométrie différentielle
- 1.1K Histoire des Mathématiques
- 68 Informatique théorique
- 3.8K LaTeX
- 39K Les-mathématiques
- 3.5K Livres, articles, revues, (...)
- 2.7K Logiciels pour les mathématiques
- 24 Mathématiques et finance
- 312 Mathématiques et Physique
- 4.9K Mathématiques et Société
- 3.3K Pédagogie, enseignement, orientation
- 10K Probabilités, théorie de la mesure
- 772 Shtam
- 4.2K Statistiques
- 3.7K Topologie
- 1.4K Vie du Forum et de ses membres