{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "ef689431",
   "metadata": {},
   "source": [
    "# Feuille d'exercices 10\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "```{admonition} Objectifs\n",
    "* Variables aléatoires\n",
    "* Statistiques\n",
    "```\n",
    "\n",
    "\n",
    "\n",
    "## Exercice 1 : variable aléatoire discrète\n",
    "\n",
    "**Question 1 :** Créer une variable aléatoire discrète `X` de distribution :\n",
    "\n",
    "$$\n",
    "    (0.4, 0.3, 0.2, 0.1)\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "13ab2913",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "248f27b3",
   "metadata": {},
   "source": [
    "**Question 2 :** Tirer aléatoirement $10000$ valeurs selon $X$, et stocker ces valeurs dans une liste `L`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c76c3deb",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "04e1fd5f",
   "metadata": {},
   "source": [
    "La méthode de liste `L.count(i)` permet de compter le nombre d'occurences de l'élément `i` dans le liste `L`.\n",
    "\n",
    "**Question 3 :** Dans une liste `B`, stocker à la position `i`  le nombre d'occurences de `i` dans la liste `L` créée à la question précédente."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "db5424d0",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "23f7895c",
   "metadata": {},
   "source": [
    "**Question 4 :** Visualiser la liste `B` sous forme de diagramme à barre, avec la fonction `bar_chart(B, ymin=0)`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "81e4d853",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fd48399a",
   "metadata": {},
   "source": [
    "## Exercice 2 : variable aléatoire continue\n",
    "\n",
    "\n",
    "**Question 1 :** Créer une variable aléatoire $G$ de distribution gaussienne et de variance $\\sigma = 1$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5dd91687",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "017bba4a",
   "metadata": {},
   "source": [
    "**Question 2 :** Tirer aléatoirement $10000$ valeurs selon $G$, et stocker ces valeurs dans une liste `M`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "eb59ab58",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e4bcd9a9",
   "metadata": {},
   "source": [
    "**Question 3 :** Calculer la moyenne de ces $10000$ valeurs, puis comparer à la valeur espérée ($0$)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "12fbaab7",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "93dbc77a",
   "metadata": {},
   "source": [
    "**Question 4 :** Calculer une approximation de l'écart-type de ces $10000$ valeurs :\n",
    "\n",
    "$$\n",
    "\\sqrt{\\frac{1}{10000} \\sum_{i=0}^{9999} M_i^2}\n",
    "$$\n",
    "\n",
    "puis comparer à la valeur espérée ($\\sqrt{\\sigma} = 1$)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7c6a03fd",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8894fe99",
   "metadata": {},
   "source": [
    "## Exercice 3 : approximation de $\\pi$\n",
    "\n",
    "**Question 1 :** Écrire une fonction `interieur_disque(x, y)` qui teste si un point de coordonnées $(x,y)$ est à l'intérieur du cercle de centre $(0, 0)$ et de rayon $1$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "fa2e8791",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c03959e2",
   "metadata": {},
   "source": [
    "**Question 2 :** Écrire une fonction `tirages_carre(N)` qui retourne une liste de $N$ points $(x, y)$, tirés uniformément dans $[-1, 1]^2$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "38707d16",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "88554488",
   "metadata": {},
   "source": [
    "**Question 3 :** Afficher sur un même grahique le cercle unité (en bleu) et $100$ points tirés selon la méthode de la question pérécedente (en rouge).\n",
    "\n",
    "*Indication : pour afficher un cercle, on peut utiliser la fonction `circle(P, r)`, qui crée un cercle de centre `P` (un point du plan sous la forme d'une liste de ses deux coordonnées) et de rayon `r` (une valeur positive).*"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c284d0c7",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c39f3a39",
   "metadata": {},
   "source": [
    "Pour de grandes valeurs de $N$, le rapport $r = \\frac{N_{\\rm in}}{N}$ entre le nombre de tirages à l'intérieur du disque et le nombre de tirages total, tend vers le rapport $a = \\frac{{\\rm aire(disque)}}{{\\rm aire(carré)}}$ des aires du disque et du carré $[-1, 1]^2$.\n",
    "\n",
    "**Question 4 :** Déduire de la remarque précédente une approximation de $\\pi$, en tirant $10000$ points."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "0a7e9a88",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c109f5fb",
   "metadata": {},
   "source": [
    "## Exercice 4 : fougère de Barnsley\n",
    "\n",
    "Le but de cet exercice est de produire la **fractale** appelée \"fougère de Barnsley\", référence [ici](https://fr.wikipedia.org/wiki/Foug%C3%A8re_de_Barnsley).\n",
    "\n",
    "Pour construire cette fractale, on considère $4$ matrices $M_1$, $M_2$, $M_3$, $M_4$ et $4$ vecteurs $b_1$, $b_2$, $b_3$ et $b_4$ :\n",
    "\n",
    "$$\n",
    "M_1 = \\begin{pmatrix} 0 & 0 \\\\ 0 & 0.16 \\end{pmatrix},\\quad \n",
    "M_2 = \\begin{pmatrix} 0.8 &  0.04 \\\\-0.04 & 0.85 \\end{pmatrix},\\quad \n",
    "M_3 = \\begin{pmatrix} 0.2 & -0.26 \\\\ 0.23 &  0.22 \\end{pmatrix},\\quad \n",
    "M_4 = \\begin{pmatrix} -0.15 & 0.28 \\\\ 0.26 & 0.24 \\end{pmatrix}\n",
    "$$\n",
    "\n",
    "$$\n",
    "b_1 = \\begin{pmatrix} 0 \\\\ 0\\end{pmatrix},\\quad \n",
    "b_2 = \\begin{pmatrix} 0 \\\\ 1.6 \\end{pmatrix},\\quad \n",
    "b_3 = \\begin{pmatrix} 0 \\\\ 1.6 \\end{pmatrix},\\quad \n",
    "b_4 = \\begin{pmatrix} 0 \\\\ 0.44 \\end{pmatrix}\n",
    "$$\n",
    "\n",
    "Cette fractale est produite de la manière suivante :\n",
    "- on part du point initial $P_0 = (x_0, y_0) = (0, 0)$\n",
    "- puis, pour tout $n$, le point $P_n$ est construit en fonction de $P_{n-1}$ avec un processus aléatoire :\n",
    "  - avec probabilité $0.01$, on a $P_n = M_1 P_{n-1} + b_1$\n",
    "  - avec probabilité $0.85$, on a $P_n = M_2 P_{n-1} + b_2$\n",
    "  - avec probabilité $0.07$, on a $P_n = M_3 P_{n-1} + b_3$\n",
    "  - avec probabilité $0.07$, on a $P_n = M_4 P_{n-1} + b_4$\n",
    "  \n",
    "Pour un entier $N$ fixé, la fractale de Barnsley de taille $N$ correspond à l'ensemble des points $P_0, \\dots, P_{N-1}$ ainsi construits.\n",
    "\n",
    "Voici la fractale voulue (avec $250000$ points).\n",
    "\n",
    "\n",
    "\n",
    "```{image} ../../images/fougere.png\n",
    ":alt: fougere\n",
    ":width: 60%\n",
    ":align: center\n",
    "```\n",
    "\n",
    "\n",
    "\n",
    "**Question.** Construire une fonction `fougere(N)` qui construit la liste des points de la fractale de Barnsley de taille $N$.\n",
    "\n",
    "Puis, afficher cette fractale pour $N = 1000$, $N = 10000$ et si possible, $N= 100000$. Pour l'affichage, on utilisera un nuage de points verts de taille `size=2` ou `size=1`, et on enlèvera les axes de la figure avec l'option `axes=False`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "480825a0",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Sagemath",
   "language": "python",
   "name": "sagemath"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
