CODINGCLASSEURS WEKA ★ Comment exploiter toutes les ressources et augmenter les performances de votre AMSTRAD CPC ★

5/10.4.3 - Les espaces inconnus|10e Complément)Coding Classeurs Weka

5/10.4.3 Les espaces inconnus

Notions mathématiques de base

Quelques notions sont nécessaires pour découvrir ces nouveaux êtres mathématiques errant dans des espaces immatériels.

Que les forts en maths, pour qui ces notions sont triviales, nous excusent, il faut bien que tout le monde comprenne...

Tout commence avec la question :

L'équation x2 = - 1 possède-t-elle une solution ?

A la réponse NON, partant du principe qu'on ne peut extraire la racine carrée d'un nombre négatif, on peut opposer la réponse OUI, pourquoi pas ?

Cette réponse affirmative, que nous vous demandons simplement d'admettre soulève le voile sur l'immensité étrange et passionnante des nombres complexes.

Admettons donc qu'il existe un nombre que nous noterons i et dont le carré est égal à - 1.

Ce nombre d'un type nouveau appartient à l'ensemble des nombres complexes. L'ensemble des réels n'est qu'une partie infime de ce dernier.

Tout nombre complexe est repéré par son affixe. L'affixe z de tout nombre complexe est composée de 2 parties.

L'une appelée partie réelle sera notée x si vous le voulez bien alors que l'autre, nommée partie imaginaire, sera notée y.

Ces trois nombres sont alors reliés par la relation :

z = x + iy

Cela posé, on peut définir sur cet ensemble toutes les opérations classiques connues sur l'ensemble des réels, à savoir :

L'addition

z1 = x1 + iy1 et z2 = x2 + iy2 entraînera z1 + z2 = (x1, + x2) + i (y1 + y2)
La somme de deux nombres complexes est un nombre complexe dont la partie réelle est la somme des parties réelles et la partie imaginaire, la somme de deux parties imaginaires.

— De même, la soustraction de deux nombres complexes s'écrira

z1 = X1 + iy1 et z2 = x2 + iy2

z1 - z2 = (x1 - x2) + i (y1 - y2)

— La multiplication de deux nombres complexes est un peu plus compliquée, en effet :

Z = X + iY = z1 z2  = ( X1 + iy1 ) (x2 + iy2) = x1 x2  + ix, y2  + ix2  y1 + i2y iy2 

souvenons-nous d'avoir décidé que i2 = - 1 alors :

Z = X + iY = (x1 x2 - y1 y2) + i (x1 y2 + x2 y1)  étonnant non ?

Les notations x et y ne sont pas sans rappeler les notations des coordonnées d'un point dans un plan muni d'un système d'axes Ox,Oy. Ce choix n'est en effet pas innocent puisqu'il va nous permettre de représenter un nombre complexe par un point dans un plan bien réel celui-ci.

Il suffira de représenter les parties imaginaires et réelles, respectivement par des points sur les axes d'ordonnée Oy et d'abscisse Ox.


Figure 1

Tout nombre complexe z sera alors représenté par un point Z de coordonnées x et y.

On peut cette fois définir le module d'un nombre complexe comme la longueur du vecteur OZ. Notons ce module lzl.

lzl=V(x2 + y2)               d'après Pythagore appliqué au triangle rectangle OZx.

Ces quelques notions sont pour l'instant suffisantes pour aborder ces espaces inconnus. N'hésitons plus et entrons alors dans le monde étonnant des nombres complexes.

Passage du plan complexe à l'écran de l'Amstrad

Le principe des deux programmes qui suivent est très simple. Considérons une portion du plan complexe délimitée par le rectangle formé par les points Z11, Z22 , Z12 et Z21

 


Figure 2

Balayons systématiquement cette portion de bas en haut et de gauche à droite après avoir défini un accroissement dx sur l'axe des réels et dy sur l'axe imaginaire.

Faisons correspondre à chaque point ainsi balayé, un point de l'écran du CPC en écrivant que :

dx = (x2 - x1 ) /640 et dy = (y2-y1)/400

Le point courant dans le plan complexe correspondra alors au point-écran XP, YP.

Ces principes de balayage et de correspondance entre plan complexe et écran étant définis, nous pouvons alors faire subir à tout point du plan complexe toute sorte de torture et obtenir des graphismes assez merveilleux.

Coucher de soleil imaginaire

Décidons que pour tout point de la portion de plan complexe définie plus haut, nous calculions le module (ici xx en ligne 120) et que si ce module est inférieur à 0,1 nous passons au point suivant.

Dans le cas contraire, nous formons le nombre f = y-y/xx.

Si la partie entière de f multipliée par 10 est paire, nous traçons le point-écran correspondant, sinon nous passons au point suivant (ligne 150).

10 CLS
20 MODE 2
30 XP=0:YP=0
40 x1=-2:x2=2
50 y1 = 0 : y2=(y1 + (x2-x1)*400/640)
60 dx=(x2-x1)/640
70 dy=(y2-y1)/400
80 FOR x~x1 TO x2 STEP dx
90 XP=XP+1
100 FOR y=y1 TO y2 STEP dy
110 YP=YP+1
120 xx=x*x+y*y
130 IF xx< 0.1 THEN 160
140 f=y-y/xx
150 IF (INT (f*10)MOD 2 = 0) THEN PLOT XP, YP
160 NEXT y
165 YP=0
170 NEXT x

Ce traitement barbare, dissociant les nombres complexes très particuliers obéissant à la règle, des autres, pauvres êtres informes ne méritant pas de figurer sur notre écran, va générer le coucher du soleil le plus bizarre que vous ayez jamais vu...


Coucher de soleil imaginaire.

Variations sur Mandelbrot

