Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

tamatave33

XLDnaute Occasionnel
Bonjour à toutes et à tous,

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.
 
Re : Solveur

Bonjour tamatave33, Roger, le forum,

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
Fichier (4).

Bonne journée.
 

Pièces jointes

Re : Solveur

Re,

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
Fichier (5).

A+
 

Pièces jointes

Re : Solveur

Bonjour job75,

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.
 
Re : Solveur

Re,

C'est facile, par exemple :

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
  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
Fichier (6).

A+
 

Pièces jointes

Dernière édition:
Re : Solveur

Bonjour ROGER2327,

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.
 
Re : Solveur

Bonjour à tous.


Re,

On peut trouver les 2 solutions en lançant 2 fois la commande Valeur cible :
(...)
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
 
Re : Solveur

Re...


Re Roger,

Je ne comprends pas, avec a=1, b=7,91, c=900 l'équation n'a pas de solution 😕

Edit : par ailleurs votre ordi est sur les itérations par défaut (100 et 0,001).

A+
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
 
Re : Solveur

Bonsoir job75,

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

Re : Solveur

Re...


Re Roger,

Alors avec a=1, b=-7,91 et c=900 mon fichier (5) donne bien les bonnnes solutions.

Mais il faut mettre le nombre d'itérations à 10000 et la précision à 0,000001 comme je l'ai indiqué (sur la feuille).

A+
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


Bonne soirée.
 
Re : Solveur

Re,

Quant à ceci :

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.

que faites-vous donc Roger ?

Sur mon vieil ordi avec Win XP - Excel 2003 la macro s'exécute en 0,05 seconde.

Et je n'utilise même pas Application.ScreenUpdating = False sinon c'est 0,02 seconde.

Au plus 10000 itérations ce n'est vraiment pas la mer à boire sur une formule très simple à calculer.

A+
 
Dernière édition:
Re : Solveur

Re,

J'ai repris votre programmation adaptée à mon fichier Excel, mais le calcul ne se fait pas automatiquement.

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
Bonne nuit.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
8
Affichages
791
Réponses
1
Affichages
1 K
Réponses
14
Affichages
2 K
Retour