Nombre complexe. Ensemble de Mandelbrot. 1 Représentation des nombres complexes

Documents pareils
Problème : Calcul d'échéanciers de prêt bancaire (15 pt)

Introduction à MATLAB R

Recherche dans un tableau

Algorithmes récursifs

RapidMiner. Data Mining. 1 Introduction. 2 Prise en main. Master Maths Finances 2010/ Présentation. 1.2 Ressources

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Réalisabilité et extraction de programmes

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Ordonnancement. N: nains de jardin. X: peinture extérieure. E: électricité T: toit. M: murs. F: fondations CHAPTER 1

modules & compilation

Baccalauréat L spécialité, Métropole et Réunion, 19 juin 2009 Corrigé.


Fête de la science Initiation au traitement des images

BACCALAUREAT GENERAL MATHÉMATIQUES

length : A N add : Z Z Z (n 1, n 2 ) n 1 + n 2

Cours 1 : La compilation

Continuité et dérivabilité d une fonction

Structurer ses données : les tableaux. Introduction à la programmation

Cours de Programmation 2

Espaces probabilisés

chapitre 4 Nombres de Catalan

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts

Comment installer ocaml sous windows avec ocamlsdl?

TP, première séquence d exercices.

UE C avancé cours 1: introduction et révisions

Je découvre le diagramme de Venn

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Raisonnement par récurrence Suites numériques

CRÉER DES LEÇONS AVEC L'ÉDITEUR DU LOGICIEL 1000 MOTS POUR APPRENDRE À LIRE EN FRANÇAIS, ANGLAIS ET ALLEMAND

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Cours 1 : Qu est-ce que la programmation?

I. Introduction aux fonctions : les fonctions standards

Couples de variables aléatoires discrètes

DÉRIVÉES. I Nombre dérivé - Tangente. Exercice 01 (voir réponses et correction) ( voir animation )

Algorithmique et structures de données I

Manuel d utilisation NETexcom

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

TP 1. Prise en main du langage Python

Vers l'ordinateur quantique

Formats d images. 1 Introduction

Reaper : utilisations avancées

Connexion sur REDLION G-308 avec le modem GSM GDW-11 pour envoi de SMS

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

La fonction exponentielle

Cours Informatique Master STEP

Algorithmique et Programmation, IMA

Peut-on tout programmer?

DETERMINER LA LARGEUR DE PAGE D'UN SITE et LES RESOLUTIONS d'ecran

Documentation Technique du programme HYDRONDE_LN

1 TD 2 : Construction d'une chier Acrobat et envoi par

Chap III : Les tableaux

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

TP : Gestion d une image au format PGM

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

Gnuplot. Chapitre Lancer Gnuplot. 3.2 Options des graphes

Initiation à la programmation en Python

Dans l idéal, ceci devrait être fait en amont pour chaque image envoyée sur l espace de stockage de votre site internet.

Découverte et prise en main de SWEET HOME 3D

TP1 : Initiation à l algorithmique (1 séance)

Gérer ses fichiers et ses dossiers avec l'explorateur Windows. Février 2013

Définitions. Numéro à préciser. (Durée : )

Compte-rendu de projet de Système de gestion de base de données

[Contractant] [Agence spatiale européenne] Licence de propriété intellectuelle de l'esa pour les besoins propres de l'agence

4D Server et les licences : fonctionnement et environnement

Programmation C++ (débutant)/instructions for, while et do...while

MDI Chèque de Allégroupe Réclamation

Programme Compte bancaire (code)

NOTATIONS PRÉLIMINAIRES

Séance 0 : Linux + Octave : le compromis idéal

TD/TP PAC - Programmation n 3

Manuel d'installation de GESLAB Client Lourd

PAGE 1. L écran du logiciel d Open Office Draw. Barre de menu: Les commandes du logiciel

Bac Blanc Terminale ES - Février 2011 Épreuve de Mathématiques (durée 3 heures)

Exercices Alternatifs. Une fonction continue mais dérivable nulle part

Exercices Alternatifs. Une fonction continue mais dérivable nulle part

Machines virtuelles Cours 1 : Introduction

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Master IMA - UMPC Paris 6 RDMM - Année Fiche de TP

Calculs de probabilités avec la loi normale

Solutions du chapitre 4

Les dossiers, sous-dossiers, fichiers

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Algorithmes de recherche

TP3 : Manipulation et implantation de systèmes de fichiers 1

FctsAffines.nb 1. Mathématiques, 1-ère année Edition Fonctions affines

Logiciel Libre Cours 3 Fondements: Génie Logiciel

