%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\title{}
\author{}
\date{}

%%------------------------------------------------------------------------------
%% Packages

\usepackage{amsmath,amsfonts}
\usepackage{mathtools}
\usepackage[matha,mathb]{mathabx} % french mathematical symbols and more
\usepackage{amsthm}
\usepackage{geometry}
\usepackage[svgnames]{xcolor}
\usepackage{fancyhdr}
\usepackage{lastpage}
\usepackage{enumitem}
\usepackage{multicol}

\usepackage{hyperref}
\hypersetup{colorlinks=true,
  citecolor=DarkBlue,
  linkcolor=DarkBlue,
  linktoc=page,
  urlcolor=black,
}

\usepackage[french]{babel}

%% ------------------------------------------------------------------------------
%% Packages setup

% multicol
\setlength{\columnseprule}{.5pt}

% enumitem
\setlist{itemsep=0pt, topsep=0pt} % vertical spacing for all lists
  
\newlist{pbenum}{enumerate}{10} % enumerate for problems (nested like so : 1., 1.1., 1.1.1., etc)
\setlist[pbenum]{label*=\arabic*.}
\setlist[pbenum, 1]{itemsep=4pt plus 2pt minus 1pt, topsep=8pt plus 2pt minus 4pt} % default enumerate spacing

\setlist[enumerate, 1]{label = \arabic*.} % standard enumerate labels 
\setlist[enumerate, 2]{label = \alph*.}

% geometry
\geometry{textwidth = 0.85\paperwidth,
  textheight = 0.8\paperheight}
%defaults : textwidth = 0.7\paperwidth = 1675.8pt, textheight = 0.7\paperheight = 4788pt

% hyperref
\hypersetup{colorlinks=true,
  citecolor=DarkBlue,
  linkcolor=DarkBlue,
  linktoc=page,
  urlcolor=black}

% fancyhdr
%% BUG: Do not issue \fancypagestyle{fancy}{<fancyhdr commands>}, the LaTeX compiler will hang at the first \pagestyle{fancy} call since it will enter in an infinite recursive loop.

