Optimisation d'une fonction
keketheking
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
ed -
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!
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:
- Optimisation d'une fonction
- Optimisation pc - Accueil - Utilitaires
- Fonction si et - Guide
- Optimisation découpe panneau gratuit - Télécharger - Outils professionnels
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
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 !).
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 !).
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
celle ci serait lancer par une macro (ou sous-macro)
sub calculerX parametre1, parametre2, prametre3, etc.
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.