\documentclass{pbsheet} \TITRE{Feuille de TP n°1 -- Initiation à Matlab} \FORMATION{Préparation à l'épreuve de modélisation - Agrégation Externe de Mathématiques} \ETABLISSEMENT{Université de l'Anonyme XXII} \ANNEE{2004} \MEL{agreg@labo.univ.fr} \AUTEUR{A. Grégatif} \WEB{http://www.labo.univ.fr/} \DATE{\today} \begin{document} Ce TP porte sur les entrées et sorties, les fonctions et les outils graphiques dont vous disposez sous Matlab. \section{Entrées et sorties} La commande \texttt{input} permet de demander à l'utilisateur Matlab d'entrer les valeurs de variables à utiliser. La commande \texttt{pause} permet de stopper l'exécution Matlab. Vous pouvez préciser le nombre de secondes de pose ou revenir à Matlab en appuyant sur n'importe quelle touche. La commande \texttt{save} permet de sauvegarder dans un fichier, dont le nom par défaut est \texttt{matlab.mat}, le contenu de certaines variables dont vous souhaitez garder une trace. Ce fichier peut être appelé par la commande \texttt{load} qui restaure toutes les variables que vous avez sauvegardées. \begin{lstlisting}[language=Matlab]{Créations et Sauvegardes sous Matlab} n=input('Entrez la valeur de n : '); % Affectez une valeur à n. a=input('Precisez la valeur de a : '); % Affectez une valeur à a. v=a.^[0:n]; A=toeplitz(v); d=det(A); % Création de la matrice de Toeplitz A save restoep n a A d; % Sauvegarde de n, a, A, d dans restoep.mat clear % Efface toutes les variables de la session. load restoep % Restaure les variables de restoep.mat. who % Vérification. \end{lstlisting} \section{Fonctions} Un ensemble de commandes Matlab peut être considéré comme une fonction. On peut voir une fonction comme un sous-programme Matlab dont les paramètres éventuels sont les arguments de la fonction et dont les résultats sont les images de cette fonction. Beaucoup de fonctions Matlab, comme par exemple \texttt{mean}, sont déjà écrites en Matlab et le code Matlab correspondant est stocké dans un fichier dont le nom se termine par \texttt{.m}. Pour \texttt{mean}, il s'agit de \texttt{mean.m}. Ajouter de nouvelles fonctions à Matlab revient donc à écrire de nouveaux fichiers de ce type. Il est d'usage d'appeler une fonction du même nom que le fichier correspondant. \textbf{Simulation de lois discrètes.} Dans votre répertoire personnel, éditer le fichier \texttt{probadis.m} suivant dont le code Matlab génère une réalisation aléatoire d'une loi discrète à support fini. \MFILE{probadis} La commande Matlab \texttt{type} permet de lister le contenu d'un fichier. Ainsi, \texttt{type probadis} vous montrera le code source Matlab de la fonction \texttt{probadis}. Le commentaire ajouté à partir de la seconde ligne constituera l'aide affiché lorsque l'utilisateur tapera \texttt{help probadis}. Finalement, la commande \texttt{what} liste les fichiers Matlab du répertoire courant. Voici une autre fonction de simulation de loi discrète, qui peut renvoyer une matrice de réalisations. \MFILE{rdiscr} \begin{exo}[Loi binomiale] Créer un code Matlab permettant de générer un vecteur aléatoire $X$ contenant $N$ réalisations i.i.d. de loi binomiale $\cB(n,p)$ où les valeurs $N,n\geq 1$ et $00$. Si $S_n=\sum_{k=1}^n X_k$, $N_0=0$ et pour tout $t> 0$, $N_t=\sum_{n=1}^\infty \rI_\BRA{S_n\leq t}$, $(N_t)_{t\geq0}$ est un processus de Poisson d'intensité $\lambda$. Montrer que, pour tout $t>0$, $N_t$ suit la loi de Poisson $\cP(\la t)$. En déduire un code Matlab permettant de générer un vecteur aléatoire $Y$ contenant $N$ réalisations i.i.d. de loi $\cP(\la)$ où les valeurs $N\geq 1$ et $\la>0$ sont affectées par l'utilisateur. Pour $N$ assez grand, vérifier la LGN sur les moyennes empiriques successives de $Y$. \end{exo} \begin{exo} Pour $N$, $N_1$ et $n \geq 1$ avec $N_1,n \leq N$, la loi hypergéométrique $\cH(N,N_1,n)$ est donnée, pour tout $k \in \dN$ avec $0\leq k \leq n$, par $\dP(X=k)=C_{N_1}^kC_{N-N_1}^{n-k}/C_N^n$. Créer un code Matlab permettant de générer un vecteur aléatoire $Z$ contenant $M$ réalisations i.i.d. de loi $\cH(N,N_1,n)$ où les valeurs $M, N \geq 1$ et $N_1,n\leq N$ sont affectées par l'utilisateur. \begin{enumerate} \item Si $N$ tend vers l'infini et le rapport $N_1/N$ tend vers $p$ avec $00$, montrer que $X$ converge en loi vers la loi de Poisson $\cP(\la)$. Pour $M$, $N$ assez grand, $N_1=\la\sqrt{N}$ et $n=\sqrt{N}$, tracer l'histogramme de $Z$ et comparer le à la loi $\cP(\la)$. \end{enumerate} \end{exo} \section{Représentations graphiques} \begin{lstlisting}[language=Matlab] {Illustration de la LGN pour la loi exponentielle} clear; n=1000; lambda=0.5; X=-log(rand(n,1))/lambda; figure; % Création d'une nouvelle fenêtre graphique. plot(cumsum(X)'./[1:length(X)],'b') % Trace les moy. emp. successives de X. title('Loi des Grands Nombres') % Titre de la figure. xlabel('Nombre de réalisations') % Titre des abscisses. ylabel('Moyennes empiriques') % Titre des ordonnées. hold on % Garde la fenêtre graphique. plot(1/lambda*ones(n,1),'r--'); % Trace la limite théorique. legend('Empirique','Theorique'); % Légende. \end{lstlisting} \begin{exo} Ajouter à vos codes Matlab les représentations graphiques rencontrées ci-dessus. \end{exo} \FIG{simbin}{1.0}{htbp}{Sortie graphique du programme \ref{code:simbin} \pageref{code:simbin}.} Voici une fonction Matlab qui permet de simuler la loi uniforme discrète finie de façon rapide et simple. \MFILE{rint} \nocite{*} \phantomsection % Nécessaire pour le PDF. \addcontentsline{toc}{section}{Bibliographie} \bibliographystyle{amsalpha} \bibliography{xpl-fr} \end{document}