Cours complet les premiers pas en Fortran

La résolution de l’équation

Le problème mathématique consiste à trouver les solutions de ax2 + bx + c = 0 pour trois réels a, b, c. On peut, selon le signe du discrimant, avoir deux solutions réelles x1, x2, ou bien deux solutions complexes conjuguées z1, z2.

Déclarations

On déclare donc des variables correspondant à ces nombres, et une indiquant le cas rencontré. On utilise naturellement les types de base logical, real et complex. À cause de la déclaration implicit none, le compilateur considère comme une erreur l’usage (pendant les exécutions) d’un identificateur de variable non déclaré au préalable (dans les spécifications). Tant que vous ne serez pas experts, n’oubliez pas cette déclaration, en premier. La variable delta_positif est initialisée à vrai, en considérant que c’est le cas le plus courant.
hdéclarations 2i (1) 4 .
implicit none
logical :: delta_positif=.true.
real :: a,b,c,delta,x1,x2
complex :: z1,z2

Calculs

Le discriminant est donné par = b2 4ac. De son signe dépend si les racines sont réelles ou
complexes conjuguées. Tester le signe ou la taille d’une variable real n’a pas de sens en soi. Ici on
doit décider du signe de par rapport à b : si j j < jbj, alors on doit considérer comme nul.
On choisit de l’ordre de la précision machine pour le type considéré, donnée par epsilon(b) si on
considère le type de la variable b. Dans le cas de racines réelles, pour éviter une perte de précision
par cancellation, on calcule d’abord la racine qui conduit à ajouter deux nombres de mêmes signes.
Puis on utilise la relation ax1x2 = c pour trouver l’autre. La fonction sign(x,y) renvoie un nombre
qui a la valeur absolue de x et le signe de y.
hcalculs 3i
(5)
delta=b**2-4*a*c
if (abs(delta)<epsilon(b)*abs(b)*2) then
x1=-b/2/a
x2=x1
else if (delta>0) then
x1=-(b+sign(sqrt(delta),b))/2/a
x2=c/a/x1
else ! (delta<0)
z1=cmplx(-b, sqrt(-delta))/2/a
z2=conjg(z1)
delta_positif=.false.
end if

Les entrées-sorties

Pour ce premier programme, nous utilisons une interface avec l’utilisateur. L’inconvénient majeur est le temps qu’on risque de consacrer à cette interface, alors que vous devez apprendre à résoudre des problèmes mathématiques. C’est pourquoi dans la suite nous nous interdirons de telles élaborations. Les entrées-sorties des données-résultats se feront par lecture-écriture sur des fichiers. Pour ce petit premier programme, exceptionnellement, on fabrique une boucle qui demande à l’utilisateur s’il veut continuer ou quitter, puis, s’il veut continuer, les trois coefficients a; b; c. Les résultats sont simplement affichés à l’écran. En quittant, le programme affiche en dernier le nombre d’équations résolues. On déclare donc de nouvelles variables de type character et integer.
hdéclarations 2i+ (1) / 2
character :: choix
integer :: nbre_equations

Cours gratuitTélécharger le cours complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *