Iteration matlab

mino_sa Messages postés 1 Statut Membre -  
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

je suis debutant en matlab et je veux faire une iteration pour converger la valeur de a
jusqu'a 1/3, sachant c'est condition d'initialiser (a=0).

et voila mes equation:
a=0; a1=0;
% Calcul de Phi
Phi=atan((1-a)*V/((1+a1)*om*r));
% Calcul de alpha
alpha=Phi-0.5;
cl=2*3.14*alpha;
cd=3.14*alpha;
cn=(cl*cos(Phi))+(cd*sin(Phi));
ct=(cl*sin(Phi))-(cd*sin(Phi));
% Calcul de a
a=1/((4*sin(Phi)^2)/(sigma*cn)+1);
a1=1/((4*sin(Phi)*cos(Phi))/(sigma*ct)-1);

1 réponse

Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
a=0; a1=0;
while a!=1/3
% Calcul de Phi
Phi=atan((1-a)*V/((1+a1)*om*r));
% Calcul de alpha
alpha=Phi-0.5;
cl=2*3.14*alpha;
cd=3.14*alpha;
cn=(cl*cos(Phi))+(cd*sin(Phi));
ct=(cl*sin(Phi))-(cd*sin(Phi));
% Calcul de a
a=1/((4*sin(Phi)^2)/(sigma*cn)+1);
a1=1/((4*sin(Phi)*cos(Phi))/(sigma*ct)-1);
end; 
comme ça ?
0
Krys_06 Messages postés 27 Statut Membre
 
Il est dangereux de mettre des égalités parfaites entre flottants comme critère de sortie d'une boucle. Du fait des arrondis de calcul, l'égalité peut ne jamais être rencontrée.
Dans le cas présent, il faudrait plutôt mettre quelque chose du genre:

while (abs(a -1/3) > eps(1/3))
0
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Tout à fait. Il faut ajuster en fonction de la précision rechercher.
0