Skip to content

Instantly share code, notes, and snippets.

@YannBouyeron
Last active June 26, 2024 15:06
Show Gist options
  • Save YannBouyeron/243714f934852fc9b28887f4b36bf924 to your computer and use it in GitHub Desktop.
Save YannBouyeron/243714f934852fc9b28887f4b36bf924 to your computer and use it in GitHub Desktop.
Croissance et décroissance.

Croissance et décroissance.

Suite arithmétique et modèle linéaire.

En général, quand on observe l’évolution (déterministe) d’une quantité variant au cours du temps, on dispose de données discrètes , c’est a dire de valeurs relevées à intervalles de temps réguliers ou irréguliers.

Considérons que les données discrètes suivantes représentent l’évolution de la taille d’une plante en fonction du temps (le tout en unités arbitraires):

>>> import pandas as pd 

>>> u = pd.Series([15 + i*3 for i in range(10)])
>>> u
0    15
1    18
2    21
3    24
4    27
5    30
6    33
7    36
8    39
9    42
dtype: int64

On constate que la variation absolue entre 2 états consécutifs de cette suite est constante et égale à 3. Il s’agit donc d’une suite arithmétique de raison r = 3 et de premier terme u(0) = 15.


Lorsque, pour tout entier naturel 𝑛 , la variation absolue 𝑢 (𝑛 + 1) − 𝑢 (𝑛 ) entre deux états consécutifs est constante, la suite est dite arithmétique. La valeur constante de la variation entre deux paliers consécutifs est appelée raison r de la suite.

Ainsi, 𝑢 étant une suite arithmétique définie sur N et de raison 𝑟, on a, pour tout entier naturel 𝑛 : 𝑢 (𝑛 + 1) − 𝑢 (𝑛 ) = 𝑟

On peut en déduire que, pour tout entier naturel 𝑛 : 𝑢(𝑛 ) = 𝑢 (0) + 𝑛 × 𝑟

Si le premier terme connu est 𝑢 (1 ) alors: 𝑢 (𝑛 ) = 𝑢 (1) + (𝑛 - 1) × 𝑟

De façon plus générale : 𝑢 (𝑛 ) = 𝑢 (p ) + (𝑛 - p) × 𝑟

Somme des termes consécutifs d’une suite arithmétique: S = nombre de termes * (premier terme + dernier terme) / 2


La suite arithmétique de raison r = 2 et de premier terme u(0) = 15 constitue un modèle mathématique discret de nos données.

Il est possible, connaissant la raison r de notre suite de déterminer n’importe quel terme d’indice n:

def suite_arithmétique(i, t, r, n):

	"""
	i: indice du premier terme de la suite (généralement 0 ou 1)
	t: premier terme de la suite, c'est à dire le terme u(i)
	r: raison de la suite
	n: indice de la suite dont on cherche le terme

	retourne u(n)
	
	"""

	return t + (n - i)*r    

Exemple:

>>> suite_arithmétique(0,15,3,5)
30


La représentation graphique en nuage de points de nos données discrètes constitue aussi un modèle discret:

>>> plt.plot(u, "*b", markersize=8, label="Taille")
[<matplotlib.lines.Line2D object at 0x72391950>]

>>> plt.xlabel("Temps (UA)", fontsize=8)
Text(0.5,0,'Temps (UA)')

>>> plt.ylabel("Taille (UA)", fontsize=8)
Text(0,0.5,'Quantité (UA)')

>>> plt.legend(loc='best', fontsize=8)
<matplotlib.legend.Legend object at 0x723a6130>

>>> plt.title("Taille = f(Temps)", fontsize=8)
Text(0.5,1,'Quantité = f(Temps)')

>>> plt.savefig("plot.png")

Ces modèles discrets ne permettent pas de déterminer la taille pour des états intermédiaires situés entre 2 états consécutifs. Dans l’exemple de notre plante qui a une croissance continue, on préfèrera donc travailler avec un modèle continu. Il faut pour cela effectuer des régressions et comparer les coefficients de corrélation des différentes régressions pour trouver la fonction mathématique la plus adaptée pour décrire le phénomène étudié de manière continue.