Benoît Mandelbrot, mathématicien français qui s'est illustré au centre de recherches T. Watson d'IBM, par ses travaux sur la géométrie frac-tale, ouvre pour nous la porte d'une immensité curieuse et magnifique : l'ensemble de Mandelbrot. Cet ensemble est constitué des nombres complexes c qui, quel que soit le nombre d'itérations appliquées à l'algorithme z = z2 + c restent finis.

10 REM (c) VEKA (jpc 1988)
15 INK 1, 13: INK 0,0:BORDER 0
20 CLS
30 MODE 2
40 XP=0:YF=0
50 INPUT”x1,x2”; x1,x2
60 INPUT"y1,y2"; y1,y2
65 INPUT”Nombre d'itérations N";N
66 CLS
70 dx= (x2-x1)/640
80 dy=(y2-y1)/400
90 FOR x=x1 TO x2 STEP dx
100 XP=XP+1
110 FOR y=y1 TO y2 STEP dy
120 x0=0:y0=0
130 YP=YP+1
140 FOR i=1 TO N
150 xx=x0 * x0-y0*y0 + x
160 y0=2+x0*y0+y:x0=xx
170 yy=(x0*x0*y0*y0)
180 IF yy>4 THEN 210
190 NEXT i
200 PLOT XP,YP
210 NEXT y
220 YF=0
230 NEXT x

Choisissons parmi ceux-ci, ceux dont le module reste inférieur à 2. Et représentons-les sur notre écran en suivant le principe défini plus haut.

Ces nombres sont alors représentés sur la figure suivante. Cet ensemble a été dessiné avec seulement 50 itérations : plus ce nombre sera grand, plus les détails seront finis (dans la limite de définition de votre écran) mais aussi plus le temps de calcul sera long, passant de quelques heures à quelques ... jours.


L'ensemble de Mandelbrot dans le plan complexe (50 itérations).


Détail de l'ensemble de Mandelbrot dans le plan complexe x-1 = -0,745 - X2 = - 0,72 - y1 = 0,216 - Y2 - 0,25.

Chaque zone est en principe intéressante à explorer mais la frontière de l'ensemble est plus riche lorsque le nombre d'itérations est faible.

La figure de détail en page 9 correspond à un agrandissement de la zone notée [a] sur la figure précédente. On pourrait agrandir encore cette zone et y découvrir de nouvelles formes. Il n'y a aucune limite à cela pas même celle de la dimension atomique. Seul votre Amstrad imposera ses limites de précision et de temps de calcul à votre vertigineuse soif d'entrer dans l'infiniment petit.

Les algorithmes de Barry Martin

D'autres mathématiciens comme Barry Martin se sont inspirés de la démarche de B. Mandelbrot. A savoir, faire des itérations successives sur une même fonction. Mais cette fois, cette fonction s'appliquait sur des nombres réels et sur une seule valeur initiale. On ne balaye pas un plan comme précédemment, mais on part d'un point unique pour en calculer une série d'autres.

Dans les deux programmes qui suivent, ce principe est appliqué sur deux fonctions différentes.

Le premier programme « Hopalong » utilise les fonctions suivantes :

x = y - SGN(x)* V | (b * x - c) |
y = a -x

La fonction SGN(x) (signe de x) prend la valeur -1 si x est négatif et 1 si x est positif. L'étonnant pour ce type de programme est que le graphisme obtenu varie énormément suivant les valeurs des paramètres a, b et c.

Le nombre d'itérations influe sur le niveau de détail du graphisme (voir figures page 9). Là encore, vous devrez attendre quelques heures avant de voir votre écran se couvrir de ces merveilles bizarres.

10 REM Algorithme HOPALONG
20 MODE 2:CLS
30 INPUT”a,b,c” ; a,b,c
31 INPUT”N” , N
32 INPUT”Eche1le”,E
35 INPUT”coordonnees du centre x,y”; ex,cy
50 LOCATE 1,1:x=0:y=0
60 FOR i=1 TO N
70 PLOT x*E+cx,y*E+cy
80 xx=y--SGN ( x ) * ( ABS (b*x-c) ) ^0. 5
90 yy=a-x
100 x-xx:y=yy
110 NEXT i


Evolution du graphisme en fonction du nombre d'itérations N
a = - 200 - b = 0,1 - c = - 80 - N = 1 20 135


Hopalong : a = - 200 - b = 0,1 - c = - 80 - N = 423 424

Hopalong : a = - 200 - b = 0,1 - c = - 80 - N = 1 359 620Algorithme de Barry Martin : a = 3,12 N = 100 000

Le dernier programme proposé est composé comme le précédent ; mais utilise les fonctions :

x = y - SIN (x)
y = a - x

Un seul paramètre entre en jeu ici a. Les meilleurs résultats seront obtenus pour a très voisin de PI.

Vous pourrez choisir sur ce dernier programme, l'échelle de votre dessin ainsi que le point de celui-ci à afficher au centre de votre écran.

10 REM Algorithme de Barry MARTIN
20 MODE 2 :CLS
30 INPUT”a”; a
40 INPUT”N” , N
50 INPUT”Echelle" , E
60 INPUT”coordonnees du centre x,y”;cx,cy
70 CLS: PRINT”Algorithme de Barry MARTIN”
80 LOCATE 1,1 :x=0:y=0
90 FOR i=1 TO N
100 PLOT x*E+cx,y*E+cy
110 xx=y-SIN(x)
120 yy=a-x
130 x=xx:y=yy
140 NEXT i


Algorithme de Barry Martin : a = 3,12 N = 100 000


Algorithme de Barry Martin : a = 3,09 N = 300 000

 

Page précédente : 5/10.4.2 - Jeux de lignes (!)

CPCrulez[Content Management System] v8.7-desktop/cache
Page créée en 175 millisecondes et consultée 462 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.