TP1 Initiation à Scilab (2) Le calcul matriciel Exercice 1 – Quelques rappels de L1 : Création de matrices - L’opérateur « : » - Les commandes size, length, zeros, ones, eye - Affecter à A, b et c les matrices suivantes - Faire afficher l’élément A22 ainsi que les éléments b1 et c2. Mettre dans la variable B la 2ème ligne de A et dans C la 3ème colonne de A. Extraire de A la sous matrice D correspondante aux deux dernières colonnes. À partir de A, b et c définir les matrices - Faire afficher les dimensions de A, b et c. Créer des matrices 5!6 de zéros, puis de 1 ainsi que la matrice identité de dimensions 3!3. Créer les vecteurs lignes x, y, z, t contenant, respectivement : les nombres « entiers » compris entre 0 et 10, les nombres pairs compris entre 0 et 10, les nombres compris entre 0 et 1 par pas de 0.1, les nombres compris entre 70 et 100 par pas de 10 rangés par ordre décroissant. Exercice 2 - Addition, multiplication, transposition On utilise les matrices de l’exercice 1. Calculer - la matrice E + I où I est la matrice identité 3 ! 3, - la matrice transposée de A, - la partie symétrique et la partie antisymétrique de E, - la matrice produit H = A ! E, le vecteur produit v = A ! d, Que donnent les instructions : d*d’ et d’*d ? Comparer avec norm(d)^2. Pourquoi les instructions d*d ou E*F génèrent-elles une erreur ? Exercice 3 - Matrice inverse – Résolution de système linéaire (commandes inv, min, max, sum et opérateur « \ » ) On considère le système linéaire On note A la matrice du système et X le vecteur solution. Calculer le déterminant de A puis sa trace. Calculer la matrice B = A-1 inverse de A. Vérifier que AB = BA = I. Résoudre ce système linéaire par au moins deux façons différentes. LSTE – Semestre 3 Outils Mathématiques TP1 Faire afficher le plus grand et le plus petit élément de A puis la somme des coefficients de B. Exercice 4 – Éléments propres d’une matrice (commande spec) 1) Vérifier que le vecteur ! $ u=# 1 & " 1 % est un vecteur propre de la matrice " % M = $ 0 2 '. # 3 !1 & Quelle est la valeur propre associée ? 2) On donne ! 5 0 3 $ A = ## 0 4 0 && . #" 3 0 5 &% a) Pourquoi est-on sûr que toutes les valeurs propres sont réelles ? Quelle particularité ont les vecteurs propres de A ? b) Faire calculer les valeurs propres et les vecteurs propres. Ranger les vecteurs propres dans trois tableaux u, v et w. Vérifier les réponses aux questions précédentes. Rappels sur les graphiques Exercice 5 – Nuage de points et graphe d’une fonction (commande plot) Représenter sur l’intervalle [-2, 2] le graphe de la fonction f (x) = x en trait continue rouge, puis en bleu, celui des fonctions f! (x) = x 2 + ! 2 pour différentes valeurs de ! (on pourra prendre ! = 1, ! =0.5 et ! = 0.1). Représenter sous forme d’un nuage de points le graphe de f0 (x) . Exercice 6 – Déformation par cisaillement a) Représenter en bleu le carré R [0,10] ! [0,10] et le cercle C de centre (5,5) et de rayon 3. On définira pour cela dans des tableaux Xr, Yr puis Xc, Yc, les abscisses et les ordonnées de quelques points sur chacune de ces figures. Faire tracer aussi les diagonales de R. Pour avoir une vue à l’échelle utiliser la commande isoview. On suppose que le carré est l’image d’un corps matériel sur lequel on a tracé à la craie le cercle C. On fait subir à ce corps une déformation qui consiste à mouvoir parallèlement à l’axe x tout point (X,Y) de C selon un déplacement donné par ! Y / 2$ ! u(X ,Y ) = # &. " 0 % Un point quelconque, initialement en (X,Y), se retrouve donc déplacé à la position (x,y) avec x=X+Y/2 et y=Y. b) Représenter en rouge les nouvelles images du carré R, de ses diagonales et du cercle C. On calculera pour cela les nouvelles positions xr, yr et xc, yc. En quoi est transformé C ? ! c) Calculer le gradient de la fonction vectorielle u. d) On appelle tenseur de déformation, la partie symétrique de ce gradient. Faire calculer les valeurs propres et les vecteurs propres de la déformation. LSTE – Semestre 3 Outils Mathématiques TP1 TP2 Initiation à Scilab (2) Rappels de programmation On traitera chacun des exercices dans un fichier différent (ex. TD3_ex1a.sce). Exercice 1 : Les boucles (instruction for) a) On donne le tableau Tab = ( 1, 3, 5, 7, 9, 11, 13, 15, 17, 19 ) Utiliser une boucle pour faire afficher, l’un après l’autre, les éléments de Tab. À l’aide de la même boucle faire calculer le tableau Tab2 dont les éléments sont Tab(i)+1 b) Calculer les 30 premiers termes de la suite de Fibonacci définie par Faire afficher k, tk, tk / tk-1 pour k = 1, 2,.., 30. Exercice 2 : Les tests (instructions if-else-end) a) Conjecture hongroise : soit la suite de nombres entiers engendrée comme suit (k=2, 3,…) où N est un entier donné. Vérifier que cette suite finit toujours par cycler sur le triplet 4, 2, 1, quelle que soit la valeur de N. Remarque : pour reconnaitre si un nombre est pair, on peut utiliser la fonction modulo(x,y) qui calcule le reste de la division de x par y. b) Arrêt suivant un test : reprendre l’exercice 1b en arrêtant les calculs si la valeur du rapport tk / tk-1 est à moins de 10-6 près du nombre (1+ 5)/2 (pour arrêter l’exécution d’une boucle il suffit d’utiliser l’instruction break). Exercice 3 : L’instruction while Même exercice que le 2b mais supprimer la boucle for et le test if et utiliser une instruction while. Exercice 4 : Les fonctions – Programmation du produit matriciel Écrire une fonction qui calcule à l’aide d’une boucle for le produit matriciel de deux matrices. Cette fonction prendra comme arguments d’entrée, deux matrices, A et B, et comme argument de sortie la matrice produit C = AB. Elle affichera un message d’erreur dans le cas où les matrices A et B sont incompatibles pour la multiplication. LSTE – semestre 3 Outils Mathématiques TP2 Exercice 5 : Les fonctions – Programmation de la méthode des trapèzes Considérons la méthode des trapèzes (approximations numérique d’une intégrale) à n points : où les xi sont n points de [a,b] régulièrement espacés de h = (b – a)/(n - 1) avec x1 = a et xn = b. Écrire une fonction (TD2_ex12) qui réalise ce calcul pour toute fonction f. Cette fonction devra prendre comme arguments d’entrée : les bornes a et b, le nombre n de points et le nom de la fonction f et bien sûr elle renvoiera l’approximation de I. Attention : prévoir le cas a = b ! Tester cette fonction avec les résultats suivants : Utiliser cette fonction pour calculer la fonction erreur erf(x) = 2 ! x 2 "t # e dt 0 entre 0 et 3 par pas de 0.05 (utiliser une boucle). Placer le résultat dans un tableau E1. Faire la même chose à partir de la fonction erf de Scilab en mettant le résultat dans un tableau E2. Comparer les résultats en calculant les différences absolues et relatives exprimées en %. LSTE – semestre 3 Outils Mathématiques TP2 TP3 Initiation à Scilab (2) Simulation du rebond d’une balle But : il s’agit de simuler le mouvement d’une balle pesante lancée dans un domaine compris entre quatre murs sur lesquels elle peut rebondir. 1) Description du problème physique Soit une balle indéformable, dont le mouvement est assimilé à celui de son centre de gravité, contrainte à rester dans le domaine compris entre les droites d’équation x1=0 (« mur gauche »), x1=L (« mur droit »), x2=0 (« sol ») et x2=H (« plafond »). ! On notera m sa masse, v = (v1, v2) son vecteur vitesse, ! ! x = (x1, x2) son vecteur position, g = (g1, g2) le vecteur accélération de la pesanteur. a) Équation du mouvement en l’absence de choc En l’absence de résistance de l’air et de choc avec les murs, la relation fondamentale de la dynamique s’écrit ! ! dv m (t) = mg (1) dt ce qui donne simplement ! ! ! v(t) = (t ! t0 ) g + v0 (2) ! où v0 = (v01 ,v02 ) est sa vitesse à l’instant initial t0. ! ! ! Sa position x(t) à l’instant t est définie par l’équation différentielle dx dt = v , ce qui donne ! où x0 = (x01 , x02 ) est sa position à t0. ! ! 1 ! ! x(t) = (t ! t0 )2 g + (t ! t0 ) v0 + x0 2 (3) b) Modification de la trajectoire lors d’un choc Supposons qu’à l’instant t1 la balle percute l’un des murs. Sa vitesse juste avant le choc est ! ! ! ! v1 = v(t1 ) donnée par l’équation (2) et sa position est x1 = x(t1 ) donnée par (3). Si le choc est parfaitement élastique, elle repart juste après le choc, avec une vitesse de même norme mais dans une direction définie par une réflexion selon l’un des schémas ci-dessous LSTE – Semestre 3 Outils Mathématiques TP3 On modélisera un choc inélastique en multipliant la composante normale de la vitesse après le choc par un coefficient positif r inférieur à 1 (dit coefficient de restitution). Pour r = 1, le choc est parfaitement élastique. Pour r = 0, le choc est complètement absorbé (choc « mou »). Dans tous les cas, la vitesse après le choc peut donc être écrite ! ! v = R v1 (4) où R est une matrice de réflexion qui est ( r ![0,1] ) : • " % sur un mur horizontal : R = R v = $ 1 0 ' , # 0 !r & • " % sur un mur vertical : R = R h = $ !r 0 ' . # 0 1 & c) Équation du mouvement après un choc Après le choc, le mouvement est donné par les mêmes équations (2) et (3) mais où !t0 = t1 , #! ! "v0 = v1 , # x! = x! . 1 $ 0 (5) On repart donc avec de nouvelles conditions initiales jusqu’au prochain choc. d) Détection d’un choc Les murs étant horizontaux et verticaux, il est facile de détecter l’instant d’un choc. En désignant par a le rayon de la balle, le choc a lieu contre • le sol quand x2 (t) = a et v2 (t) < 0 (la balle se dirige vers le bas), • le mur droit quand x1 (t) = L ! a et v1 (t) > 0 (la balle se dirige vers la droite), • le plafond quand x2 (t) = H ! a et v2 (t) > 0 (la balle se dirige vers le haut), • le mur gauche quand x1 (t) = a et v1 (t) < 0 (la balle se dirige vers la gauche). 2) Description du programme à écrire et consignes à respecter On fixera les données physiques du modèle comme suit : • • • • • • • • dimensions du domaine : L = 10 m, H = 5 m, rayon de la balle : a = 0.1 m, durée de l’étude : T = 36 s, ! vecteur accélération de la pesanteur : g = (0, !10) m/s2 (amusez-vous à le changer), ! position initiale : x0 = (1, 4) m, ! vitesse initiale : v0 = (5, 5) m/s (amusez-vous à la changer), instant initial : t0=0 s, coefficient de restitution : 0 ! r ! 1. Le seul paramètre numérique à fixer est l’échantillonnage temporel, c’est-à-dire, le nombre N de pas de temps utilisés (et donc la longueur "t du pas de temps) pour calculer la vitesse et la position de la balle. On prendra N = 2001 (soit "t =T/(N-1) = 36/2000 s). LSTE – Semestre 3 Outils Mathématiques TP3 Algorithme Saisie des données physiques du problème Définition des matrices de réflexion Rh et Rv Saisie du nombre de pas de temps N et calcul du pas dt Boucle sur les pas de temps : faire pour i = 2 à N Calcul du temps t au pas n° i : t = (i-1) ! dt ! Calcul par (2) du vecteur vitesse v au temps t ! Calcul par (3) du vecteur position x au temps t Si collision avec l’un des murs (4 test à faire, voir remarque 1 ci-dessous) : Modifier la vitesse par (4) ! ! Modifier t0, v0 et x0 Fin si Enregistrer les vitesses et les positions successives dans des tableaux V et X Fin boucle Représentation graphique sous la forme d’une animation Remarque 1 : étant donné que le pas de temps est de longueur finie (dt), on ne pourra pas tester la collision de la balle avec l’un des murs par une simple égalité. En effet, imaginons que la balle s’approche du sol (v2 < 0) et qu’au temps t elle soit légèrement au dessus du sol (x2 > a). À l’instant suivant (t+dt), sa position prédite par (3) peut la mener sous le sol (x2 < a). On n’aura en effet jamais (sauf fortuitement) x2 = a. Pour éviter cela, il faut remplacer l’égalité par une inégalité. Le test pour la collision avec le sol s’écrira : « si x2 < a et v2 < 0 » au lieu de « si x2 = a et v2 < 0 ». Écrire de la même façon les tests pour les trois autres murs. Remarque 2 : pour enregistrer les vitesses et positions successives dans des tableaux V et X, on procédera comme suit : avant la boucle, V=[v0] et X = [x0] (conditions initiales) puis durant la boucle, V = [V,v] et X = [X,x], en supposant que v0, x0, v et x soient des tableaux à 2 lignes et 1 colonne. Remarque 3 : pour le dessin de notre balle, on pourra simplement la représenter sous forme d’un rond d’une certaine épaisseur et rempli par une couleur. Par exemple, au point de coordonnées x,y, la commande plot suivante donne un rond rouge : plot(x,y, 'o',' MarkerSize',10, 'MarkerFaceColor','r') LSTE – Semestre 3 Outils Mathématiques TP3