Les fonctions Ran :
Les générateurs de nombres aléatoires utilisent un principe d’itération
I(n+1) = a*I(n) (mod m)
où a = 75
m = 231-1 (a et m étant tous deux des nombres premier)
On approxime ensuite une factorisation de m : m=a*q+r => q = int[m/a] et r = m (mod a)
On obtient : q = 127773
r = 2836
En
utilisant de façons différentes ces quatre variables (par
multiplication croisées, minimisation de l’ordre de
corrélation entre différentes génération de
séquences, par addition et normalisation, ou bien soustraction
pour Ran3) on obtient les différents générateurs
Ran0, 1, 2, 3.
Les
générateurs Ran0 et Ran1 renvoient un nombre compris
entre 0 et 1 avec une période comprise entre 108 et 109 termes.
Quant
aux fonctions Ran2 et Ran3 elles fonctionnent sur le même
principe mais avec d’autre nombres premier ce qui a pour effet
d’augmenter leur période à 1018 termes.
La fonction « gasdev » :
La
fonction gasdev utilise la « méthode de
Box-Muller », qui consiste à utiliser un changement
de variables aléatoires. A partir d’une distribution
uniforme X=1 pour x = [0..1], on souhaite obtenir une
distribution gaussienne
Cette méthode utilise la formule de changement de variable aléatoire
Considérant
la transformation entre deux variables uniformes x1 et x2 sur [0,1] et
deux variables y1,y2 on peut écrire :
Et donc :
On en déduit le déterminant du jacobien :
Nous retrouvons bien une distribution gaussienne.
La fonction Jacobi (Diagonalisation de matrices symétriques) :
L’approche
théorique de cet algorithme est basée sur un principe de
« rotation » des coefficients de la matrice
à diagonaliser. La rotation de Jacobi est une matrice de la
forme :
Soit A, une matrice symétrique à diagonaliser, on fait l’opération :
on obtient :
les indices (p,q) étant ceux du coefficient apq à éliminer et c et s vérifient l’équation
Cette
opération sera réitérée plusieurs fois afin
d’obtenir des zéro sur les termes qui ne sont pas
diagonaux.