Tracé d`une spirale
Transcription
Tracé d`une spirale
Méthodes numériques appliquées – solutions des exercices ê J.-P. Grivet Retour au site web Exercice 1-1 : Tracé d’une spirale Le programme listé ci-dessous permet le tracé d’une figure qui est une version simplifiée de la figure 1.3 du livre. Le dialogue initial permet de saisir les valeurs des paramètres α et β, tout en vous permettant de conserver les « valeurs par défaut » 0.6 et 7. Parmi les instructions de tracé en deux dimensions disponibles en Scilab, plot2d et plot sont les plus courantes ; la seconde, imitée de Matlab, est un peu plus commode. Elles produisent des résultats identiques, pour des jeux de paramètres équivalents. D’après l’aide de Scilab : « subplot(m,n,p) divise la fenêtre graphique courante en une matrice m × n de sousfenêtres et sélectionne la p-ième sous-fenêtre comme emplacement de dessin par défaut. Le numéro de la sous-fenêtre est compté ligne par ligne, c’est-à-dire que l’emplacement (i,j) de la matrice porte le numéro (i-1)*n + j. » // E x e r c i c e 1−1: t r a c é d ’ une s p i r a l e , v e r s i o n s i m p l e c l e a r ; // mise à z é r o de t o u t e s l e s v a r i a b l e s du programme c l f ( ) ; // v i d e l e s f e n ê t r e s g r a p h i q u e s t = linspace ( 0 , 5 , 2 0 0 ) ’ ; // v e c t e u r c o l o n n e d e s v a l e u r s de t // d i a l o g u e pour d é f i n i r l e s p a r a m è t r e s txt = [ " amortissement " , " p u l s a t i o n " ] ; r p s = x_mdialog ( " c h o i s i s s e z vos p a r a m è t r e s " , txt , [ " 0 . 6 " , " 7 " ] ) ; a l f = evstr ( r p s ( 1 ) ) ; b e t = evstr ( r p s ( 2 ) ) ; x = exp(− a l f ∗ t ) . ∗ cos ( b e t ∗ t ) ; // . ∗ e s t l ’ o p é r a t e u r de // m u l t i p l i c a t i o n é l é m e n t par é l é m e n t de deux v e c t e u r s y = exp(− a l f ∗ t ) . ∗ sin ( b e t ∗ t ) ; subplot ( 2 , 2 , 1 ) ; // y ( t ) plot ( t , y , " r " ) ; subplot ( 2 2 2 ) ; // t r a c é de l a s p i r a l e plot2d ( x , y , s t y l e =2); subplot ( 2 , 2 , 4 ) ; // t ( x ) plot ( x , t , " g " ) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Le listing suivant est la version complète, qui affiche les axes, les légendes et les graduations comme dans le texte. Il est assez compliqué du fait du recours à de nombreuses instructions graphiques. Une bonne façon de s’initier à ce jargon consiste à introduire progressivement, dans le programme de base, des instructions du programme complet et d’observer leur effet. // E x e r c i c e 1−1: t r a c é d ’ une s p i r a l e c l e a r ; // mise à z e r o de t o u t e s l e s v a r i a b l e s du programme c l f ( ) ; // v i d e l e s f e n e t r e s g r a p h i q u e s t = linspace ( 0 , 5 , 2 0 0 ) ’ ; // v e c t e u r c o l o n n e d e s v a l e u r s de t txt = [ " amortissement " , " p u l s a t i o n " ] ; r p s = x_mdialog ( " c h o i s i s s e z vos p a r a m è t r e s " , txt , [ " 0 . 6 " , " 7 " ] ) ; a l f = evstr ( r p s ( 1 ) ) ; b e t = evstr ( r p s ( 2 ) ) ; 1 2 3 4 5 6 7 8 9 Méthodes numériques appliquées – solutions des exercices x = exp(− a l f ∗ t ) . ∗ cos ( b e t ∗ t ) ; y = exp(− a l f ∗ t ) . ∗ sin ( b e t ∗ t ) ; subplot ( 2 , 2 , 1 ) ; // y ( t ) plot ( t , y , " r " ) ; plot ( t , 0 , "k" ) ; // axe h o r i z o n t a l a=gca ( ) ; a . a x e s _ v i s i b l e="on" ; a . box="on" ; a . data_bounds = [ 0 , − 1 ; 5 , 1 ] ; // l e s p o s i t i o n s e t l e s i n t i t u l é s d e s g r a d u a t i o n s // d o i v e n t ê t r e i n i t i a l i s é s e n s e m b l e // à l ’ i n t é r i e u r d ’ une s t r u c t u r e comme temp ou a . x _ t i c k s ticy = −1:1:1; t i c y l = string ( t i c y ) ; ticx = 0:1:5; t i c x l = string ( t i c x ) ; temp = a . x _ t i c k s ; temp . l o c a t i o n s=t i c x ; temp . l a b e l s=t i c x l ; a . x _ t i c k s = temp ; temp = a . y _ t i c k s ; temp . l o c a t i o n s=t i c y ; temp . l a b e l s=t i c y l ; a . y _ t i c k s = temp ; x l a b e l ( " t " ) ; y l a b e l ( "y" ) ; subplot ( 2 2 2 ) ; // t r a c é de l a s p i r a l e plot2d ( x , y , s t y l e =2); a=gca ( ) ; a . a x e s _ v i s i b l e="on" ; a . data_bounds = [ −1 , −1 ; 1 , 1 ] ; a . isoview="on" ; a . sub_ticks = [ 0 , 0 ] ; a . box="on" ; x l a b e l ( "x" ) ; y l a b e l ( "y" ) ; horiz = −1:0.1:1; plot ( h o r i z , 0 , "k" ) ; // axe h o r i z o n t a l ; plot ( zeros ( h o r i z ) , h o r i z ) ; // axe v e r t i c a l subplot ( 2 , 2 , 4 ) ; // t ( x ) plot ( x , t , " g " ) a=gca ( ) ; a . a x e s _ v i s i b l e="on" ; a . box="on" ; a . data_bounds = [ − 1 , 0 ; 1 , 5 ] ; x l a b e l ( "x" ) ; y l a b e l ( " t " ) ; temp = zeros ( t ) ; plot ( temp , t , "k" ) ; // axe v e r t i c a l 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65