Chapitre 3. Quelques fonctions usuelles. 1 Fonctions logarithme et exponentielle. 1.1 La fonction logarithme

Création d articles sur le site web du GSP

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Algorithmique I. Algorithmique I p.1/??

Chapitre 1 : Introduction aux bases de données

Support de formation Notebook

Open-Sankoré. Mise en route. Guide utilisateur Février 2013 NTICE (E. S.)

Chapitre 2. Classes et objets

Transcription:

Univ. Lille1 - Licence STS 1ère année 013-014 Objectifs du TP : Algorithmes et Programmation Impérative 1 Nombre complexe. Ensemble de Mandelbrot. 1. utiliser les enregistrements ;. fabriquer un module contenant l'arithmétique des nombre complexes ; 3. dessiner l'ensemble de Mandelbrot 1 Représentation des nombres complexes Cette section a pour but d'implanter les opérations sur les nombres complexes 1.1 Motivation Parmi les types numériques prédénis de caml, on connait le type entier (int) et le type ottant (float). L'implantation d'un type pour représenter les nombres complexes permet de se familiariser avec la manipulation d'enregistrement. 1. Un module pour les nombres complexes Vous allez créer un module qui contiendra les déclarations d'un type pour les nombres complexes, ainsi que quelques fonctions de base sur les nombres complexes. Question 1 Pour cela, recopiez toutes les déclarations de type et de fonctions que vous trouverez dans la partie Un exemple complet du chapitre sur les enregistrements dans le polycopié de cours. Toutes ces déclarations seront faites dans un chier nommé complexe.ml. Ajoutez aussi sous forme de commentaires les spécications de ces fonctions. Pensez à tester une à une chacune de ces fonctions. 1.3 Compilation du module Vous allez maintenant compiler ce module pour pouvoir l'utiliser pour d'autres programmes. Question Pour cela dans un terminal tapez la commande > ocamlc -c complexe.ml Vous devez obtenir deux nouveaux chiers complexe.cmi et complexe.cmo. 1.4 Utilisation du module Pour utiliser le module, il faut lancer l'interpréteur Caml en mentionnant le nom du chier contenant le module : > ocaml complexe.cmo puis, une fois entré dans la boucle d'interaction, la commande 1

# open Complexe ;; permet de ne pas qualier pleinement les noms des fonctions du module en les préxant par le nom du module. 1.5 Familiarisation avec les fonctions du module Complexe Question 3 À l'aide du module Complexe, déclarez deux variables pour les nombres complexes z = 1 + i, et Question 4 c = 1 + i 3. Calculez le module (la norme) des deux nombres complexes dénis précédemment. Question 5 ainsi que sa norme. Calculez le nombre z = z + c, Question 6 Réalisez la fonction à deux paramètres complexes z et c associe le nombre complexe z + c. Dans la suite on nommera f cette fonction. L'ensemble de Mandelbrot L'ensemble de Mandelbrot est une fractale dénie comme étant l'ensemble des points c du plan complexe pour lesquels la suite dénie par récurrence par : z 0 = 0 z n+1 = z n + c = f(z n ) (1) ne tend pas vers l'inni (en module) 1. Cet ensemble est représenté par les points de couleur noire sur la gure 1..1 Décider si un nombre complexe est dans l'ensemble de Mandelbrot Comment peut-on écrire un programme pour dessiner l'ensemble de Mandelbrot comme sur la gure 1? Par dénition, un nombre complexe c est dans l'ensemble de Mandelbrot si la suite (z n ) n N de nombres complexes dénie par les équations 1 tend vers l'inni. Si c'est le cas, on dessine un pixel blanc pour ce nombre. Dans le cas contraire, un pixel noir. Mais comment savoir si cette suite tend vers l'inni? Un programme ne peut pas calculer une innité de termes de la suite. Heureusement, on peut démontrer que la suite tend vers l'inni en module si et seulement s'il existe un indice k pour lequel le terme d'indice k est strictement supérieur à, z k >. 1. Pour en savoir plus http://fr.wikipedia.org/wiki/ensemble_de_mandelbrot

