* Modularité Briser le comportement en morceaux simples et aux interactions bien définies. Avantages: 1. planification/design 2. se concentrer sur un seul morceau à la fois 3. compréhension/réécriture * Exemple: Trouver un zéro d'une fonction Fonction continue sur l'intervalle réel [0,1]. Design, morceaux (laisse le comportement guider)? 1. Responsabilité de la classe (-> Nom) 2. Méthodes 3. Membres Noter invariants/parties du protocole non explicites en 2 et 3 (le plus important!) Classes: a) FindZero Etant donnee une fonction f, retourne un x dans [0, 1] tel que f(x) = 0. Methodes: double findZero (double guess) Membres fonction, zero b) Fonction Methode: double evaluate(double x) ->double firstDer(double x) c) FonctionApproxDiff Etant donnee une fonction f, permet d'evaluer f en un point, mais aussi f'. Methode: double approxDiff(double x) double evaluate(double x) Membres fonction, last_x, f(last_x) ... ** Méthodes de recherche *** Bisection Évalue la fonction f en x < y < z. Si f(x), f(y) ou f(z) = 0, alors on a un zéro. Sinon, si f(x)*f(y) < 0, un zéro se cache entre x et y. Si f(y)*f(z) < 0, c'est entre y et z. Il faut des points de départ de signes différents. On prend 0 et 1 pour simplifier. Classe? Allure? class ... ... *** Newton Évalue la fonction f en x, puis la dérivée f' en x. On a alors x' = x - f(x)/f'(x). ^ | __ | / \ [x, f(x)] | __/ `. |' \`. | `. `. | \ `. ,'' | \ `. / +---------.-----\-------`.--,---> | : \ : , | `. / | `----* [x', f(x')] | : : v x x' Classe? **** Approximer la dérivée Méthode naïve: [f(x+h) - f(x)]/h (Comme la limite!) Classe? Plus efficace? Classe? *** Regula Falsi (Fausse position) Approxime Newton en calculant la pente en [x, f(x)] de façon numérique. ** Plus de détails en IFT 2425 (IAN) Ce n'était bien sûr qu'un très court survol! * Retour