Résolution d'équation par vba

Fermé
blalaa Messages postés 167 Date d'inscription mercredi 18 avril 2018 Statut Membre Dernière intervention 24 mars 2020 - Modifié le 18 avril 2018 à 15:57
blalaa Messages postés 167 Date d'inscription mercredi 18 avril 2018 Statut Membre Dernière intervention 24 mars 2020 - 9 mai 2018 à 13:51
Bonjour,
je voudrai résoudre cette équation (k = (2 * (2 * Sqr(k)) - 0.8) ^ -1) par vba mais jarrive pas ; voila ce que jai mis comme code
ce que je voudrais trouver c bien la valeure de k

Sub eqauation()
Dim k As Currency
k = (2 * (2 * Sqr(k)) - 0.8) ^ -1
MsgBox k
End Sub

c qlqun peut m'aider merci

3 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
18 avril 2018 à 17:05
Bonjour,

valeur de K non définie

on pourrait plutôt passer par une fonction
par ex:

Function Calculer_equation(K As Currency)
Calculer_equation = (2 * (2 * Sqr(K)) - 0.8) ^ -1
End Function



1
blalaa Messages postés 167 Date d'inscription mercredi 18 avril 2018 Statut Membre Dernière intervention 24 mars 2020
Modifié le 19 avril 2018 à 09:22
bonjour michel_m

merci pour votre reponse, je viens de lessayer mais ca marche toujours pas
vous avez mis :

Calculer_equation = (2 * (2 * Sqr(K)) - 0.8) ^ -1

alors que

calculer_equation doit prendre la valeur de k

je ne sais pas comment y prendre

si vous pouvez maider ca serrai vraiment genial
merci davence
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié le 19 avril 2018 à 15:00
Re,

modif : passer de currency à double ;o)

petite maquette

Function Calculer_equation(K As Double)
Calculer_equation = (2 * (2 * Sqr(K)) - 0.8) ^ -1
End Function
'-----------------------------------------------------
Sub calculer()
Dim X As Double
X = Range("G2") 'par exemple ( G2 est au format-nombre-currency)
MsgBox Format(Calculer_equation(X), "#,##0.00 $")
End Sub


si X =10 je trouve 0,08€
1
blalaa Messages postés 167 Date d'inscription mercredi 18 avril 2018 Statut Membre Dernière intervention 24 mars 2020
19 avril 2018 à 15:04
Re michel

ca marche tjr pas

au fait c une equation quil faut resoudre par methode iterative(par la calculatrice) , elle a la meme inconue dans les 2 partie de lequation , mais par vba je ne sais pas comment

k = (2 * (2 * Sqr(K)) - 0.8) ^ -1)

on voit bien K de cote droite et de cote gauche
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
20 avril 2018 à 08:25
au fait c une equation quil faut resoudre par methode iterative(par la calculatrice)
Pourquoi ne pas l'avoir précisé au départ ?
0
blalaa Messages postés 167 Date d'inscription mercredi 18 avril 2018 Statut Membre Dernière intervention 24 mars 2020
20 avril 2018 à 09:15
non c pas par calculatrice , c par vba
jai peut etre mal exprime desole et merci
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié le 20 avril 2018 à 09:34
pas grave ! surtout que je ne suis pas un matheux
:o)
0
Bonjour

k = (2 * (2 * Sqr(k)) - 0.8) ^ -1

peut aussi s'ecrire

k= 1/(4*sqr(k)-0.8)
k*(4*sqr(k)-0.8) =1
(k*4*sqr(k))-(0.8*k) =1

avec k > 0 car sqr(k) est toujours positif

avec un programme de type force bute, on fait varier k avec un increment de 0.0001
et on trouve k = 0.4959

Sub test()
Dim k As Currency, r As Currency
k = 0
r = 0
While r <= 1
k = k + 0.0001
r = (k * 4 * Sqr(k)) - (0.8 * k)
Wend
MsgBox ("k = " & Format(k, "0.0000"))
End Sub
1
blalaa Messages postés 167 Date d'inscription mercredi 18 avril 2018 Statut Membre Dernière intervention 24 mars 2020
19 avril 2018 à 15:34
Bonjour
merci bcp effictivement c a marche

au fait je voudrais aussi faire varier le re =2 dans l'example precendent
je vais directement ecrire ce que je veux resourdre, si c possible

1/sqr(k)= (2*log * (re * Sqr(k)) - 0.8)

je ne sais pas si je peux remplacer directement le 2 avec (re) dans le programme qui vous mavez donne (qui marche bien )

si vous pouvez maider vraiment jen ai besoin
merci
0
L'équation n'est pas la même

1/sqr(k) = 2*log(re * Sqr(k)) - 0.8
(2*log(re * Sqr(k)) - 0.8) * sqr(k) = 1

donc cette fois le programme est le suivant ( si j'ai bien interprété l'équation)

Sub test2()
Dim k As Currency, r As Currency
k = 0
r = 0
'--------------------------
Dim re As Double
' entrer une valeur pour re
re = 2
'--------------------------
While r <= 1
k = k + 0.0001
r = (2 * Log(re * Sqr(k)) - 0.8) * Sqr(k)
Wend
MsgBox ("Pour re = " & re & vbCrLf & "k = " & Format(k, "0.0000"))
End Sub


Pour re=2
k=1.3260
0
blalaa Messages postés 167 Date d'inscription mercredi 18 avril 2018 Statut Membre Dernière intervention 24 mars 2020
20 avril 2018 à 09:14
merci beaucoup ca a marche, pour les grnades valeurs par exemple de 10000 il ya une legere erreur mais c pas grave
merci encore
0
Pour plus de précision il faut diminuer le pas
k=k+0.00001 'pour 1/100 000ème

et aussi afficher le resultat au 1/100 000éme
Format(k,"0.00000")

Bonne continuation
0
blalaa Messages postés 167 Date d'inscription mercredi 18 avril 2018 Statut Membre Dernière intervention 24 mars 2020
20 avril 2018 à 11:27
merci pour tout
0