Figure 1 L'ensemble de Mandelbrot Donc si la suite tend vers l'inni, le calcul des termes z 1, z,... amènera à un terme z k de module plus grand que et on peut arrêter là le calcul : on sait que la suite tend vers l'inni et on dessine un pixel blanc. Mais si la suite ne tend pas vers l'inni, alors aucun terme z k ne possède un module plus grand que. Comment peut-on alors arrêter le calcul? Pour répondre à ce dernier problème, on convient d'arrêter arbitrairement le calcul à un indice maximum M : si arrivé à z M on a jamais obtenu de nombre dont le module dépasse, on considèrera (peut-être à tort) que la suite ne tend pas vers l'inni. Et on dessine un pixel noir. Ce critère fait que le dessin ainsi construit n'est qu'une approximation de l'ensemble de Mandelbrot qu'on cherche à dessiner. La représentation de la gure 1 a été obtenu en décidant d'arrêter le calcul pour M = 64. Question 7 1. c un nombre complexe. et m un entier positif, Réalisez une fonction nommée iteration à deux paramètres qui renvoie le premier indice k < m tel que z k > si un tel terme existe dans la suite dénie en, m si aucun terme z k, avec 0 k < m n'a un module qui dépasse. An de vérier la validité de votre fonction, voici quelques valeurs que vous devez obtenir avec m = 64 : c iteration c 64 0 + i 64 1 + i 1 3 1 64 (1+i) 5. Dessiner l'ensemble de Mandelbrot Pour dessiner l'ensemble de Mandelbrot, vous allez utiliser le module Graphics. Pour cela, il vous faut soit relancer l'interpréteur (après l'avoir quitté) en précisant le module sur la ligne de commande 3

> ocaml graphics.cma complexe.cmo soit charger le module depuis la session courante # #load "graphics.cma" ;; Rappel de quelques déclarations du module Graphics utiles : Nom Type Rôle open_graph string unit ouvre une fenêtre graphique close_graph unit unit ferme la fenêtre graphique plot int int unit dessine un pixel set_color Graphics.color unit dénit la couleur du crayon black Graphics.color couleur noire white Graphics.color couleur blanche.3 Changements de coordonnées Les coordonnées (i, j) d'un pixel dans une fenêtre graphique sont des nombres entiers. La première coordonnée (abscisse i) est la coordonnée horizontale, la seconde (ordonnée j) la coordonnée verticale. L'axe des abscisses est orienté à droite, celui des ordonnées vers le haut. Si la fenêtre graphique a pour largeur L et hauteur H (en nombre de pixels), alors les quatre coins de la fenêtre ont pour coordonnées 1. (0, 0) pour le coin inférieur gauche ;. (L 1, 0) pour le coin inférieur droit ; 3. (L 1, H 1) pour le coin supérieur droit ; 4. (0, H 1) pour le coin supérieur gauche. Le plan complexe qu'on peut assimiler au plan R est constitué de points à coordonnées réelles. Le point dont l'axe est le nombre complexe z = x + iy à pour coordonnées (x, y). Le plan complexe est inni, mais si on s'intéresse au dessin de l'ensemble de Mandelbrot, seule une petite région de ce plan doit être considérée. La région montrée dans la gure 1 est une région carrée du plan dont les coordonnées sont 1. ( 9 4, 3 ) pour le coin inférieur gauche ;. ( 3 4, 3 ) pour le coin inférieur droit ; 3. ( 3 4, 3 ) pour le coin supérieur droit ; 4. ( 9 4, 3 ) pour le coin supérieur gauche. Dimensions de la fenêtre graphique : pour représenter cette région carrée du plan complexe, on choisit les dimensions de la fenêtre graphique de sorte qu'elle soit carrée. Pour la gure 1, la fenêtre graphique a pour dimensions 400 400 pixels. On suppose donc déclarées les deux variables let larg = 400 and haut = 400. Pour en savoir plus sur ce module http://caml.inria.fr/pub/docs/manual-ocaml-31/libref/graphics. html 4

Conversion d'un pixel en nombre complexe Il va être nécessaire d'associer à chaque pixel (i, j) de la fenêtre graphique un nombre complexe z = x + iy de notre région carrée du plan complexe. Cette transformation est une transformation ane déterminée par x = 3 L (i 3L 4 ) y = 3 H (j H ). Question 8 Réalisez la fonction complexe_of_pixel de type int int complexe, qui renvoie ce nombre complexe z = x + iy. Et nalement le dessin : 1. ouvrir une fenêtre graphique ; tout est prêt pour le dessin. Pour cela il faut. pour chaque pixel (i, j) de cette fenêtre, calculer la valeur produite par la fonction iteration pour le nombre complexe c calculé par complexe_of_pixel, en prenant un nombre d'itérations maximal égal à 64 par exemple ; 3. colorier en blanc ou en noir selon la valeur obtenue par iteration. Question 9 ci-dessus. Réalisez la fonction dessiner de type unit unit qui eectue le travail décrit 5