Bonjour,
je cherche le problème de cette fonction sur Matlab,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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
66
67
68
69
70
71
72
73
74
75
76 %script qui permet de résoudre numériquement une équation du type % f(x)=0 sur un intervalle [a,b] % Attention on suppose que f ne s'annule qu'une seule fois % sur [a,b] % on se fixe une précision epsi pour calculer le zero % Attention pour éviter de lancer une boucle infinie % on fixe arbitrairement le nombre max d'itérations % nb d it max imax = 10; % epsi precision recherchee epsi = 1/100; % epsilon=10^(-14); % compteur de boucle I=0; %Intervalle [a,b] a=-pi; b=5*pi; sol=zeros(0,10); % sert a stocker les resultats numeriques c=0; c1=0; c=a % fun() est une fonction du type f(x) % c'est celle dont on cherche le zéro % Principe : on divise [a,b] en deux % on regarde de quel côté est le zéro % (on teste si le signe change ou pas) % On se place sur le nouvel intervalle % et on recommence. for ip=1,10 while (I < imax) c=(c+b)/2 % c milieu de [a,b] % if (fun(a)*fun(b)) if(abs(sin(a)*sin(b))<=epsilon) if (abs(sin(a))<=epsilon) c1=a; elseif (abs(sin(b))<=epsilon) c1=b; end end % c=c1; % Ici il faut creer un tableau afin de stocker les valeurs qu'on trouve % soit les "c" ou "c1" car on doit faire une petite boucle pour j de % 1,10 avec les deux premieres valeurs v(0)=0 ; et v(1)=a+b/2 % il faut faire une petite boucle qui donne c après on fait v(j)=c et refaire une autre % boucle plus grande qui qui renvoie le nouveau c pour les calcules et % nous donne un c=v(j) % if (fun(a)*fun(c) <= 0) % si il y a un changement de signe if(sin(a)*sin(b)<=epsilon) %le zéro est compris entre a et c else a=c; % le zéro est compris entre c et b end % if (abs(fun(c))<= epsi) if (abs (sin(c))<=epsi) sprintf 'ok' break; elseif (I == imax-1) sprintf 'pas ok' break; end I = I +1; end 'nombre d iterations' I+1 'resultat' c sol(ip)=c end sol
Partager