« Découvrir Scilab/Calcul numérique » : différence entre les versions

Contenu supprimé Contenu ajouté
→‎Équation polynomiale : corr. (s à roots), + exemple
Ligne 1 712 :
En effet, Scilab calcule par défaut avec des nombre décimaux codés en virgule flottante à double précision selon la norme [[w:fr:IEEE 754|IEEE754]]. Cela permet de représenter des nombres dont la valeur absolue est comprise entre 10<sup>-307</sup> et 10<sup>308</sup> ; si un calcul donne une valeur inférieure, cela retourne la valeur 0 (erreur de soupassement), et s'il donne une valeur supérieure, cela retourne la valeur Inf ou -Inf (erreur de dépassement). Le nombre de chiffres significatifs est de l'ordre de 16 ; ainsi, si deux nombres diffèrent au 17<sup>e</sup> chiffre significatif, ils seront considérés comme égaux (erreur d'arrondi), leur différence sera nulle, leur rapport sera de 1.
 
Il faut donc s'assurer d'une part que le valeur finale est représentable, mais aussi que les résultats des calculs intermédiaires sont eux aussi représentables. Par exemple le calcul de <code>abs(-10^-200)</code> donne bien le résultat 10<sup>-200</code>, alors que <code>sqrt((-10^-200)^2)</code> donne 0, puisque le résultat intermédiaire (-10<sup>200</sup>)<sup>2</sup> n'est pas représentable (soupassement). Dans certains cas, un algorithme itératif, cherchant une valeur approchée, peut donner un meilleur résultat qu'un calcul direct utilisant une formule exacte… Par exemple, pour calculer l’hypoténuse d'un triangle rectangle <math>\sqrt{a^2 + b^2}</math> (norme euclidienne), on peut utiliser la méthode de MollerMoler et Morrison (1983)<ref>{{harvsp|Baudin|2010b|p = 44–45}}</ref>, ce que fait d'ailleurs la commande Scilab <code>norm()</code>.
 
Si l'on doit faire des calculs avec des cas « extrêmes » — nombres très proches, ou bien ayant une valeur absolue élevée ou faible —, on s'intéressera à des algorithmes « robustes ». Ceux-ci font fréquemment intervenir une normalisation des données ou une factorisation pertinente. Dans la mesure du possible, si l'on a le choix entre une fonction « fait maison » et une fonction Scilab faisant le même travail, on favorisera la fonction Scilab, qui est censée être optimisée.