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

Private GIT Repository
typos
[cours-mesi.git] / tel / TPmatlab / equation_nonlineaire / TP4i / partie_1 / test_oscillation.m
1 function [chaine]=test_oscillation(x0)\r
2 % calcule les itérés de Newton de la valeur t issue de l'étude de la\r
3 % question 1 du tp4I.\r
4 %\r
5 % variable d'entrée\r
6 % x0 représente la solution de l'équation F(1,t)=0 qui devrait fournir\r
7 % une suite d'itérés de Newton oscillante.\r
8 %\r
9 % variable de sortie\r
10 % annonce ce qui s'est passé effectivement lors du calcul\r
11 %\r
12 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
13 %                   Fonctions connexes appelées\r
14 %\r
15 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
16 % tests à compléter éventuellement\r
17 if nargin~=1\r
18     error('Nombre des arguments incorrect');\r
19 end\r
20 clf;format long e;\r
21 \r
22 % définitions de constantes modifiables par l'utilisateur\r
23 \r
24 nul_seuil=1E-10;\r
25 iter_max=30;\r
26 \r
27 \r
28 % test complémentaire. On peut passer val_omega comme champ pour détourner\r
29 % cette fonction de sa seule application au cas omega=1.\r
30 val_omega=1; % valeur non nulle, attention!\r
31 if (x0<=0)|(x0>=2*pi/val_omega)\r
32     error('Le champ x0 est incorrect. Voir test complémentaire');\r
33 end\r
34     \r
35 \r
36 % initialisations\r
37 v=zeros(1,iter_max+1);\r
38 nb_iter=1;\r
39 v(1)=x0;v(2)=v(1)+cos(v(1))/sin(v(1));x1=v(2);\r
40 normal=1;\r
41 \r
42 % boucle générale\r
43 while nb_iter<iter_max\r
44     nb_iter=nb_iter+1;\r
45     v(nb_iter+1)=v(nb_iter)+cos(v(nb_iter))/sin(v(nb_iter));\r
46     \r
47     if normal==1\r
48         switch mod(nb_iter,2)\r
49         case 0\r
50             normal=(abs(v(nb_iter+1)-x0)<nul_seuil);\r
51         case 1\r
52             normal=(abs(v(nb_iter+1)-x1)<nul_seuil);\r
53         end\r
54         if normal==0\r
55             rupture=nb_iter;\r
56         end\r
57     end\r
58 end\r
59 \r
60 % annonce de la situation\r
61 if normal\r
62     chaine='Tout s''est passé comme prévu';\r
63 else\r
64     chaine=...\r
65         ['Le phénomène d''oscillation s''est produit jusqu''au terme ' ...\r
66             num2str(rupture)];\r
67 end\r
68 \r
69 % tracé des itérés\r
70 plot(v);\r
71 xlabel('numéro matlab des itérés');ylabel('Valeurs prises');\r
72 title('Evolution des termes de la suite de Newton du tp4I');\r
73 legend(['au sens d''un écart de : ' num2str(nul_seuil)],0); \r
74 \r
75 % fin de fonction\r
76 \r
77 \r
78