%% \fancypagestyle{fancy}{%
%%   \fancyhf{} % clear all header and footer fields
%%   \lhead{École Normale Supérieure de Lyon\\Département de mathématiques}
%%   \rhead{2021--2022\\Option B pour l'agrégation}
%%   \rfoot{\thepage /\pageref{LastPage}}
%%   \renewcommand{\footrulewidth}{0.5pt}
%%   \setlength{\headheight}{24.2pt}} % required for headers spanning two lines

\fancypagestyle{plain}{%
  \fancyhf{}
  \rfoot{\thepage /\pageref{LastPage}}
  \renewcommand{\headrulewidth}{0pt}}

\pagestyle{fancy} % sets page style for the whole document
\pagestyle{fancy}							% En-tête et pieds de page
\fancyhead[L]{Prépa agreg\\2023--2024\vspace{1em}}
\fancyhead[C]{Remise à niveau en Python}
\fancyhead[R]{ENS de Lyon \vspace{1em} }
\fancyfoot[C]{}
\renewcommand{\footrulewidth}{0.5pt}
\setlength{\headheight}{24.2pt} % required for headers spanning two lines

%%------------------------------------------------------------------------------
%% Custom environments/macros

\theoremstyle{definition}
\newtheorem*{defi}{Définition}

\newcommand{\R}{\mathbb{R}}
\newcommand{\C}{\mathbb{C}}
\newcommand{\Z}{\mathbb{Z}}
\newcommand{\Q}{\mathbb{Q}}
\newcommand{\N}{\mathbb{N}}
\newcommand{\ds}{\displaystyle}

\newcommand{\mc}{\mathcal}
\renewcommand{\Im}{\operatorname{Im}}

\DeclarePairedDelimiter{\norm}{\lVert}{\rVert} %% requires mathtools
\DeclarePairedDelimiter{\abs}{\lvert}{\rvert}
\DeclarePairedDelimiter{\sbra}{[}{]}
\DeclarePairedDelimiter{\pare}{(}{)}
\DeclarePairedDelimiter{\osbral}{]}{]}
\DeclarePairedDelimiter{\osbra}{]}{[}
\DeclarePairedDelimiter{\osbrar}{[}{[}

\newcounter{exercice}

\newcommand{\ex}{\refstepcounter{exercice}\paragraph{Exercice \theexercice.}}
\newtheorem{exo}{Exercice}
\newcommand{\staritem}{\refstepcounter{enumi}\item[$(\star)~$\theenumi]}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{center}
  {\LARGE \bf TD 1 : numpy et bases de Python}
\end{center}
\bigskip

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


\section*{Manipulation des array}


\begin{enumerate}
 
\item Écrire un programme qui crée un array contenant tous les nombres de 11 à 99.
\item Écrire un programme qui crée la matrice 3\(\times\)3 suivante :
  \[
    A = \begin{pmatrix}
      1 & 2 & 3\\
      4 & 5 & 6\\
      7 & 8 & 9
    \end{pmatrix}
  \]
  On pourra utiliser la méthode \texttt{.reshape()}.
  
\item Écrire un programme qui crée un array de taille \(n\times n\) avec des zéros à l'intérieur, et des 1 au bord.
\item Utiliser la fonction \texttt{np.vstack} pour écrire un programme qui concatène deux matrices avec le même nombre de colonnes.
\item Écrire un programme qui convertit un tableau de températures en degrés Celcius en degrés Fahrenheit.
\item Écrire un programme qui donne le nombre de lignes, le nombre de colonnes, et le nombre d'entrées dans un array donné.
\item Avec une matrice carrée \(A\), comparer \texttt{A**2} et \texttt{A.dot(A)}.
\item Écrire une fonction qui prend en entrée une matrice \(A\) et un entier \(n\) et qui renvoit \(A^n\) (on pourra utiliser l'algorithme d'exponentiation rapide).
\item Écrire un programme qui calcule la norme 2 d'un array donné.
\item Écrire un programme qui définit la matrice du Laplacien discret de taille \(n\) :
  \[
    \Delta_n =
    \begin{pmatrix}
      2 & -1 & 0 &  0 &\cdots &0 \\
      -1 & 2 & -1 & 0 && \\
      0 & -1 & 2 & -1 &&\vdots \\
      \vdots & & \ddots &\ddots & \ddots & \\
      & & & -1 & 2 & -1\\
      0 & \cdots & 0&0 &-1 & 2
    \end{pmatrix}
  \]
  On pourra utiliser la fonction \texttt{np.diag}.

\item
  \begin{enumerate}
  \item Discrétiser l'intervalle \([0,2\pi]\) avec \(1000\) points (utiliser \texttt{np.linspace}). Enregistrer ces points dans la variable \texttt{x}, ainsi que le pas spatial dans une variable \texttt{dx}.
  \item Créer le vecteur \texttt{y} contenant les valeurs de la fonction \(\sin\) aux points du vectuer \texttt{x}.
  \item Calculer la dérivée discrète \texttt{dfx} qui contient les quantités \((f(x_{i+1}-f(x_i))/dx\)
  \end{enumerate}
\item Écrire une fonction qui prend en entrée un array unidimensionnel et qui renvoit l'array composée des entrées d'indice pair.
\end{enumerate}

\section*{Quelques fonctions}

\begin{enumerate}[resume]
\item Écrire une fonction qui calcule \(n!\).
\item Écrire une fonction qui prend en entrée un entier \(n\) et qui renvoit le \(n\)ième terme de la suite de Fibonacci \(F_n\), puis calculer \(F_{1000}\).
\item Écrire une fonction qui prend en entrée un complexe \(c\) et qui détermine si la suite récurrente définie par
  \[\left\{  \begin{aligned}
        z_0&= 0 \\
        z_{n+1}&=z_n^2+c
      \end{aligned}\right.
  \]
  reste dans le disque de rayon 2, ou bien en sort pendant les \(10^5\) premières itérations.
\item Écrire une fonction qui calcule une valeur approchée de l'intégrale
  \[
    \int_a^b e^{-x^2}dx
  \]
  avec des sommes de Riemann.
\end{enumerate}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\end{document}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


