Optimisation d'une fonction

Fermé
keketheking Messages postés 2 Date d'inscription jeudi 22 octobre 2009 Statut Membre Dernière intervention 24 octobre 2009 - 22 oct. 2009 à 08:32
 ed - 25 oct. 2009 à 01:13
Bonjour,

Voila mon problème:

Afin d'optimiser des dentures d'engrenages, je dois calculer 2 coefficients gs1 et gs2. Ces deux termes doivent être les plus proches possibles mais aussi les plus petits possibles. Or ils dépendent tous les deux de paramètres X1 et X2 et de données du tableur (alpha, beta, Z1, ...).

Je cherche à obtenir X1 et X2 sous VBExcel, sachant que l'exoression de gs1 et gs2 en fonction de X1 et X2 n'est pas immédiate:

Function TrouveX(alpha As Double, beta As Double, Z1 As Double, Z2 As Double, m As Double, r1 As Double, r2 As Double) As Double

alphat = Atn(tan(alpha) / Cos(beta))
rb1 = r1 * Cos(alphat)
alphapt = Angle(Involute(alphat) + 2 * ((X1 + X2) / (Z1 + Z2)) * tan(alpha)) ' pour denture extérieure
Delta = Cos(alphat) / Cos(alphapt)
rp1 = (m * Z1 * Delta) / 2
k = 0.5 * (Z2 + Z1) * (1 - Delta) / Cos(beta) + (X1 + X2) ' pour denture extérieure
ha1 = m * (1 + X1 - k) ' pour denture extérieure
ra1 = r1 + ha1
T1t1 = (ra1 ^ 2 - rb1 ^ 2) ^ (1 / 2)
It1 = (ra1 ^ 2 - rb1 ^ 2) ^ (1 / 2) - rp1 * Sin(alphat)
T2t1 = r2 * Sin(alphapt) - (ra1 ^ 2 - rb1 ^ 2) ^ (1 / 2) + rp1 * Sin(alphat) 'a verifier
gs1 = ((Z1 - Z2) * It1) / (Z2 * T1t1)
gs2 = ((Z1 - Z2) * It1) / (Z2 * T2t1)

Merci d'avance por votre aide, c'est assez urgent!
A voir également:

2 réponses

Bonjour,

Raisonnons un peu sur le fond plutôt que sur la forme :

Tu as en fait un système d'équations à résoudre si je ne m'abuse ? Tes 4 inconnues sont X1, X2, gs1 et gs2.
De plus ce système n'est pas linéaire (enfin je crois : tu as X1 et X2 dans Angle(...)), il convient donc d'écrire un algorithme de résolution autre que du type Gauss-Seidel contenu dans Excel (cf "Référence circulaire").

Pour ça je te renvoie soit à matlab/scilab avec directement la fonction fsolve, soit à tes cours pour écrire un petit Newton-Raphson en dérivant ton expression (ça ne casse pas trois pattes à un canard, ni la b*** à un eunuque !).
1
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 306
22 oct. 2009 à 10:18
Bonjour,

Une fonction ne renvoie qu'une seule valeur ici trouveX
en général, vers la fin de ta fonction tu as
trouveX=tes calculs...

tu pourrais contourner le pb en utilisant une procédure paramétrée du genre
sub TrouveX(alpha As Double, beta As Double, Z1 As Double, Z2 As Double, m As Double, r1 As Double, r2 As Double) As Double 


celle ci serait lancer par une macro (ou sous-macro)

sub calculerX parametre1, parametre2, prametre3, etc.
0
keketheking Messages postés 2 Date d'inscription jeudi 22 octobre 2009 Statut Membre Dernière intervention 24 octobre 2009
24 oct. 2009 à 14:10
Quelle méthode suggères-tu pour trouver les valeurs optimales de X1 et X2? Et dois-je écrire la relation liant gs1 et gs2 à X1 et X2 directement, ou mettre les calculs intermédiaires suffit il?

Merci d'avance
0