IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mathématiques Discussion :

numérique: ordre de grandeur différents


Sujet :

Mathématiques

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut numérique: ordre de grandeur différents
    Bonjour tous,

    souvent en analyse numérique on essai de normaliser les grandeurs qui rentrent en jeu car elles peuvent

    avoir des ordres de grandeurs très différents. Je viens sur le forum pour vous poser la question:

    pourquoi et quand est on obligé de faire cela ?

    1) lors de la résolution d'un système linéaire je comprends que ça peut poser problème car il y a des soustractions

    qui interviennent donc numériquement on a :
    2) par contre, pour la résolution de système différentielles je ne comprends pas la nécessiter de normaliser:
    par exemple, il y a t il un problème si y1 est très grand devant y2?

    Si vous avez d'autres exemples merci de me les faire connaitre pour bien que je comprenne.

    merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 488
    Points : 593
    Points
    593
    Par défaut
    Bonjour,

    Dans le cadre de résolution d'équations différentielles, il est effectivement préférable de travailler en renormalisant les coordonnées et variables du problème afin de minimiser les effets de troncatures et d'arrondis.

    Un exemple simple avec l'équation de diffusion de la chaleur: imaginons qu'on calcule l'évolution de la température d'un barreau maintenu à ses extrémités à T=100.01 K et T=100.02 K, respectivement. Si on réalise tous les calculs (par ex. via différences finies) on va se retrouver à manipuler des différences de T entre proches voisin; mais si T est codé sur 7 chiffres significatifs, tous les calculs impliquant des différences ne seront qu'à une précision des 3 derniers chiffres significatifs (puisque les 4 premier chiffres des T seront systématiquement T=100.0...).
    On n'aurait pas cette troncature en réécrivant par exemple le problème en terme de T' = T-100.0; tous les calculs intermédiaires seront faits sur 7 chiffres significatifs.

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Merci d'avoir posé cette question

    C'est un de mes grands chevals de bataille depuis que je suis ce forum... et c'est, apparemment, une des très grosses lacunes de l'enseignement des dernières années, en particulier en informatique...

    Avoir le bon ordre de grandeur est essentiel de manière générale, et encore plus en informatique...

    Il y a 2 sortes d'ordre de grandeur : l'ordre de grandeur physique, et l'ordre de grandeur des calculs.


    • L'ordre de grandeur physique prend en compte la précision de la mesure/de l'utilisation par rapport à la grandeur souhaitée... Par exemple, en ayant des instruments de mesure "normaux", il est quasi-impossible de decendre en dessous du 1/10ième de degré pour une température... Une coordonnée GPS faisant référence à une parcelle de terrain ou à la position d'un batiment n'a strictement aucun sens en dessous du mm (la taille d'un grain de sable), voire du cm, voire du mètre... Si donc on manipule des températures, il est sans aucun sens de vouloir avoir plus de 2 décimales. De même avec des coordonées GPS il et sans aucune signifcation d'aller en dessous du mm, et très souvent du mètre...

    • L'ordre de grandeur des calculs comprend la manière de stocker des nombres dans un ordinateur, PLUS la prise en compte de la précision de la grandeur utilisée, et PLUS le nombre/type de calculs dans lesquels cette variable est impliquée...


      • Par exemple, sur une machine 32 bits, un flottant est représenté sur 32 bits, un double-précision sur 64. Si on regarde le maximum de "résolution" pouvant être stocké (souvent appelé 'FLT_ESPILON" ou "DBL_ESPILON"), il indique quelle valeur sépare 2 nombres distincts.. En général sur un 32 bits c'est 1.10^-17 en double précision. Ce qui veut dire qu'avoir des chiffres de précision supérieure (par exemple séparés par 10^-18) les fera considérer comme strictement égaux par la machine..

      • Maintenant, additionner 2 nombres avec 10^-17 de précision amène à 10^-16 de précision finale...

      • Pour donc ne pas avoir à se soucier de la limitation imposée par le nombre et le type de calculs dans ces cas, il est donc logique de re-dimensionner les valeurs de manière à obtenir un écart maximal dans les valeurs.. : si j'ai 2 nombres dont la valeur absolue est de l'ordre de 10^-9, j'ai intérêt à les multiplier par 10^9... Dans ce cas, si je ne le fais pas, une différence du milliardième ne serait pas prise en compte, alors que si je le fais j'obtiendrais bien la différence à la fin du calcul..


    Le premier type d'ordre de grandeur est de la logique : quand tu reçois ton salaire, c'est arrondi au centime. Pour toi, les milli-euros ne comptent pas.

    Le second type allie la logique ci-dessus avec les contraintes du calcul..


    C'est une des raisons pour lesquelles les posteurs qui postent pour utiliser des bibliothèques manipulant des grands nombres ou obtenir de grands nombres de décimales, en dehors d'exercices ou de la cryptographie, sont dans les choux : de manière générale, la précision des calculs est limitée par la précision de la donnée mesurée (voulor obtenir 10 décimales sur une donnée qui en entrée n'en a que 2 est absude), et la mise en place d'un bon ordre de grandeur sur les variables rend totalement inutile l'application d'utliser quelque chose de spécial pour faire des opérations sur des grands nombres (prendre le budget de la France en euros et lui adjoindre des milli-euros est tout aussi absurde)

    Donc de manière générale lors de calculs, on tente le plus possible de manipuler des nombres ayant le même ordre de grandeur... A fortiori dans des méthodes numériques où les coefficients sont basés sur ces valeurs : les calculs en tant que tels, la stabilité et la réalité de la solution ne doivent pas être soumis aux variations dues par des limites de différence de précision dans les valeurs...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    merci beaucoup pour les renseignements

    souviron34, il y a un truc que je n'ai pas compris, si je multiplie 1e-19 par 1e10 il va y avoir un problème ou non ?

    j'avais cru comprendre que ces erreurs de troncatures n'etaient que lorsqu'il y a des soustractions, ai je bien compris ?

    si oui, pourquoi ça marche que lorsqu'il y des multiplications et pas pour les soustractions ?

    merci pour ton aide

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par membreComplexe12 Voir le message
    souviron34, il y a un truc que je n'ai pas compris, si je multiplie 1e-19 par 1e10 il va y avoir un problème ou non ?
    Oui et non, ça dépend comment tu l'envisages...

    • Si tu prends un nombre comme 1.10-19 et que tu le multiplies ou que tu le compares avec d'autres nombres du même ordre de grandeur, il n'y aura pas de problèmes.. Les doubles peuvent aller jusqu'à 10^+/-308 je crois sur un 32 bits.. 10^-19 * 10^10 donnera bien 10^-9.
    • Si tu as un nombre X de l'ordre de 1, tu ne pourras pas aller à 10^-19 de précision sur une machine 32 bits. : entre 1.000(+15 "0") et 1.000(+14 "0")5 dans un 32 bits c'est la même valeur...



    Ce qui est important, c'est la plage observée. Tu as droit à une différence minimale de 10^-17, c'est à dire à 1/100 mllions de milliards: la différence minimale entre 2 valeurs doit être supérieure à ça pour être décelable..


    Citation Envoyé par membreComplexe12 Voir le message
    j'avais cru comprendre que ces erreurs de troncatures n'etaient que lorsqu'il y a des soustractions, ai je bien compris ?

    si oui, pourquoi ça marche que lorsqu'il y des multiplications et pas pour les soustractions ?
    non, ça marche pour toutes les opérations :

    si j'écris 10.25, j'ai une précision de 2 décimales.. Donc en fait on effectue un arrondi où :

    10.246 <= X <= 10.255 => X = 10.25
    10.256 <= X <= 10.265 => X = 10.26

    donc mon chiffre à 2 décimales correspond à une incertidude de +/-5 sur la 3ième décimale. Si j'additione - soustrait - multiplie ou divise (par séries de Taylor) - ces 2 nombres, mon incertitude devient la somme des 2... Donc +/-10 sur la 3ième décimale, donc +/-1 sur la 2ième.. : parce qu'en fait mon résultat peut très bien être en fait :

    • 10.246 + 10.265 ou
    • 10.255 + 10.256 ou
    • 10.246 + 10.256 ou
    • 10.255 + 10.265


    Les carrés, log, racines, bien qu'ayant des formulations différentes, ont en fait le même résultat en gros.. (l'incertitude sur une opération est la somme des incertitudes)

    Donc, si tu veux une précision de 10^-9 sur 2 nombres de l'ordre de l'unité, tu pourras faire 2^7 opérations (tu pars avec 10^-17 de précision "ordi" sur chacun) sur les nombres en obtenant en finale cette précision...


    Donc de manière générale on se fout un peu de la précision de l'ordi - on utilise la maximum en général...

    Ce qu'on veut, c'est la précision sur les données, et pour cela on essaye d'avoir des échelles cohérentes : quand je fais des calculs de distance intergalactiques, je ne me sers pas de distances en mètres ou en angstroms, mais en années-lumières... A l'inverse, si je veux calculer des distances d'orbitales dans un atome, je ne me sers pas d'années-lumières, mais d'angstroms..

    D'une part ça n'aurait pas de sens si on faisait autrement (la taille de l'Univers (13.7 milliards d'années-lumières) est à +/-0.05 milliard d'années-lumières près, c'est à dire +/- 50 000 millions de (10 000 milliards de kilomètres) : utiliser une échelle du mètre ou même du kilomètre est absurde à cause de cette imprécision), d'autre part justement on tomberait dans les limites des processeurs, pour une chose inutile..

    C'est l'application du "on mélange pas des torchons et des serviettes" ou "on compare pas des pommes et des poires" : on se sert d'une échelle cohérente pour représenter les coefficients.


    Par exemple, dans une matrice qu'on veut inverser, ou dans une résolution numérique comme tu mentionnais, on tente de dimensionner les coeffs de manière à ce qu'ils aient le même ordre de grandeur : avoir des rapports de 10^6 ou 10^10 peut rendre la participation d'un coeff particulier dans une équation insignifiante, ou au contraire prépondérante, juste par un biais...


    D'où l'utilisation de cofficients normés... : pour un type de coeff, on calcule le min et le max, et on remplace chaque valeur par un pourcentage.. Les calculs se font alors seulement sur des pourcentages, qui ont l'avantage de tous être du même ordre (entre 0 et 1) au lieu d'avoir des échelles possiblement totalement séparées..

    Mais on peut ne pas avoir besoin de coeffs normés si les ordres de grandeurs sont voisins ou similaires..

    Voilà

    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

Discussions similaires

  1. equation avec ordres de grandeur différents
    Par membreComplexe12 dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 21/12/2012, 11h08
  2. Réponses: 3
    Dernier message: 24/09/2010, 01h03
  3. autoscale d'un graphique avec courbes de différents ordre de grandeur
    Par oliv27400 dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 28/06/2010, 14h04
  4. Ordre de grandeur d'une fonction
    Par Bool1988 dans le forum Caml
    Réponses: 7
    Dernier message: 05/09/2007, 15h38
  5. Extraire l'ordre de grandeur d'un double
    Par Kaeguri dans le forum C++
    Réponses: 3
    Dernier message: 04/05/2007, 16h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo