analyse numerique - Créé par Tristan Vanrullen.

publicité
ANALYSE NUMERIQUE
M.CHAYVALLE- D. HERVOUET - H.ROLANDO- I. RAYNE
TP A2 - Travail de groupe
CNAM 2002-2003
1
ANALYSE NUMERIQUE
2
PRESENTATION
•
•
•
Le Menu…
A l’exécution du programme une fenêtre parent dimensionnable s’ouvre, dans sa barre de menus se
trouvent les fonctions du programme soit: “ FICHIER ”, “ ETUDE ” et “ AFFICHAGE ”.
•
La construction du menu est réalisée par un fichier de ressources : ressource.h
•
Chaque fois que l’utilisateur sélectionne un item du menu dans le programme, Windows envoie un
message WM_COMMAND à la boucle de message. Au sein de la boucle de message, le programme
vérifie la valeur du mot de moindre poids du DWORD wParam pour déterminer l’item de menu
sélectionné.
•
Les Items du menu…
•
•
“ FICHIER ” déroule un sous-menu contenant les actions: Nouveau,Ouvrir,Enregistrer,Quitter.
Nouveau et Ouvrir permettent de stocker un polynôme dans un tableau : polynôme [i], dont la
dimension sera donnée par la valeur du degré du polynôme.
3
PRESENTATION (suite)
OUVRIR, permet d ’appeler un polynôme enregistré.
NOUVEAU, permet, à l’aide de boites de dialogue successives, de saisir le degré max du
polynôme ainsi que les coefficients des puissances de x.
Les boites de dialogue initialisées sur [dMax], décrémentent la valeur des exposants pour
chaque coefficients constituant notre polynôme [dMax – 1] jusqu’à 0, à l’aide des boutons
“ Suivant ”, “ Précédent ”et ” Terminé ”.
Les différentes valeurs saisies pourront être mémorisées par “ ENREGISTRER ”.
Lorsque polynôme[i] est renseigné les différentes procédures se cachant derrière “ ETUDE ”
deviennent actives, soient :
- FONCTION
- GRAPHE
Ces deux procédures sont exécutées à l’intérieur de fenêtres enfants supportées par notre
fenêtre principale.
4
ALGORITHME
• L’algorithme de Bairstow...
• Le programme est principalement articulé autour de cet algorithme, ( recherche des
racines d’un polynôme de degré n).
• Pour cela on utilise la méthode de "Léonard Bairstow".
• Elle consiste à calculer tous les facteurs quadratiques de P(x).
•
n
•
P(x) = a 0 ∏ (x 2 + Pjx + qj) si P est un polynôme de degré 2n.
•
J=1
•
n
•
P(x) = a 0 (x – γ) ∏ (x 2 + Pjx + qj) si P est un polynôme de degré 2n+1.
•
J=1
5
ALGORITHME (suite)
(p0, qo) arbitraire :
Itération:
6
ALGORITHME (suite)
Résultat: Soient
p la limite de la suite p(i) et q la limite de la suite q(i)
bk la limite de la suite bk(i) et ck la limite de la suite ck(i)
P(x) = (x2 + px + q) (b0xn-1 + b1xn-2 + ... + bn-1).
On recommence l'opération en remplaçant les ai par les bi, en prenant pour valeurs de
départ dans cette nouvelle étape les valeurs de p et q obtenues à la précédente, et ainsi de
suite jusqu'à ce qu'on ait déterminé tous les facteurs quadratiques de P , d'où l'on déduit
ses racines.
Les racines du polynôme nous permettent entre autres de tracer la courbe de la fonction
polynomiale, et ce, de façon centrée à l’intérieur de la fenêtre enfant “ Graphe ”.
Les racines réelles et complexes seront affichées par la procédure “ Fonction ” et serviront
à l’élaboration du tableau de variation.
7
FONCTIONNEMENT (Procédure graphe)
dist_y
dist_ x
8
FONCTIONNEMENT (Procédure graphe suite)
Nous commençons par déclarer trois variables en static nommées : dist_x, dist_ y et dist.
Lorsque dMax = 2,
dist correspond à la position graphique de la racine max, or cette racine risquant d’être
confondue avec le bord de notre fenêtre on lui retranche, pour l’affichage, 20% de la zone
graphique. Il en sera de même pour la racine mini.
dist_x représente la distance graphique entre la première et la dernière racine, celles-ci
déterminées par l’algorithme de Bairstow. Les racines du polynôme sont ensuite triées par la
fonction " tri_bulle".
dist_y est directement calculé à partir de la dérivée f ’(x).
Après comparaison des valeurs dist_x et dist_y, la valeur de dist sera ajustée et prendra la
valeur 1.4 dist_x ou 1.4 dist_y, ceci déterminant la taille de la zone d ’affichage p/r à la taille
de la fenêtre graphique.
9
FONCTIONNEMENT (Procédure graphe suite)
De cette façon la courbe de l’équation sera complètement affichée dans la fenêtre, sans
débordements horizontaux même dans le cas d’équations à forts coefficients et à degrés
importants.
Pour les polynômes de degrés supérieurs à 2 le principe reste le même, les valeurs 1.4 sont
remplacées par 3.
Le tracé des courbes f(x) et f ‘(x) est effecué par un balayage suivant l’axe (x’,x).La
fonction : "calculxy" nous renvoie la position "coordy" correspondante.
On utilise ensuite MoveToEx et LineToEx pour tracer les courbes.
10
FONCTIONNEMENT (Procédure fonction)
On travaille l’affichage des différents éléments grâce à la fonction Paint. En utilisant la fonction TextOut
qui écrit une chaîne à un emplacement déterminé, avec la concaténation de différentes chaînes de
caractères dépendant des différents affichages désirés.
Affichage fonction se fait par une écriture en ligne de tous les différents polynôme[i] avec leurs signes,
mais seulement ceux, dont la valeur est différente de 0.
Affichage du domaine de définition se fait uniquement par une phrase car on travaille uniquement avec
des polynômes.
Affichage de la parité se fait grâce à la fonction paire(reel,int&) qui reçoit les différentes racines réelles
du polynôme, triées par tri_bulle.
On utilise alors la plus grande racine réduite à une valeur entière et augmentée de 10. Puis on compare le
résultat pour chaque valeur entre 0 et cette valeur de racine avec le résultat de l’opposé de cette valeur
obtenu par calculxy(xy) . Ceci renvoie un integer qui est ensuite interprété pour former une chaîne de
caractères caractéristique de la parité de la fonction.
11
FONCTIONNEMENT (Procédure fonction suite)
Affichage de la dérivé se fait pareillement à l’affichage de la fonction. Mais en utilisant au préalable la
fonction derive(polyderive) qui permet d’obtenir les différents coefficients de la dérivé.
Affichage des racines se fait dans une ListBox afin de gagner de la place et de pouvoir visualiser toutes
les racines. Elles sont calculées grâce à eq_Bairstow et eq_trinôme et ensuite triées.
Affichage du tableau de variation se fait avec Paint, en utilisant la fonction signederive qui fait appel à
calculderive.
12
CONCLUSION
Finalement toute la fonctionnalité du programme est articulée autour de l’algorithme de
Bairstow, qui nous renvoie donc les racines réelles et complexes des équations
polynomiales étudiées.
Un calcul sur les racines nous permet de déterminer le ratio pour l’affichage des courbes
f(x), f ’(x) et nous aide à l’élaboration du tableau de variations.
En revanche pour les équations à forts coefficients et degrés élevés, des erreurs de
traitement peuvent être générées par cet algorithme, le programme se fige.
Il reste tout à fait fonctionnel pour des équations simples.
L’affichage des racines dans une List box de la procédure " Fonction " est limitée par la
taille de notre fenêtre graphique; si les racines sont nombreuses le tableau de variation
n’apparaît pas complètement.
L’ajout d’une " Scroll barre " serait donc nécessaire et reste à développer dans la
procédure " Fonction " .
D’autre part, une erreur réside dans l’ordonnancement des racines pour l’affichage dans
la List box .
13
CONCLUSION (suite)
En ce qui concerne le Graphe, les courbes représentées sont centrées par rapport à la
fenêtre à l’aide des racines min et max. Il a donc été possible d’afficher correctement
l’axe des abscisses courbe (hauteur) par rapport à l’axe des ordonnées ‘y’ de la fenêtre
graphique.
La courbe coupe à la bonne position l’axe des abscisses (x’,x) en ses racines, par contre
une difficulté persiste dans le centrage de l’axe (y’,y) p/r à la courbe, cette représentation
reste à développer. La solution réside très certainement dans l’exploitation des coordx p/r
au balayage des ‘y’( le principe inverse est utilisé pour l’affichage de la courbe).
Ceci nécessite d’élaborer un nouveau "pas" traduisant les coordonnées courbes p/r aux
coordonnées graphiques de la fenêtre Windows.
CQFD
14
Téléchargement