Solveur

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.
 

job75

XLDnaute Barbatruc
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

  • Valeur cible(4).xls
    37 KB · Affichages: 29

job75

XLDnaute Barbatruc
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

  • Valeur cible(5).xls
    39.5 KB · Affichages: 37

tamatave33

XLDnaute Occasionnel
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.
 

job75

XLDnaute Barbatruc
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

  • Valeur cible(6).xls
    40 KB · Affichages: 34
Dernière édition:

tamatave33

XLDnaute Occasionnel
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.
 

ROGER2327

XLDnaute Barbatruc
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
 

ROGER2327

XLDnaute Barbatruc
Re : Solveur

Re...


Re Roger,

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

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

A+
Don't be :confused:.
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
 

job75

XLDnaute Barbatruc
Re : Solveur

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+
 

tamatave33

XLDnaute Occasionnel
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

  • Calcul épaisseur calorifuge (norme NF EN12828) en modif.xls
    110 KB · Affichages: 33

ROGER2327

XLDnaute Barbatruc
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.
 

job75

XLDnaute Barbatruc
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:

job75

XLDnaute Barbatruc
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.
 

Discussions similaires

Statistiques des forums

Discussions
312 359
Messages
2 087 590
Membres
103 604
dernier inscrit
CAROETALEX59