Testons d’abord une régression linéaire, nous allons pour cela utiliser le module koala:

>>> from koala import Koala

>>> k = Koala({"Temps":u.index, "Taille":u})

>>> c = k.lin("Temps", "Taille")

>>> c
AttrDict({'a': 3.0, 'b': 14.999999999999996, 'r': 1.0, 'equation': 'y = 3.0x + 15.0', 'graph': <module 'matplotlib.pyplot' from '/usr/local/lib/python3.6/site-packages/matplotlib/pyplot.py'>})

>>> plt.savefig("reg.png")

La variable c renvoie un dictionnaire au format AttrDict contenant les informations relatives à la régression:

( ⚠️ r désigne ici le coefficient de corrélation et non pas la raison de la suite)

>>> c.r
1.0

>>> c.equation
'y = 3.0x + 15.0'

Le coefficient de corrélation R est égale à 1, il s’agit donc d’une corrélation positive parfaite. On rappelle que le coefficient de corrélation est toujours compris entre -1 et +1 et que plus il est proche de -1 ou de +1 plus la corrélation est forte. Ce n’est donc pas la peine de tester d’autres régressions, et c’était prévisible du fait de l’alignement des points.


La droite de régression linéaire et sa fonction affine y = 3.0x + 15.0 constituent un modèle de croissance linaire continue de notre plante:

  • la pente a (coefficient directeur) de la droite de régression est égale à la raison r de la suite.

  • l’ordonnée à l’origine b de la droite de régression est égale au terme d’indice 0 de la suite.

Dans le cas de la croissance de notre plante, ce modèle continu est plus adapté que le modèle discret car il est plus proche de la croissance réelle de la plante qui est elle-même continue. On peut avec ce modèle déterminer des états (tailles) intermédiaires entre 2 états consécutifs mesurés par l’expérimentateur.




Suite géométrique et modèle exponentiel.

Lorsque pour tout entier naturel 𝑛 la variation relative ou taux de variation 𝑢 (𝑛 + 1) / 𝑢 (𝑛 ) entre deux termes consécutifs est constante, la suite est dite géométrique. Le rapport constant est appelé raison `q` de la suite.

Ainsi, 𝑢 étant une suite géométrique définie sur N et de raison q, on a pour tout entier naturel 𝑛:

𝑢 (𝑛 + 1) / 𝑢 (𝑛 ) = q

On peut en déduire que pour tout entier naturel 𝑛 :

𝑢 (𝑛 ) = 𝑢 (0 ) * qn

𝑢 (𝑛 ) = 𝑢 (1 ) * q(n-1)

𝑢 (𝑛 ) = 𝑢 (p ) * q(n-p)

De même que, si il existe un nombre réel k tel que , pour tout entier naturel 𝑛 :

𝑢 (𝑛 + 1) - 𝑢 (𝑛 ) = k * 𝑢 (𝑛 )

alors

𝑢 (𝑛 + 1) = (1 + k) * 𝑢 (𝑛 )

La suite 𝑢 est géométrique de raison (1 + k).

Somme des termes consécutifs d’une suite géométrique:

S = premier terme * (1 - qnombre de termes) / (1- q)

Représenter une suite géométrique avec python.

Prenons l’exemple d’une suite géométrique de raison constante q = 2 et de premier terme u (0) = 1.

Avec une liste en compréhension:

>>> v = [1*2**i  for i in range(10)] 
>>> v
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512]

Avec une formule explicite:

def v(i, t, q, n):

    """
    Suite géometrique (explicite)
	
    i: indice du premier terme de la suite (généralement 0 ou 1)
    t: premier terme de la suite, c'est à dire le terme v(i)
    q: raison de la suite
    n: indice de la suite dont on cherche le terme
	
	"""

	return t * q **(n - i)

Par récurrence:

def w(i, t, q, n):

    """
	
    Suite géometrique (recurrence)
	
    i: indice du premier terme de la suite (généralement 0 ou 1)
    t: premier terme de la suite, c'est à dire le terme w(i)
    q: raison de la suite
    n: indice de la suite dont on cherche le terme
	
    """
	
    for j in range(i,n):
	
        t = q * t
        
    return t

