Bonjour à tous,
Je lance ici une discussion. Pas de question, pas de problème, juste une curiosité.
Aujourd'hui, j'ai suivi un cours d'algèbre linéaire numérique, et on nous a montré des exemples bien surprenants.
Notamment, j'ai appris que les opérations matricielles élémentaires n'était pas aussi simple que ce que je pensais au niveau des erreurs d'arrondis. Y compris pour des matrices très simple 3*3, matlab est incapable de fournir une "bonne" approximation de l'inverse d'une matrice si la matrice a un conditionnement (C'est comme ça qu'on dit ? J'en sais rien, le cours était en espagnol ) grand. Cela m'a énormément surpris parce que l'on connaît les formules pour calculer l'inverse d'une matrice 3*3. Elles sont un peu moches, mais sans plus...
Autre curiosité : Si on veut inverser une matrice, on peut vouloir faire une décomposition QR (Q orthogonale, R triangulaire supérieure). Cette opération, via l'algo de Gram-Schmidt est en O(n^3) où n est la taille de la matrice. Donc, là encore, pour une matrice 3*3, c'est tout à fait faisable à la main. Cependant, là encore, les erreurs d'arrondis sont loin d'être négligeable quand le conditionnement k est grand. En fait, l'algo basique donne une erreur relative pour Q*Q -Id de l'ordre de e*k^2, avec e précision machine. Avec une simple modification, cela donne e*k, ce qui est déjà mieux, et il semble même que matlab a encore un autre algo qui donne une erreur de l'ordre de e...
Bon, je sais pas trop pourquoi je poste ça, ni ce que j'attends comme réponse. Est ce que vous aussi vous trouvez ça étonnant ? Est ce que vous connaissez d'autres cas où les erreurs machines produisent des résultats vraiment faux sur des algorithmes basiques ?
__
rvz, complètement
-----