Contenu du cours
Bases de Matlab
Bases de Matlab
Application: Calcul des Trajectoires 3D avec Boucles While
Ici, vous apprendrez à calculer les trajectoires des objets se déplaçant dans l'espace 3D, ainsi qu'un autre aspect de la programmation : les boucles while, dont les propriétés uniques les rendent tout aussi essentielles que les boucles for et les instructions if, bien qu'elles ne soient pas aussi fréquentes.
Structure de la boucle While
Les boucles while sont similaires aux boucles for, mais leur différence clé réside dans le mécanisme de contrôle de l'itération. Au lieu d'un nombre fixe d'itérations, la boucle while s'exécute tant que la condition booléenne est vraie. Voici comment cela fonctionne :
- La condition booléenne est évaluée en premier ;
- Si la condition est vraie, le code à l'intérieur de la boucle est exécuté ;
- Après l'exécution du code, la condition est vérifiée à nouveau. Si elle est toujours vraie, le code est exécuté à nouveau. Cela continue tant que la condition reste vraie ;
- Une fois que la condition devient fausse, la boucle se termine et le programme continue à partir du point après la boucle.
Cette structure est particulièrement utile lorsque vous ne savez pas à l'avance combien de fois la boucle devra s'exécuter. Elle continue de s'exécuter jusqu'à ce qu'une certaine condition soit remplie, ce qui la rend idéale pour les tâches où le nombre d'itérations dépend de facteurs dynamiques.
Parce que les boucles while se répètent jusqu'à ce que le booléen soit faux, il y a un risque (par circonstance ou erreur) que le booléen soit toujours vrai et que la boucle while se répète indéfiniment !
Donc, si vous trouvez que votre programme prend beaucoup plus de temps que d'habitude, il est conseillé de l'arrêter dans Matlab en appuyant sur :
ctrl
+c
;cmd
+c
.
Pour arrêter le code en cours, et réévaluer la logique et le code.
L'équation pour le mouvement en 1D avec accélération constante
Dans la vidéo, nous utilisons l'équation du mouvement en 1D :
- t : temps (en secondes) ;
- x(t) : position de l'objet au temps t ;
- xi : position initiale de l'objet ;
- vi : vitesse initiale de l'objet ;
- a : accélération de l'objet (supposée constante).
Ceci est appliqué indépendamment aux composantes orthogonales x, y, z de la position, de la vitesse et de l'accélération en utilisant des opérations matricielles par composante.
Cette équation est standard en physique et est généralement dérivée algébriquement (un peu plus fastidieux, mais pas mal) ou en intégrant une accélération constante deux fois dans le temps (et en reconnaissant que les constantes résultantes représentent la vitesse initiale et la position initiale).
Le fait que x, y, z soient orthogonaux (perpendiculaires) permet de l'appliquer à chacune de ces dimensions séparément, et en même temps, nous pouvons percevoir cela comme l'analyse d'une dimension unique pour simplifier la compréhension.
Tâche
Écrivez votre propre version du programme dans la vidéo en comprenant les objectifs :
-
Importez les positions et vitesses initiales sous forme de matrices séparées, et les étiquettes d'objet sous forme de tableau de cellules ;
-
Accordez-les séparément en deux matrices 3D afin que les positions (coordonnées x, y, z) de chaque objet puissent évoluer le long des colonnes de sa propre couche 2D. Nous pouvons faire de même pour les vitesses initiales (même si elles ne changent pas - elles sont toujours les vitesses initiales) pour rendre l'indexation cohérente plus tard ;
-
Boucle for sur les objets afin que nous puissions calculer la trajectoire 3D de chaque objet ;
-
Calculez la trajectoire de chaque objet dans une boucle while dont le premier booléen évalue si l'objet est toujours au-dessus du sol (sa coordonnée z est ≥ 0). Dans la boucle while, appliquez l'équation de mouvement 1D pour calculer la nouvelle position (appliquez-la aux coordonnées x, y, z indépendamment en utilisant des opérations matricielles). Calculer la position à n'importe quel moment ne doit dépendre que de :
- La position initiale de l'objet ;
- La vitesse initiale de l'objet ;
- Le temps évalué.
Cela ne doit pas dépendre de la position précédente calculée.
-
Vérifier les données d'entrée (positions initiales + vitesses) et les variables qui les ont accordées en matrices 3D est toujours une bonne façon d'éliminer ces parties du programme comme sources d'erreur;
-
Restreindre la boucle for à une itération, ou équivalemment retirer les objets 2 et 3 (données et étiquettes) du fichier Excel pour voir comment votre programme fonctionne avec un seul objet;
-
Des trajectoires non paraboliques pourraient être symptomatiques d'un problème avec la façon dont l'équation du mouvement a été appliquée, ou d'une programmation incorrecte des calculs par composant (en se rappelant des périodes avant la multiplication, etc.);
-
Les positions initiales (première colonne de chaque couche 2D) de votre matrice de trajectoire 3D devraient être les mêmes que celles enregistrées dans le fichier Excel;
-
Il ne devrait pas y avoir de valeurs négatives (chaque objet a commencé avec une position positive et une vitesse dans toutes les directions x, y, z);
-
Vérifiez comment l'accélération a été définie, ou essayez de la définir égale à zéro. Cela devrait produire un mouvement à vitesse constante, qui devrait former des lignes lorsqu'il est tracé (si vous prenez la vue de dessus du graphique 3D, qui ne montre que le mouvement dans les directions x, y où l'accélération était zéro, vous verrez la même chose);
-
Selon notre système de coordonnées, la gravité est -9.8 m/s² (vers le bas vers la Terre), pas +9.8.
Merci pour vos commentaires !