grapheproba.py

Created by nicolas-patrois

Created on April 27, 2018

1.35 KB

Calcule automatiquement l’état stable et les relations de récurrence comme explicites d’un graphe probabiliste à deux états (programme de TES spécialité).


def grapheproba():
 P=print
 P("La matrice de transition est [[m11 m12][m21 m22]].")
 P("La matrice de l'etat initial est [p1 p2].")
 P("Entrer les valeurs connues, par exemple m11=0.3 ou p2=0.2.")
 m=[[None,None],[None,None]]
 p0=[None,None]

 while [None,None] in m or None in p0:
  v=input()
  if "=" not in v:
   P("Entrer une egalite.")
   continue
  v=v.split("=")
  if v[0] not in ("m11","m12","m21","m22","p1","p2"):
   P("Entrer mij=... ou pi=...")
   continue
  try:
   v[1]=float(v[1])
   i=int(v[0][1])-1
   if v[0][0]=="m":
    j=int(v[0][2])-1
  except:
   P("Erreur de valeur.")
   continue
  if not 0<=v[1]<=1:
   P("Une probabilite est entre 0 et 1.")
   continue
  if v[0][0]=="m" and m[i][j]!=None:
   P("Deja occupe.")
   continue
  if v[0][0]=="p" and p0[i]!=None:
   P("Deja occupe.")
   continue
  if v[0][0]=="m":
   m[i][j]=v[1]
   m[i][1-j]=1-v[1]
  else:
   p0[i]=v[1]
   p0[1-i]=1-v[1]
  P("OK.")

 P("Matrice de transition :")
 P(" ".join(map(str,m[0])))
 P(" ".join(map(str,m[1])))
 P("Etat initial :")
 P("("+" ".join(map(str,p0))+")")

 p=(m[1][0]/(m[0][1]+m[1][0]),m[0][1]/(m[0][1]+m[1][0]))
 P("Etat stable :")
 P("(%f %f)."%p)

 q=m[0][0]-m[1][0]

 P("pn=(an bn) avec :")
 P("a(n+1)=%f*a(n)+%f"%(q,m[1][0]))
 P("b(n+1)=%f*b(n)+%f"%(q,m[0][1]))
 P("a(n)=%f*%f^n+%f"%(p0[0]-p[0],q,p[0]))
 P("b(n)=%f*%f^n+%f"%(p0[1]-p[1],q,p[1]))