Iteration matlab

mino_sa Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
Char Snipeur Messages postés 9813 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 9813 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 22 Date d'inscription   Statut Membre Dernière intervention  
 
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 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Tout à fait. Il faut ajuster en fonction de la précision rechercher.
0