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