Optimisation d'une fonction

keketheking Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
 ed -
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

ed
 
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 315
 
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   Statut Membre Dernière intervention  
 
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