Le but de cette page, est de montrer que l'on peut faire des calculs en ligne, en utilisant les fonctions du langage PHP. Les fonctions de la bibliothèque bcmath, utilisent des chaînes de caractères, pour effectuer des calculs avec les entiers et avec les nombres décimaux, ce qui permet de calculer avec une précision arbitraire.
Cette remarque est importante, pour effectuer des calculs itératifs, qui font intervenir des nombres entiers de très grande taille, par exemple. Les fonctions essentielles sont :
bcadd, bcsub, bcmul et bcdiv, pour les 4 opérations. Leur syntaxe est :
bcfon(string $opg, string $opd, int $ipreci)
Les 2 premiers arguments sont des chaînes de caractères, qui contiendront respectivement l'opérande de gauche et l'opérande de droite. Le troisième argument est un entier qui permet de choisir le nombre de décimales après la virgule. C'est un argument optionnel, qui sera omis pour le calcul avec des entiers.
La bibliothèque bcmath de la version 4.4.2 du PHP contient d'autres fonctions comme bcmod, bcpow et bcsqrt.
Vous pourrez programmer par vous-même, de nombreuses autres fonctions, en utilisant les 4 opérations de base de bcmath.
J'ai utilisé certains scripts, pour créer la petite bibliothèque en ligne postbcfon, qui permet de faire des tests de précision. Ce sont des fonctions comme bctg, bccotg, bcsh, bcch... qui utilisent bcfact, bccos, bcsin et bcexp (qui calculent les sommes de leur développement en série de Taylor)
Faites des calculs en ligne, avec les fonctions de postbcfon.php, en choisissant différentes précisions, en utilisant le lien :
saisissez une fonction et ses arguments dans la bibliothèque postbcfon.php
On peut calculer (avec une précision arbitraire) des constantes comme pi, des fonctions développables en série entière, des séries formelles, des itérations...
La programmation, pour le calcul de la somme d'une série entière rapidement convergente, en utilisant les fonctions de base de bcmath, ne pose pas de difficultés particulières.
Consultez le script postbcfon.php, que j'ai placé dans le fichier postbcfon.txt, grâce au lien :
postbcfon.txt : source de la bibliothèque postbcfon.php
On a choisi comme test d'arrêt, la comparaison entre la somme de la série à l'ordre n+1 et celle à l'ordre n.
On trouve des exemples d'itérations en ligne, dans le lien suivant, de la page index de studyvox.biwi.ca :
Elles ne sont pas toutes programmées avec les fonctions de bcmath, ce qui limite la validité des calculs. Voici un exemple d'itération, qui ne fait intervenir que les opérations d'addition, de multiplication et de puissance sur les entiers positifs, et réalisé avec les fonctions de bcmath :
saisir les données pour une itération sur les entiers positifs (en préparation)
On utilise la fonction bcscale, en début de programme, pour choisir le nombre de décimales, qui correspond à la précision des calculs. Pour des problèmes sensibles aux conditions initiales, comme on en rencontre en particulier dans l'itération de certaines transformations ponctuelles, il faut tester la validité des calculs, en développant des tests de redondance. On fera, par exemple, un calcul avec 2 choix du paramètre de précision, et l'on essayera d'en déduire le nombre de chiffres significatifs, au dela duquel, les calculs ne peuvent pas être fiables.
Voici un exemple, qui permet de rechercher un zéro d'une application de R dans R : La méthode itérative de Newton, pour le calcul d'une racine de l'équation f(x) = 0 s'écrit : xn+1 = xn + deltan avec deltan = -f(xn)/df/dx(xn) Le programme en PHP est élémentaire, mais il faut penser dès maintenant, de le structurer pour qu'il puisse traiter les familles de fonctions qui dépendent d'un paramètre. Voici un exemple avec la fonction 2*x*x - c
saisir les données pour l'itération de Newton, pour le calcul d'une racine de l'équation f(x,c)=0
Le code est dans le fichier postnewton.php, et vous pouvez consulter sa source, que j'ai placée dans le fichier postnewton.txt
postnewton.txt : source en PHP pour l'itération de Newton avec les fonctions de bcmath
J'attire votre attention sur plusieurs points, qui peuvent donner bien des déboires si l'on n'y prend pas garde : En PHP, les variables globales sont déclarées en tête du script, et l'instruction global doit être utilisée dans les fonctions qui utilisent des variables globales.
Un autre point important est de se souvenir que, par défaut, les arguments des fonctions sont passés par valeurs (et non par références) Cela signifie qu'un argument passé par valeur ne sera pas modifié dans le corps de la fonction.
Pour faire passer un argument par référence, il suffit de faire précéder son nom par le symbole &. C'est alors l'adresse de l'argument qui est utilisée, ce qui permet de modifier un tel argument dans le corps de la fonction.
Voici maintenant un calcul en ligne, pour rechercher le points fixes d'un endomorphisme de R :
Saisissez les données pour la recherche des points fixes de l'endomorphisme : x-->2*x*x-c
J'attire votre attention sur le fait que tous les calculs, doivent être effectués avec la précision choisie, sous peine de ne pas être fiables. Regardez la suite des 10 premiers itérés de la méthode de Newton, pour différents choix de la précision. Si l'on veut écrire un test d'arrêt pour la Néthode de Newton, il ne faut pas utiliser les fonctions ordinaires comme abs et "<", mais la fonction bccomp de la bibliothèque bcmath.
Je termine cette page en vous proposant de faire le test de précision suivant : faites le calcul de la solution positive de l'équation 2*x*x-1=0 par la méthode de Newton, et comparez le résultat avec celui de bcsqrt("2",12)/2, que vous pouvez faire avec les fonctions de base de la bibliothèque bcmath. Pour cela, vous pouvez utiliser le lien suivant, qui vous permet de travailler en ligne, avec les principales fonctions de bcmath :
Calcul en ligne avec les fonctions de la bibliothèque bcmath du PHP
Logiciels en ligne en php pour le traitement de la musique