]> AND Private Git Repository - cours-mesi.git/blob - tel/TPmatlab/equation_nonlineaire/TP4g/visu1_conv_anim.m
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
j
[cours-mesi.git] / tel / TPmatlab / equation_nonlineaire / TP4g / visu1_conv_anim.m
1 function visu1_conv_anim(f1)\r
2 % Propose une visualisation animée de la convergence d'une suite.\r
3 %\r
4 % variables d'entrée\r
5 % f1 désigne un vecteur de n1 valeurs d'une suite convergente\r
6 % dont la dernière est considérée comme la limite.\r
7 % L'écart à la limite sera représenté par des rayons polaires\r
8 % répartis sur un cercle proportionnellement aux gains de  variation relative,\r
9 % rapportés à la somme de ceux-ci, tous considérés en valeur absolue.\r
10 % Le rayon est l'écart de chaque valeur à la "limite".\r
11 \r
12 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
13 %              Fonctions appelées                                                                    *\r
14 %                                                  \r
15 %                                           \r
16 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
17 \r
18 % Tests d'entrée\r
19 if nargin~=1\r
20     error('Nombre des arguments incorrect');\r
21 end\r
22 \r
23 % ménage!\r
24 clf;\r
25 \r
26 % Calibrage des données: ces constantes modifiables par l'utilisateur\r
27 % pourraient aussi etre passées comme champs complémentaires.\r
28 \r
29 % nul_seuil: un nombre inférieur en valeur absolue à nul_seuil est considéré nul.\r
30 % rap_seuil: pourcentage de la fenetre en dessous duquel on dilate l'image.\r
31 % u unité de temps en seconde, pour l'expression d'une pause\r
32 % déterminant la vitesse de défilement des images.\r
33 nul_seuil=0.5E-11;\r
34 rap_seuil=0.1;\r
35 u=2;\r
36 \r
37 \r
38 % détermination des rayons vecteurs, angles\r
39 % et initialisations diverses relatives à f1\r
40 \r
41 r1=abs(f1-f1(size(f1,2)));ind1=find(r1>nul_seuil);\r
42 r1=r1(ind1);\r
43 nb_pas1=size(r1,2);\r
44 att1=zeros(1,nb_pas1);alph1=zeros(1,nb_pas1);\r
45 var_rel=abs(diff(r1))./abs(r1(2:nb_pas1));\r
46 att1(2:nb_pas1)=1./var_rel*u;\r
47 alph1(2:nb_pas1)=2*pi/sum(var_rel)*cumsum(var_rel);\r
48 coef=1.1*r1(1);\r
49 lim=[-coef coef -coef coef];\r
50 \r
51 \r
52 % création des valeurs qui s'enroulent autour de\r
53 % la limite avec ajustement d'échelle automatique\r
54 \r
55 n=1;\r
56 \r
57 % préparation de la fenetre\r
58 title('Visualisation de convergence');\r
59 c=rap_seuil*coef;\r
60 X=[-c,-c,c,c,-c];Y=[-c,c,c,-c,-c];\r
61 \r
62 while n<=nb_pas1\r
63     if  (1/coef*r1(n)>rap_seuil)\r
64         \r
65         x1=r1(n)*cos(alph1(n));\r
66         y1=r1(n)*sin(alph1(n));\r
67         % tracé\r
68         axis(lim);\r
69         line([0,x1],[0,y1]);hold on;\r
70         % prise d'une pause (bien méritée!)\r
71         pause(att1(n));\r
72         % mise à jour de n\r
73         n=n+1;\r
74     else\r
75        % annonce d'agrandissement\r
76        c=rap_seuil*coef;\r
77        X=[-c,-c,c,c,-c];Y=[-c,c,c,-c,-c];\r
78        axis(lim);\r
79        plot(X,Y,'r.--');\r
80        hold on;pause(u/4)\r
81        % changement d'échelle\r
82        k=1.1/coef*r1(n);\r
83        lim=k*lim;coef=k*coef;\r
84    end\r
85 end \r
86 \r
87 % indication de fin de convergence\r
88 axis(lim);\r
89 plot([0],[0],'rp-');legend('Limite ''atteinte''',0);\r
90 hold off;\r
91 \r
92 % fin de fonction\r
93 \r
94 \r
95 \r
96     \r
97     \r
98     \r
99     \r
100     \r
101     \r
102 \r
103 \r
104     \r
105 \r
106 \r
107 \r
108 \r
109 \r
110 \r
111 \r
112 \r
113 \r
114 \r
115 \r