Pour mon travail je dois trouver la solution d'une équation de la forme xLN(x)+ax = b.
a et b sont connus.
Je dois faire varier a et b et trouver x à chaque fois.
Voici un exemple :
42.9 x LN(x) + 111.277 x + 0.572 = 0
La solution étant x = ~ 0.06
On m'a dit que je peux résoudre cette équation directement avec Excel en utilisant Solveur avec une macro.
Quelqu'un peut-il m'en dire plus, car j'avoue que cela ne me parle pas beaucoup.
J'utilise Excel 2003 et j'ai déjà installé Solveur, mais je ne sais pas comment m'en servir.
Je vous remercie pour votre aide.
Comme l'a montré Roger il n'y a pas de solution si G3-E3*EXP(-1-F3/E3) est positif.
J'ai introduit ce test en C10 et ajouté un message d'alerte :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [E3:G3]) Is Nothing Then
[C4].GoalSeek Goal:=0, ChangingCell:=[C8]
If [C10] > 0 Then MsgBox "Pas de solution..."
End If
End Sub
On peut trouver les 2 solutions en lançant 2 fois la commande Valeur cible :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [E3:G3]) Is Nothing Then
[C10] = 10 ^ -99 'initialisation
[C4].GoalSeek Goal:=0, ChangingCell:=[C10] '1ère solution
[C12] = 10 ^ 99 'initialisation
[C6].GoalSeek Goal:=0, ChangingCell:=[C12] '2ème solution
If [C14] > 0 Then MsgBox "Pas de solution..."
End If
End Sub
Merci encore pour votre contribution. En fait, vous m'avez devancé car votre réponse correspond à la question que j'allais vous poser : comment peut-on faire pour avoir les deux solutions.
Si on connait la limite minimum de la solution recherchée (d par exemple) existe-t-il un moyen pour éliminer la solution qui ne convient pas. Dans mon problème, la limite inférieure d serait 0,02.
Si vous pouviez me donner la solution, celle-ci serait la bienvenue.
Merci encore.
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [E3:G3]) Is Nothing Then
[C10] = 10 ^ -99 'initialisation
[C4].GoalSeek Goal:=0, ChangingCell:=[C10] '1ère solution
If [C10] < [G5] Then [C10] = "éliminée"
[C12] = 10 ^ 99 'initialisation
[C6].GoalSeek Goal:=0, ChangingCell:=[C12] '2ème solution
If [C12] < [G5] Then [C12] = "éliminée"
If [C14] > 0 Then MsgBox "Pas de solution..."
End If
End Sub
Merci pour votre contribution et tous vos éclairements sur la fonction x * ln(x) + b * x + c = 0. Notamment sur le fait qu'elle pouvait avoir 2 solutions car avec les valeurs données par Excel, cela ne correspondait pas à ce que j'attendais.
Bonne journée.
On peut même trouver une solution négative (a=1, b=7,91, c=900).
D'accord, -3,3554332E-94 est proche de zéro. Mais zéro n'est pas une solution : les solutions sont 585,079... et 1487,89...
Bonne journée.
ℝOGER2327 #7689
Lundi 16 As 142 (Saint Cap, captain - fête Suprême Quarte) 28 Brumaire An CCXXIII, 5,5763h - coing 2014-W47-2T13:22:59Z
Don't be .
C'est moi qui suis confus but never confused because I'm a damned froggy! : il s'agit de a=1, b=-7,91, c=900. Don't worry about that! My computer is turned on Itérations par défaut with 100 and 0.001 as parameters.
Bonne soirée.
ℝOGER2327 #7690
Lundi 16 As 142 (Saint Cap, captain - fête Suprême Quarte) 28 Brumaire An CCXXIII, 6,4823h - coing 2014-W47-2T15:33:27Z
Désolé de vous déranger encore. J'ai repris votre programmation adaptée à mon fichier Excel, mais le calcul ne se fait pas automatiquement. Je vous joint le fichier, ouvert sur l'onglet qui vous intéresse. Les coefficients a, b et c sont calculés dans les cellules C22:C24 . Y-a-t-il une solution?
Merci encore pour votre aide.
Pièces jointes
Calcul épaisseur calorifuge (norme NF EN12828) en modif.xls
Quel distrait suis-je !
Ça va mieux comme ça !
Et on a le temps d'aller boire un café... Bon, je plaisante.
Un cas reste problématique : celui des racines doubles.
Par exemple avec a=42,9, b=-181,7812662, c=1092,470996 (je fais attention au signe, cette fois-ci), le fichier (5) donne deux racines distinctes 25,4644832010409 et 25,4662031813727 en 23 secondes, au lieu d'une racine double 25,4655243853057. Ce n'est probablement pas très important quantitativement : ces valeurs ont le même arrondi au dixième 25,5 (ce n'est pas terrible comme précision, mais c'est peut-être suffisant...)
Par contre, ça masque le fait que les deux racines apparemment voisines sont en réalité égales. Qualitativement, ce n'est pas très-satisfaisant.
J'arrête les essais car je suis maintenant confronté à un problème d'"espace pile" insuffisant.
Bonne soirée.
ℝOGER2327 #7691
Lundi 16 As 142 (Saint Cap, captain - fête Suprême Quarte) 28 Brumaire An CCXXIII, 7,4952h - coing 2014-W47-2T17:59:19Z
Et on a le temps d'aller boire un café... Bon, je plaisante.
(...) J'arrête les essais car je suis maintenant confronté à un problème d'"espace pile" insuffisant.
Tout simplement parce que a b c ne sont pas entrés manuellement mais calculés.
Donc utilisez :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [C6,C10,C14]) Is Nothing Then
Application.ScreenUpdating = False 'pour accélérer
[C27] = 10 ^ -99 'initialisation
[C25].GoalSeek Goal:=0, ChangingCell:=[C27] '1ère solution
If [C27] < [c10] / 1000 Then [C27] = "éliminée"
[C28] = 10 ^ 99 'initialisation
[C26].GoalSeek Goal:=0, ChangingCell:=[C28] '2ème solution
If [C28] < [c10] / 1000 Then [C28] = "éliminée"
End If
End Sub