{ "metadata": { "name": "", "signature": "sha256:7be04c2dc97114fe775ba8088973a57f4a4c1390163f8442b565916dbc59c86e" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 5, "metadata": {}, "source": [ "TP 4 -- Informatique CM3 -- Octobre 2014 " ] }, { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Python @ Polytech'Lille" ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Modalit\u00e9s pour accomplir le TP et compte rendu" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Vous aurez \u00e0 \u00e9crire 2 scripts (script1.py , script2.py). Les scripts doivent \u00eatre accompagn\u00e9s par un document descriptif unique (README.txt). Dans ce fichier, vous devrez d\u00e9crire le mode de fonctionnement des scripts et, si besoin, mettre vos commentaires. Merci d'y \u00e9crire aussi vos noms et prenoms complets. \n", "\n", "Tous les fichiers doivent etre mis dans un dossier appel\u00e9 TP4-nom et ensuite \u00eatre compress\u00e9s dans un fichier archive TP4-nom.tgz . \n", "\n", "Enfin vous allez envoyer ce fichier par email \u00e0 l'enseignant: soit Enrico (enrico.calzavarini@polytech-lille.fr) ou Stefano (stefano.berti@polytech-lille.fr)." ] }, { "cell_type": "heading", "level": 5, "metadata": {}, "source": [ "Vous avez 2 heures \u00e0 disposition pour ce TP. Le compte rendu est \u00e0 rendre avant la fin de la s\u00e9ance." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Script 1 : Vitesse maximale d'une voiture dans un virage" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Un v\u00e9hicule se d\u00e9place \u00e0 une vitesse $\\bf{v}$ de module constant sur une route qui pr\u00e9sente un virage de rayon de courbure $r = 50\\ m$. Si le coefficient de frottement statique (adh\u00e9rence) entre la chauss\u00e9e et les pneus de la voiture est $\\mu_s = 0,8$, quelle est la vitesse maximale \u00e0 laquelle la courbe peut \u00eatre parcourue?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A noter que pour que la voiture puisse parcourir le virage sans glisser, une condition d'adh\u00e9rence doit \u00eatre respect\u00e9e. Notamment, le module de la force de frottement $F_t$ (la composante tangentielle de l'action m\u00e9canique de contact) doit \u00eatre inf\u00e9rieur \u00e0 une valeur maximale $\\mu_s N$ proportionnel au module de la composante normale $\\bf{N}$ (de l'action mecanique de contact). La composante normale \u00e9quilibre le poids de la voiture $\\bf{P}$, donc $N=P$. D'autre part, la force ${\\bf{F}}_t$ produit l'acc\u00e9l\u00e9ration centrip\u00e8te $\\displaystyle a=\\frac{{|\\bf{v}|}^2}{r}$ responsable du changement de direction de la voiture (virage).\n", "\n", "Par cons\u00e9quent, la condition d'adh\u00e9rence devient:\n", "\n", "$$ F_t \\leq \\mu_s N$$\n", "\n", "o\u00f9 : \n", "$$F_t = M\\ a = M \\ \\frac{|{\\bf v}|^2}{r}$$\n", "\n", "$$N = P = \\ M \\ g$$\n", "\n", "avec $M$ la masse de la voiture (pas n\u00e9cessaire dans la solution de ce probl\u00e8me) et $g=9.81 \\ m s^{-2}$ l'acc\u00e9l\u00e9ration de la pesanteur." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u00c9crire un script qui demande \u00e0 l'utilisateur le rayon de courbure du virage (en m\u00e8tres) et la vitesse de la voiture. \n", "\n", "L'utilisateur pourra choisir les unit\u00e9s qu'il pr\u00e9f\u00e8re pour la vitesse (soit \"km/h\" ou \"m/s\") et le script devra les convertir de fa\u00e7on appropri\u00e9e \u00e0 travers une $fonction$.\n", "\n", "Le script devra ensuite afficher la vitesse maximale admise pour la courbe en question ($v_{max}$) et informer l'utilisateur s'il doit ralentir (quand $v>v_{max}$).\n", "\n", "Essayez votre script avec les valeurs $v=60\\ km/h$ et $v=108\\ km/h$ pour le module de la vitesse." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Bonus : Freinage sans glissement sur une route rectiligne" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "La m\u00eame voiture va \u00e0 la m\u00eame vitesse sur une route rectiligne. Le conducteur freine jusqu'\u00e0 l'arr\u00eater compl\u00e8tement. Quelle est la distance minimale ( $l_{min}$ ) n\u00e9c\u00e9ssaire pour arr\u00eater la voiture dans le cas d'une d\u00e9c\u00e9l\u00e9ration constante?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "La d\u00e9c\u00e9l\u00e9ration maximale de la voiture est d\u00e9termin\u00e9e par la valeur maximale de la force de frottement :\n", "\n", "$$ F_t \\leq \\mu_s N$$\n", "\n", "avec : \n", "$$F_t = M\\ a $$\n", "\n", "$$N = P = M \\ g .$$\n", "\n", "Si l'acc\u00e9l\u00e9ration est constante, la distance parcourue ($l$) est li\u00e9e \u00e0 la vitesse intiale $v$ et \u00e0 l'acc\u00e9l\u00e9ration ($a$) par la relation :\n", "\n", "$$ l = \\frac{1}{2} \\frac{v^2}{a}.$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ajouter au script pr\u00e9c\u00e9dent l'affichage de la distance minimale d'arr\u00eat ( $l_{min}$ )." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Script 2 : Fonction de transfert du syst\u00e8me de suspension d\u2019un automobile : analyse des donn\u00e9es issues d'une mesure. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nous avons d\u00e9j\u00e0 vu que l'expression de la fonction de transfert d'un syst\u00e8me de suspension d'une voiture a l'expression suivante:\n", "\n", "$$ T(u) = A \\frac{1}{\\sqrt{ \\left( 1 - u^2 \\right)^2 + u^{2}/ \\ Q^2}} $$\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "avec l'amplitude $A = F / ( m \\omega_0^2)$ , la pulsation adimensionn\u00e9e $u = \\omega/\\omega_0$ , et le facteur de qualit\u00e9 $Q$ ." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nous disposons d'une serie des donn\u00e9es, issues d'une mesure, de la fonction de r\u00e9ponse d'un syst\u00e8me de suspension d'automobile. \n", "\n", "Les mesures sont organis\u00e9s en deux fichiers : \"pulsation_adim.txt\" et \"transfert.txt\".\n", "Le premier contient les valeurs $u_i$ d'\u00e9chantillonnage de la pulsation adimensionnelle, le second les valeurs de l'intensit\u00e9 de la fonction de transfert $T_i$ pour les valeurs de $u_i$ consid\u00e9r\u00e9es.\n", "\n", "La valeur du facteur de qualit\u00e9 $Q$ est inconnue, et notre objectif est de l'estimer \n", "\u00e0 partir de l'analyse des mesures.\n", "\n", "Les mesures, comme dans toute autre exp\u00e9rience, sont affect\u00e9es par des erreurs al\u00e9atoires (bruit exp\u00e9rimental).\n", "Par cons\u00e9quent, afin d'estimer $Q$, nous devons utiliser un indicateur de vraisemblance.\n", "Nous choisissons d'utiliser ici la m\u00e9thode des moindres carr\u00e9s, qui est bri\u00e8vement d\u00e9crite ci-dessous.\n", "\n", "A partir d'une s\u00e9rie de $N$ donn\u00e9es $T_i$, \u00e9chantillonn\u00e9es \u00e0 $u_i$ (avec $i=0,N-1$, o\u00f9 $N$ est le nombre de lignes dans le fichier), nous d\u00e9finissons le coefficient de vraisemblance $S$ :\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$ S = {\\Large \\Sigma}_{i=0}^{N-1}\\ \\left( T(u_i) - T_i \\right)^2 $$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "La valeur de $Q$ qui minimise le coefficient de vraisemblance $S$ repr\u00e9sente la meilleure estimation du facteur de qualit\u00e9 $Q$. Donc c'est la valeur que nous cherchons, et nous l'appelons $Q_{best}$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Le but de cet exercice est d'\u00e9crire un script qui effectue les actions suivantes.\n", "\n", "a) Lire les donn\u00e9es des deux fichiers et tracer un graphique de $T_i$ en fonction de $u_i$.\n", "\n", "b) Effectuer l'analyse des moindres carr\u00e9s, \u00e0 l'aide d'une $fonction$ qui calcule $S$, et d'une $boucle$ (\"while\" ou \"for\") pour d\u00e9terminer la valeur $Q$ qui minimise $S$ dans l'interval $Q\\in [0.1,3]$. Dans la boucle on pourra incr\u00e9menter les valeurs de $Q$ par addition d'une quantit\u00e9 petite, par exemple $\\Delta Q=0.1$.\n", "Enfin, afficher la valeur de $Q_{best}$. On rappelle que $T_i$ sont les valeurs mesur\u00e9es et $T(u_i)$ sont les valeurs calcul\u00e9es (\u00e0 partir des valeurs exp\u00e9rimentales de $u_i$) avec la fonction $T(u)$. Dans cet exercice on prendra $A=2$.\n", "\n", "c) Tracer un graphique de $T_i$ en fonction de $u_i$ ainsi que de la courbe de transfert $T(u)$ correspondant \u00e0 la valeur $Q=Q_{best}$." ] }, { "cell_type": "heading", "level": 5, "metadata": {}, "source": [ "Conseils : " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1) Pour la lecture des donn\u00e9es \u00e0 partir des fichiers vous pouvez suivre les informations dans le TP1 (et dans votre script 3 du TP1).\n", "\n", "2) Il pourrait \u00eatre aussi utile de se rappeler que la commande \"len\" restitue le nombre d'\u00e9l\u00e9ments d'une liste (ou d'un array), voir indications dans le TP1.\n", "\n", "3) Apr\u00e8s avoir lu les donn\u00e9es, il sera n\u00e9c\u00e9ssaire de les transformer en des tableaux numpy. Pour ce faire il est possible d'utiliser la commande \"np.asarray\". \n", "Supposons que vous avez lu les donn\u00e9es du tableau \"data\". Ce tableau sera de type \"cha\u00eene de caract\u00e8res\". Afin de le convertir en un tableau numpy, vous pouvez utiliser: " ] }, { "cell_type": "raw", "metadata": {}, "source": [ "data = np.asarray(data, dtype=float)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "4) Pour calculer la fonction de transfert T(u), vous pouvez r\u00e9utiliser une partie de votre script 2 du TP2." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "5) Pour calculer le minimum de $S$ avec une boucle sur les valeurs de $Q$: initialiser la valeur du minimum \u00e0 une valeur tr\u00e8s grande (p.ex. $S_{min}=1000.0$) avant de rentrer dans la boucle; calculer $S$ pour la valeur actuelle de $Q$ et v\u00e9rifier si $S < S_{min}$; en cas affirmatif $S$ devient le nouveau minimum; it\u00e9rer sur toutes les valeurs de $Q$." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from IPython.core.display import HTML\n", "def css_styling():\n", " styles = open('custom.css', 'r').read()\n", " return HTML(styles)\n", "css_styling()" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", "\n", "\n", "\n", "" ], "metadata": {}, "output_type": "pyout", "prompt_number": 1, "text": [ "" ] } ], "prompt_number": 1 } ], "metadata": {} } ] }