Avec Koala

>>> k = Koala({"indices":range(10), "termes":[1, 2, 4, 8, 16, 32, 64, 128, 256, 512]})

>>> k
   indices  termes
0        0       1
1        1       2
2        2       4
3        3       8
4        4      16
5        5      32
6        6      64
7        7     128
8        8     256
9        9     512

>>> m = k.exp("indices", "termes")

>>> m
AttrDict({'a': 1.0, 'b': 0.6931471805599452, 'r': 1.0, 'equation': 'y = 1.0 *exp(0.69x)', 'graph': <module 'matplotlib.pyplot' from '/usr/local/lib/python3.6/site-packages/matplotlib/pyplot.py'>})

Et afficher le graphique:

>>> m.equation
'y = 1.0 *exp(0.69x)'

On constate que:

  • les points du nuage de points sont parfaitement alignés sur la courbe de régression exponentielle

  • le coefficient de corrélation R = 1 témoigne d’une corrélation exponentielle positive parfaite.

  • a qui est égale à 1 représente le terme d’indice 0 de la suite

  • b qui est égale à 0.69 représente ici le taux de croissance intrinsèque r ( ⚠️ ce n’est pas la raison de la suite !)

  • la relation entre le taux de croissance intrinsèque r et le taux de croissance λ (qui correspond à la raison q de la suite) permet de retrouver la raison q de la suite:

λ = er

r = ln ( λ )

  • la demie-vie (ou période : T) dans le cas d’une suite décroissante de raison q < 1 (temps nécessaire pour que la quantité soit divisée par 2), ou le temps de doublement dans le cas d’une suite croissante de raison q > 1 (temps nécessaire pour que la quantité soit multipliée par 2) peuvent être déterminés graphiquement ou par la relation suivante:

Temps de doublement ou Demie-Vie = ln(2) / taux de croissance intrinsèque

Modèle discret vs modèle continu.

Modèle discret: croissance géométrique.

  • La plupart des organismes se reproduisent de façon annuelle.
  • Donc la croissance de la population s’effectue durant la saison de reproduction.
  • Une telle croissance ou décroissance dans les populations pendant un intervalle de temps discret produit une croissance géometrique.

La fraction de la taille de la population d’une année par rapport à celle de l’année précédente (ou du pas de temps précédent) est = λ (taux de croissance lambda) qui correspond à la raison q de la suite géométrique.

λ = Nt+1 / Nt

Donc:

Nt+1 = Nt * λ

Soit:

Nt=N0 * λt

C’est la même formulation que celle présentée précedement:

𝑢 (𝑛 ) = 𝑢 (0 ) * qn

Modèle continu: croissance exponentielle

Pour les populations qui se reproduisent de façon continue, des équations différentielles sont utilisées.

Rappelons que:

r = b - d

Avec:

  • r: le taux de croissance intrinsèque (aussi appelé paramètre Malthuséen).
  • b: le taux de natalité
  • d: le taux de mortalité

L’équation est:

dN / dt = r*N

La solution de cette équation est:

Nt =N0 * er*t

Comparaison des modèles discrets et continus

Les deux modèles de croissance sont équivalents:

  • Dans le modèle discret, l’équation est basée sur une différence (intervalle de temps discret) Nt+1 = Nt * λ, ou Nt=N0 * λt

    Le temps de doublement est T = ln 2 / ln λ

  • Dans le modèle continu, l’équation différentielle (temps continu ) dN/dt = rN a pour solution Nt =N0 * er*t

    Le temps de doublement est T = ln 2 / r

Noter que l’équation de croissance géométrique est la même que celle de la croissance exponentielle avec λ à la place de er

  • Nt =N0 * er*t

  • Nt=N0 * λt

Il existe une correspondance directe entre r et ln λ, avec r un taux d’accroissement instantané et λ un taux d’accroissement discret. Pour une population stable: λ=1 et r=0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment