Bonjour à toutes et à tous,
Je travaille sous Excel (2007) et je cherche à résoudre simplement l'équation du premier degré non polynomiale suivante :
x = 1 / [ log10 (a + b/ racine(x) ] ²
où a et b sont des valeurs (réelles) calculées dans des cellules de ma feuille.
Pour la résolution, j'ai pensé à itérer en créant une référence circulaire, ce qui donne :
dans la case A1 :
= 1/( LOG10(a + b/RACINE(A2) ) ) ^2
dans la case A2 :
= 1/( LOG10(a + b/RACINE(A1) ) ) ^2
(Vous l'aurez compris, le "a" et le "b" font bien appel aux cellules concernées dans les formules de ma feuille, j'utilise simplement ici cette notation pour simplifier, mais pas d'erreur de ce-côté là !)
En faisant cela, je me dis que A1 pioche la valeur de x comprise dans A2 en guise d'itération "i", que A2 pioche la valeur de x comprise dans A1 en guise d'itération "i+1" et ainsi de suite, ce qui permet la résolution. Cela vous semble-t-il d'ores-et déjà correct ou pensez-vous qu'il y ait une déjà une erreur de raisonnement ?
Le fait est que, lorsque j'active le calcul itératif et lance des itérations, je trouve une valeur numérique (la même, à un arrondi minuscule près, dans A1 et A2) qui est juste (je le sais), donc à priori, pas de problème me direz-vous ?
Jusque là, effectivement non ! MAIS, lorsque je calcule séparément la formule en A2 (en cliquant gauche dessus pour l'éditer puis en pressant "Entrée"), l'erreur "#DIV/0 !" apparaît ! J'ai vérifié, je ne trouve pas d'erreur dans mes formules. Et quand je relance les itérations (après avoir réinitialisé A1 et A2), je ré-obtiens les valeurs numériques, et en ré-éditant, l'erreur réapparaît ...
Bref, je suis un peu à cours, je ne sais pas si l'erreur provient de mon raisonnement même quant à la résolution, d'un problème d'erreur dans les formules ou autre ?
Si quelqu'un est susceptible de m'éclairer ... merci beaucoup d'avance (et désolé pour la longueur du message, j'ai essayé d'être complet ^^) !!!
Peyo

Alors effectivement, j'avais tout de suite essayé avec un seuil d'itération à 1, et dès la deuxième itération je trouve ma valeur finale (à l'arrondi que je considère acceptable et en ayant adopté une valeur d'initialisation optimisant la rapidité de convergence au vu du résultat escompté).
Pour ce qui est de l'initialisation, j'utilisais jusqu'à présent un compteur d'itération (cellule définie dans ma feuille) qui me servait de valeur test pour l'initialisation et la ré-initialisation. Néanmoins, je ne testais que la nullité de la valeur et pas l'erreur comme tu le suggères, ce que je viens donc de modifier.
Sinon, pourquoi utiliser 2 cellules pour la référence circulaire ? Et bien simplement parce que je n'ai absolument pas pensé à n'en utiliser qu'une seule , donc voilà chose faite, merci bien, cela paraissait tellement évident que ça ne m'a jamais effleuré l'esprit ... Hum hum ... ^^
Par contre, un phénomène que je ne comprends à priori pas subsiste : une ré-initialisation se produit à chaque fois que j'édite (manuellement) la cellule, alors que je ne teste que la nullité de la valeur (pour l'initialisation, comme dans ta première proposition). Et là j'avoue qu'une fois de plus, de prime abord, je ne vois pas ce qui se produit ... Cela me dérange dans la mesure où j'aimerais être certain de la validité de mes résultats, or ce mécanisme laisse pour l'instant planer un doute.
Quelqu'un a-t-il une idée à ce sujet ?
Merci d'avance et bonne journée !
P.S. : en ce qui concerne visual basic, je suis un parfait ignare !
Peut-être serait-il interessant que tu déposes un exemple sur cijoint.fr et que tu colles le lien fourni ici.
eric