""" DS02 de 2024 – problème 2 – d’après oral Agro 2019 non publié """ import numpy as np import matplotlib.pyplot as plt plt.close("all") def affichage(q): X = np.linspace(0,1) Lp = [k/10 for k in range(1, 10, 2)] for p in Lp: f = lambda x:q+(1-p-q)*x+p*x**2 if p+q < 1: # pour respecter les hypothèses... plt.plot(X,f(X),label=f'p={p}') plt.plot(X,X,'r-.') plt.axhline(); plt.axvline() plt.legend(loc='best') plt.title(f'Courbes représentant $f$ avec q = {np.round(q,1)}') plt.grid() plt.show() affichage(2/10) """ Prolongement : Modélisation de l'évolution de la population de bactéries : """ import random as rdm def NbBacteries(m, p, q): Lb = [1] # initialement 1 bactérie cpt = 0 # permet au programme de s’arrêter si la population ne s’éteint pas while Lb[-1] != 0 and cpt < m: # Tant que le nb de bactéries n’est pas nul nb = Lb[-1] for i in range(nb): # pour chacune des bactéries hasard = rdm.random() if hasard < q: nb -= 1 # elle meurt sans se diviser elif hasard < p+q: nb += 1 # elle donne deux bactéries distinctes (et disparaît...) Lb.append(nb) cpt += 1 return Lb """ Application : Valider les résultats théoriques obtenus en début de problème """ p, q = 0.3, 0.6 # A modifier en s'assurant que p+q < 1 # On compte la proportion des cas pour lesquelles la population s'est éteinte PropExtinction = [NbBacteries(30, p, q)[-1] for k in range(1000)].count(0)/1000 print("proportion d'extinction = ", ProptionExtinction)