IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Exploitation aero map: Extrapolation de valeur, Newton Raphson?


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Par défaut Exploitation aero map: Extrapolation de valeur, Newton Raphson?
    Bonjour à tous,

    Je vais bientôt commencer un projet qui devrais m'aider dans la compétition automobile.

    Cela concerne l'exploitation d'une aeromap.

    En synthèse:
    Grâce aux divers éléments aero qui composent une voiture de course, ceux lui procure un appuie et une trainée aérodynamique. Celà se gère avec l'incidence de ces différents éléments, mais pas seulement...
    Avec l'appuie aérodynamique généré sur les trains avant et arrière d'une voiture celle-ci s’affaisse. Cette affaissement à alors pour effet, entre autre... de modifier l'effet de sol, qui alors augmente l'appuie aéro, qui affaissera d'autant plus la voiture, dont l'effet de sol sera alors encore modifier....bref jusqu'à équilibre entre l'appuie aéro et la raideur de la suspension.

    Donc, en dehors des réglages sur aileron, l'appuie aero dépend de:
    -la garde au sol
    -l'assiette de l'auto (différence entre la garde au sol avant et arrière, qui font que l'auto cabre ou plonge)
    -La vitesse de l'auto

    Pour utiliser celà, les ingénieurs utilisent des aéromap (tableau double entrée):

    Sur la 1er colonne on met 5 ou 6 valeurs discrètes de garde au sol avant, et sur le Première ligne quelques valeur discrète de la garde au sol arrière.

    Le tableau lui est remplie avec les coefficients d’appuis aéro (indépendant de la vitesse).

    Ensuite le but du jeu:
    L'utilisateur entre les données aéro qu'il possèdent (le nombre de valeur de garde au sol avant et arrière peuvent varier) .
    Ensuite le logiciel doit être capable de donner la vrai garde au sol dynamique (en fonction de la vitesse) ainsi que l'appuie généré.

    Alors maintenant le truc c'est que je ne suis qu'un débutant en programmation, et que j'aurais besoin d'aide pour me guider. Je sais que je vais avoir a récupérer des donné d'un tableau à taille variable (j'ai peut être une idée), qu'il devrait me falloir 2 boucles. Mais surtout je vais avoir besoin d'extrapoler les valeur prisent par les coefficients d'appui entre deux valeur de garde au sol (et non pas au delà des garde au sol max ou min)

    Dois-je approximer les valeurs du tableau par une fonction mathématique 2D genre f(x,y), employer du newton raphson pour converger vers la solution....?

    Maintenant si vous m'avez lu jusqu'ici c'est que vous voulez m'aider et je vous en remercie d'avance.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert

    Homme Profil pro
    Technicien Métrologie R&D
    Inscrit en
    Janvier 2007
    Messages
    1 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Métrologie R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 610
    Billets dans le blog
    1
    Par défaut
    je pense que ta question contient sa réponse
    tu parles d'une table à double entrée
    dans Excel il y a une fonction table avec double entrée
    le problème : je me sers lorsque je suis sous 2007 de Ubitmenu ( ceci rajoutes un onglet menu dans Excel 2007 ou l'on retrouve les menus de 2003 )
    je ne sais pas ou ça se trouve dans 2007 . même si c'est gourmand en ressources (ceci va dépendre de ta config chez moi une grosse table met le pc à genoux ) mais tu à un zone ou se situe ta table avec sa ligne d'entrée et sa colonne
    il y a demande de la cellule d'entrée en ligne puis en colonne et dans la première cellule la formule à déployée se référent aux cellules d'entrées . la table se rempli de ={table}
    sachant que tu peut également mettre des formule dans la ligne et la colonne d'entrée un exemple de ce qui est possible en peu de temps
    Fichiers attachés Fichiers attachés

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Par défaut
    Bonjour Daranc,

    Avec le post précédent j'ai du paraître plus brillant que je ne le suis.

    Je n'ai pas compris grand chose à ton exemple.

    Aussi, Newton Raphson, je dis çà de tête mais pour le faire...je vais chercher sur les forum voir ce qu'il y a la dessus.

    Merci pour ta réponse

    J'ajoute un exemple d'aero map

    Mais peut on faire du newton raphson avec vba? je ne trouve aucune discussion là dessus.
    Fichiers attachés Fichiers attachés

  4. #4
    Membre Expert

    Homme Profil pro
    Technicien Métrologie R&D
    Inscrit en
    Janvier 2007
    Messages
    1 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Métrologie R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 610
    Billets dans le blog
    1
    Par défaut
    Et tu n'as aucune formule de calcul qui joue dessus ?
    ( je ne comprends strictement rie à l'anglais .. j'ai déjà du mal avec le français régional)

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Par défaut
    L'appuie aero c'est:

    Fz[N]=0.5*1.2255*surface[m²]*Coeff appui*Vitesse²[m/s]

    Mais c'est pour montrer le tableau, il me faut une fonction qui le représente, afin d'avoir un coef d'appui avant et arrière quelque soit la garde au sol.

    Si à l'avant j'ai 16,8876mm et à l'arrière 23,879mm quel sont les coeff d'appui avant et arrière?

  6. #6
    Membre Expert

    Homme Profil pro
    Technicien Métrologie R&D
    Inscrit en
    Janvier 2007
    Messages
    1 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Métrologie R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 610
    Billets dans le blog
    1
    Par défaut
    et les tableaux de garde au sol ils servent à quoi dans cette formule? ils représentent quoi exactement ?

  7. #7
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Par défaut
    Les coefficients d’appui aéro dépendent de la garde au sol.

    En 1ere ligne et 1ere colonne figurent ces gardes au sol, et dans le tableau les coefficients d’appui aero sur l'avant ou l'arrière mais pas les deux à la fois.

    Car plus la voiture est près du sol, plus il y a un "effet de sol", et plus le chassis plonge vers l'avant plus l'incidence des ailerons augmente....

    Un ami m'a parlé de l'objet "gridview" dans vb.net, çà ressemble au fichier que tu m'a fourni.
    Tu connais? est ce la même chose?

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 141
    Par défaut Excel VBA Ride Height Reflection
    Citation Envoyé par Gualino Voir le message
    l'objet "gridview" dans vb.net
    Comme on est dans le forum Excel VBA, autant utiliser les cellules de la feuille de calcul déjà fournie.

    Citation Envoyé par Gualino Voir le message
    récupérer des données d'un tableau à taille variable (j'ai peut être une idée), qu'il devrait me falloir 2 boucles.
    1. Décrire la feuille Excel avec des constantes nommées

    Le but est d'identifier les paramètres d'entrée du problème et ce qu'il faut générer.

    Dans le Visual Basic Editor (VBE) (Alt+F11) d'Excel, cliquez sur le menu "Insérer" > "Module".
    Dans les propriétés du module créé, renommer "Module1" en "ModAero" ou "ModRhd" (Ride Height Reflection) ou le nom que vous voulez.

    Dans la fenêtre d'édition du module ModAero, faire un copier-coller :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    Option Explicit
    Public Const indFrnt = 0
    Public Const indRear = 1
    Public Const indPlaceMax = indRear
     
    Public Const rowCoeffFront = 36 ' Input
    Public Const rowCoeffRear = 47
     
    Public Const colCoeff = 2
     
    Public Const nbrGcFront = 7 ' Front Ground Clearance
    Public Const nbrGcRear = 9 ' Rear Ground Clearance
    Public Const groundClearanceIncr = 5
     
    Public Const rowDeflectFront = 90 ' Output
    Public Const rowDeflectRear = 101
    Public Const nbrDeflect = 9
     
    Public Const colDeflect = 1
    Public Const colRideHeight = colDeflect + 1
    Public Const colSpeedMax = colDeflect + 50
     
    Public Const speedMax = 400
    Public Const speedIncr = 10
    Public Const deflectionDelta = -5
     
    Public arrCoef(indPlaceMax, nbrGcFront, nbrGcRear) As Double
     
    Public Sub RideHeightDeflection()
        Application.ScreenUpdating = False
        RhdCoef
        RhdClear
        RhdDraw RhdBuild()
        Application.ScreenUpdating = True
    End Sub
     
    Public Sub RhdCoef()
    Dim indRow As Integer, indCol As Integer
    Dim indGcFront As Integer, indGcRear As Integer, indPlace As Integer
     
        For indGcFront = 0 To nbrGcFront - 1
            For indGcRear = 0 To nbrGcRear - 1
                indCol = indGcRear + colCoeff
                For indPlace = indFrnt To indRear
                    indRow = IIf(indPlace = indFrnt, rowCoeffFront, rowCoeffRear) + indGcFront
                    arrCoef(indPlace, indGcFront, indGcRear) = Cells(indRow, indCol)
                Next
            Next
        Next
    End Sub
     
    Public Sub RhdClear()
    Dim indPlace As Integer, rowRhd As Integer
     
        For indPlace = indFrnt To indRear
            rowRhd = IIf(indPlace = indFrnt, rowDeflectFront, rowDeflectRear)
            Range(Cells(rowRhd - 1, colDeflect), _
                  Cells(rowRhd + nbrDeflect, colDeflect + colSpeedMax)).ClearContents
        Next
    End Sub
     
    Public Sub RhdSpeed(ByVal rowRhd As Integer)
    Dim indSpeed As Integer, indCol As Integer
     
        indCol = colRideHeight
        For indSpeed = 0 To speedMax Step speedIncr
            Cells(rowRhd - 1, indCol) = indSpeed ' Speed (km/h)
            indCol = indCol + 1
        Next
    End Sub
     
    Public Function RhdBuild() As Integer
    Dim indPlace As Integer, indDeflect As Integer, indSpeed As Integer
    Dim indRow As Integer, indCol As Integer, rowRhd As Integer ' Ride Height Deflection
     
        For indPlace = indFrnt To indRear
            rowRhd = IIf(indPlace = indFrnt, rowDeflectFront, rowDeflectRear)
            RhdSpeed rowRhd
            For indDeflect = 0 To nbrDeflect - 1
                indRow = rowRhd + indDeflect
                Cells(indRow, colDeflect) = indDeflect * deflectionDelta ' Deflection (mm)
                indCol = colRideHeight
                For indSpeed = 0 To speedMax Step speedIncr
                    Cells(indRow, indCol) = RhdExtra(indPlace, indDeflect, indSpeed)
                    indCol = indCol + 1
                Next
            Next
        Next
        RhdBuild = indCol - 1 ' Max of column of speed
    End Function
     
    ' Extrapolation based on coeff
    Public Function RhdExtra(ByVal indPlace As Integer, ByVal indDeflect As Integer, ByVal indSpeed As Integer) As Double
    Const rhdAero = -0.5 * 1.2255
    Const surface = 1 / 5235
    Dim indGcFront As Integer, indGcRear As Integer
     
        indGcFront = IIf(indDeflect < nbrGcFront, indDeflect, nbrGcFront - 1)
        indGcRear = (indDeflect * groundClearanceIncr) \ groundClearanceIncr
        RhdExtra = rhdAero * surface * arrCoef(indPlace, indGcFront, indGcRear) * indSpeed * indSpeed
     
    End Function
     
    ' Draw the curve of the Ride Height Deflection both Front & Rear
    Public Sub RhdDraw(ByVal indColMax As Integer)
    Dim indPlace As Integer, rowRhd As Integer
     
        For indPlace = indFrnt To indRear
            rowRhd = IIf(indPlace = indFrnt, rowDeflectFront, rowDeflectRear)
            ' draw the curve
        Next
    End Sub
    Après la dernière constante deflectionDelta, on a déclaré le tableau global arrCoef de coefficient ayant le préfix "arr" comme array. Il a trois dimensions pour gérer dans une seule structure la vision Front & Rear des deux tableaux 2D Front/Read Ground Clearance.

    2. RideHeightDeflection()

    Le programme principal RideHeightDeflection() réalise les quatre actions suivantes :

    • RhdCoef() lit les coefficients,
    • RhdClear() efface préventivement la zone d'affichage des tableaux générés,
    • RhdBuild() construit les tableaux Front et Rear concernant Ride Height Reflection (Rhd),
    • RhdDraw() dessinera les courbes correspondantes.



    3. RhdCoef() lit les coefficients d'appui

    Lecture des coefficients d'appui avec RhdCoef()
    Si les tableaux sont de tailles variables, il faudra améliorer l'algorithme.

    Dans la fenêtre d'Exécution immédiate (Ctrl+G) du VBE d'Excel, lancez la lecture des coefficients :
    Interrogez les valeurs aux bornes du tableau de coefficient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ? arrCoef(indFront, 0, 0)
    1,635
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ? arrCoef(indFront, nbrGcFront - 1, nbrGcRear - 1)
    1,202
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ? arrCoef(indRear, 0, 0)
    2,136
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ? arrCoef(indRear, nbrGcFront - 1, nbrGcRear - 1)
    1,906

    4. RhdClear() efface la zone des tableaux résultats

    Avant d'écrire dans une zone de cellules de la feuille de calcul, il faut toujours prévoir comment l'effacer.

    5. RhdBuild() génère les deux tableaux résultats

    RhdSpeed() affiche en colonne les vitesses du bolide.
    RhdBuild() construit les deux tableaux résultats.

    6. RhdDraw() dessinera les deux courbes résultats

    Notez que RhdDraw() demande comme paramètre la colonne maximum de la vitesse la plus élevée calculée par RhdBuild().

    L'affichage des deux courbes sera à faire en intégrant et en optimisant le code généré par l'enregistreur de macro d'Excel quand on transforme les deux tableaux de données en graphique.

    7. Extrapolation

    Citation Envoyé par Gualino Voir le message
    extrapoler les valeur prisent par les coefficients d'appui entre deux valeurs de garde au sol (et non pas au delà des garde au sol max ou min)
    Bien évidemment l'extra-extrapolation dans RhdExtra() n'a pour but que de remplir le tableau avec des valeurs plus ou moins aléatoires d'où par exemple la fonction neutre concernant l'index Ground Clearance Rear indGcRear = (indDeflect * groundClearanceIncr) \ groundClearanceIncr

    Il reste bien sûr à faire évoluer cette Function avec votre propre valeur ajoutée en mettant au point ce programme dans l'éditeur et le débogueur de VBA !

    Dans la fenêtre d'Exécution immédiate (Ctrl+G) du VBE d'Excel :

    1. Relire les coefficients si nécessaire.
    2. Lancez la construction des tableaux résultats :
    42
    C'est la colonne maximum de la vitesse 400 km/h.

    Excel menu "Outils" > "Options" > onglet "General"
    [x] R1C1 reference style
    Cochez l'option de style de référence des cellules R1C1 pour retrouver plus facilement la colonne 42.

    Dans le feuille de calcul, scroller verticalement sous le graphique exemple.
    Les deux tableaux Front et Rear (0 à -40 Deflection en rangée et 0 à 400 km/h en colonne) ont été affichés.
    ____________

    En conclusion, le module ModAreo en Excel VBA est un point de départ pour votre projet.

  9. #9
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Par défaut
    Wowowowowowow,

    Je demande des conseils et vous faites tout le boulot à ma place....Je suis vraiment impressionné de la générosité des programmeurs....

    Merci Mattchess, il va me falloir quelque minute pour interpréter le code.

    MattChess,

    Dans l’immédiat je suis sur une autre macro, mais très vite je me plonge dans ce code.

  10. #10
    Membre Expert

    Homme Profil pro
    Technicien Métrologie R&D
    Inscrit en
    Janvier 2007
    Messages
    1 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Métrologie R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 610
    Billets dans le blog
    1
    Par défaut
    MattChess,
    Chapeau pour la résolution
    pour ma part je n'ai toujours pas compris la question

Discussions similaires

  1. Trier une Map sur les valeurs de façon décroissante
    Par ddams dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 27/12/2011, 18h33
  2. [Généricité] Map, lien clé/valeur
    Par Blackseb dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 21/02/2008, 16h39
  3. Utilisation Newton-Raphson pour resoudre une equation
    Par laila_china dans le forum MATLAB
    Réponses: 1
    Dernier message: 13/11/2007, 12h43
  4. algorihme de newton raphson
    Par maroueneo dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 13/04/2007, 13h46
  5. Trier un std::map selon les valeurs plutot que les clés
    Par dj.motte dans le forum SL & STL
    Réponses: 2
    Dernier message: 13/11/2004, 21h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo