Cet exercice porte sur l'implémentation de la fonction exponentielle de deux façons différentes (Question 1.1 et Question 1.2) en Python.
Implémenter en Python une fonction qui calcule la valeur de la somme partielle du développement en série entière de la fonction exponentielle, ayant la signature suivante :
def exp_serie(x, n):
La somme partielle est définie comme suit :
$$ e^x \simeq \sum_{n=0}^N \frac{x^n}{n!} $$Vous pourrez réécrire cette somme à l'aide de la suite de fonction suivante :
$$ \begin{align} \left ( x \mapsto t_n(x) \right )_{n \in \mathbb{N}} \\[2ex] \text{où} \quad t_n(x) = \frac{x^n}{n!} \\ \end{align} $$**Important**
Vous prendrez le soin, au préalable, de trouver une relation de récurrence entre $t_{n+1}(x)$ et $t_n(x)$, pour alléger les calculs sur les factoriels.
Implémenter en Python une fonction qui calcule la valeur du développement tronquée à l'ordre $n$ en fraction continue généralisée de la fonction exponentielle, ayant la signature suivante :
def exp_frac(x, n, acc=0):
Le développement est de la forme suivante :
$$ \begin{align} e^x &= b_{-1} + \frac{a_0(x)}{b_0(x)+} \frac{a_1(x)}{b_1(x)+} \frac{a_2(x)}{b_2(x)+} \; ... \\[2ex] e^x &= b_{-1} + \frac{a_0(x)}{b_0(x)+\frac{a_1(x)}{b_1(x)+\frac{a_2(x)}{b_2(x)+ \; ...}}} \\ \end{align} $$avec :
$$ b_{-1}(x) = 0 \qquad \begin{cases} a_{0}(x) = 1 \\[2ex] b_{0}(x) = 1 \\[2ex] \end{cases} \qquad \begin{cases} a_{1}(x) = -x \\[2ex] b_{1}(x) = 1 + x \\[2ex] \end{cases} \qquad \begin{cases} a_{2}(x) = -x \\[2ex] b_{2}(x) = 2 + x \\[2ex] \end{cases} \qquad \begin{cases} a_{3}(x) = -2x \\[2ex] b_{3}(x) = 3 + x \\[2ex] \end{cases} \qquad ... $$**Important**
Vous prendrez le soin, au préalable, de trouver une relation de récurrence entre $\frac{a_{n+1}(x)}{b_{n+1}(x)+}$ et $\frac{a_{n}(x)}{b_{n}(x)+}$.
Cet exercice porte sur l'implémentation d'un algorithme qui permet de construire de façon itérative le flocon de Koch. L'algorithme est illustré en images, ci-dessous.
La première chose à faire est d'implémenter une fonction capable de tracer un contour quelconque (ouvert ou fermé) dans une fenêtre carrée de côté 2 * scale
. Cette fonction aura la signature suivante :
def plot(contour, scale=1.0):
À présent, on souhaite implémenter une fonction qui à partir d'un segment (deux points) quelconque, va générer la liste des points issus de la subdivision de ce segment (première étape). Cette fonction aura la signature suivante :
def subdiv(p0, p4):
Il faut implémenter une fonction qui à partir d'un contour quelconque, va générer un nouveau contour résultant de l'application de la fonction subdiv
sur chaque des segments de ce dernier (deuxième étape). Cette fonction aura la signature suivante :
def next(contour):
Il ne reste plus qu'à boucler sur la fonction next
pour générer un flocon de Koch.
Implémenter une fonction qui permet de générer un contour fermé et régulier à n
sommets. Cette fonction aura la signature suivante :
def spawn_contour(n):
Réécrivez une nouvelle fonction capable d'afficher non plus un contour, mais une liste de contours. Cette fonction aura la signature suivante :
def plots(contours, scale=1.0):