Je rencontre des problèmes lorsque je compare les résultats de différentes exécutions de mon logiciel Matlab avec la même entrée. Pour réduire le problème, je l'ai fait ce qui suit:Problèmes numériques dans Matlab: même entrée, même code -> sortie différente?
- enregistrer toutes les variables pertinentes en utilisant la méthode
- appel d'une méthode save() Matlab qui calcule quelque chose
- enregistrer toutes les variables de sortie pertinentes à l'aide de nouveau save()
Sans changer la méthode appelée, je l'ai fait une autre course avec
- charge les variables enregistrées Abov e et comparer avec les variables d'entrée courantes en utilisant isequal()
- appeler à nouveau ma méthode avec les variables d'entrée en cours
- charger les variables out enregistrées ci-dessus et comparer.
Je ne peux pas croire que la comparaison dans la dernière "ligne" détecte de légères différences. Les calculs comprennent des nombres simples et doubles de précision, l'erreur est de l'ordre de 1e-10 (la sortie est un nombre double). La seule explication possible que je puisse imaginer est que Matlab perde de la précision lors de l'enregistrement des variables (ce que je considère très improbable, j'utilise le format binaire Matlab par défaut) ou qu'il y a des calculs comme a = b + c + d, qui peut être calculé comme = (b + c) + d ou a = b + (c + d), ce qui pourrait conduire à des différences numériques. Savez-vous quelle pourrait être la raison des observations décrites ci-dessus?
Merci beaucoup!
Pourriez-vous fournir un exemple minimal pour cela? Cela peut dépendre fortement des fonctions que vous utilisez. Les différences sont courantes si une fonction du chemin utilise un caractère aléatoire. Ce n'est probablement pas le cas, mais un exemple reproductible donnerait encore quelque chose aux autres. –
Malheureusement, la méthode que j'appelle implique de nombreuses étapes de calcul et même du code que je ne peux pas partager. Je me demandais simplement si ce comportement est "comportement Matlab valide" ou s'il pointe vers un problème dans mon code. Il y a quelques appels de randn() impliqués, mais le RandStream est placé avant chaque exécution, donc il produit la même valeur. Et il semble que, après avoir éliminé les chiffres de précision unique du code élimine l'apparence du problème (ou le rend moins probable ??) – Philipp
Ceci est un comportement très inattendu de MATLAB.Est-il possible que la différence se produise lorsque vous sauvegardez vos variables? Vous dites que vous chargez les variables et comparez - qu'en est-il de sauvegarder les résultats des deux exécutions et de comparer ces résultats enregistrés? –