Bonjour, je suis débutant en fortran et ai l'exercice suivant qui me pose un problème :
je dois rédiger un programme qui, utilisant la méthode de Newton-Raphson sur un polynôme f(x) de degré 3, doit me donner une racine complexe (une approximation) en moins de 100 itérations, avec pour condition de validité de la racine que la valeur absolue du polynôme soit f(racine)<0,001.
Ce programme doit sortir l'expression du polynôme f(x), la proposition initiale de racine, la racine trouvée et le nombre d'itérations requises pour trouver cette racine.
J'ai donc rédigé ceci :
Mais la valeur de la racine n'est pas la bonne (avec a0=0, a1=1,a2=2,a3=10, je devrais obtenir -1+3i ou -1-3i), et le polynôme ne sort pas sous la forme voulue et je ne suis pas sur non plus du nombre d'itérations donné !
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 PROGRAM NewtonRaph IMPLICIT NONE INTEGER a0,a1,a2,a3,j COMPLEX X PRINT *,'ENTER aO,a1,a2,a3 :' READ *,a0,a1,a2,a3 PRINT *,'ENTER INITIAL GUESS :' READ *,X CALL root(X) CALL root2(X,j) PRINT *,'...THE ROOT OF ',a0,'X**3','+',a1,'X**2','+',a2,'X+',a3 PRINT *,'IS ',X IF (j.LE.100) THEN PRINT *,'AFTER ',j,'ITERATIONS...' ELSE PRINT *,'AFTER 100 ITERATIONS, WE DID NOT FIND THE ROOT...' PRINT *,'...TRY AGAIN WITH ANOTHER INITIAL GUESS !' END IF RETURN END C C C SUBROUTINE root(Y) COMPLEX Y Y=Y-((a0*Y**3+a1*Y**2+a2*Y+a3)/(3*a0*Y**2+2*a1*Y+a2)) RETURN END C SUBROUTINE root2(Z) COMPLEX Z INTEGER i REAL R DO 5 i=1,100 R=a0*Z**3+a1*Z**2+a2*Z+a3 IF (ABS(R).LT.0.001) EXIT CALL root (Z) 5 CONTINUE END
Et je ne vois plus d'erreure dans ce programme !
Merci d'avance pour votre aide !
Nulysses
Partager