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

Python Discussion :

Soucis avec les arguments d'une fonction


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2016
    Messages : 3
    Par défaut Soucis avec les arguments d'une fonction
    Bonjour à toutes et à tous,

    Voilà j'ai un soucis depuis quelques jours après avoir cherché en long et en large. C'est la première fois que je poste pour un soucis, veuillez m'excuser d'avance pour les erreurs éventuelles.

    Donc l'objectif pour moi c'est de tracer des trajectoires d'un avion paramétré tout bien comme il faut sur un intervalle de temps défini.
    Les points de TRIM sont des points prédéfinis sur lesquels on se base pour tracer nos trajectoires, TRIM = [altitude, vitesse, marge statique, coeff masse]

    Les choses sont découpées ainsi : un module "dynamic" qui regroupe tout un tas de fonctions utiles, un module "utils" avec des outils, le reste est mis à part afin de tracer les trajectoires.


    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
     
    import math, numpy as np, scipy.integrate
    import matplotlib.pyplot as plt
    import pdb
    import dynamics3 as dyn
    import utils as ut
     
    np.set_printoptions(precision=3, suppress=True, linewidth=200)
     
    def get_trim(aircraft, h, Ma, sm, km):
        '''
        Calcul du trim pour un point de vol
        '''
        aircraft.set_mass_and_static_margin(km, sm)
        va = dyn.va_of_mach(Ma, h)
        Xe, Ue = dyn.trim(aircraft, {'va':va, 'h':h, 'gamma':0})
        return Xe, Ue
     
     
    def NonLinearTraj(aircraft, h, Ma, sm, km, Wh, time):
        '''
        Affichage d'une trajectoire avec un point de trim comme condition initiale
        '''
        aircraft.set_mass_and_static_margin(km, sm)
        va = dyn.va_of_mach(Ma, h)
        Xe, Ue = dyn.trim(aircraft, {'va':va, 'h':h, 'gamma':0})
        Xe[dyn.s_a]= Xe[dyn.s_a]+math.atan(Wh/Xe[dyn.s_va])
        X = scipy.integrate.odeint(dyn.dyn, Xe, time, args=(Ue, aircraft))
        return X
     
    def LinearDyn(X, t, U, A, B):
        return np.dot(A,X) + np.dot(B,U)
     
     
    def LinearTraj(aircraft, h, Ma, sm, km, Wh, time):
        '''
        Calcul d'une trajectoire avec un point de trim comme condition initiale
        '''
        aircraft.set_mass_and_static_margin(km, sm)
        va = dyn.va_of_mach(Ma, h)
        Xe, Ue = dyn.trim(aircraft, {'va':va, 'h':h, 'gamma':0})
        A, B = ut.num_jacobian(Xe, Ue, aircraft, dyn.dyn)
        dX0 = np.zeros(dyn.s_size)
        dU = np.zeros(dyn.i_size)
        dX0[dyn.s_a] = math.atan(Wh/Xe[dyn.s_va]) #perturbation
        dX = scipy.integrate.odeint(LinearDyn, dX0, time, args=(dU, A, B))
        Xlin = np.array([dXi+Xe for dXi in dX])
        return Xlin
     
    def get_linearized_model(aircraft, h, Ma, sm, km):
        aircraft.set_mass_and_static_margin(km, sm)
        va = dyn.va_of_mach(Ma, h)
        Xe, Ue = dyn.trim(aircraft, {'va':va, 'h':h, 'gamma':0})
        A, B = ut.num_jacobian(Xe, Ue, aircraft, dyn.dyn)
        print('poles dim6', np.linalg.eig(A))
        Al, Bl = A[dyn.s_va:, dyn.s_va:], B[dyn.s_va:, :dyn.i_wy]
        poles, vect_p = np.linalg.eig(Al)
        return Al, Bl, poles, vect_p
     
     
    # division selon puissances croissantes
    def div_inc_pow(num, den, order):
        rnum =  np.zeros(len(den))
        for i in range(0,len(num)): rnum[i] = num[-i-1]
        rden = den[::-1]
        res = np.zeros(order)
        for i in range(0, order):
            quot, rem = np.polydiv(rnum, rden)
            res[i], rnum = quot, np.zeros(len(den))
            for i in range(0,len(rem)):
                rnum[i] = rem[i]
        return res[::-1]
     
     
     
    #------------------------
    aircraft = dyn.Param_A320()
     
    def run_trajecotry(time, h, Ma, ms, km, Wh=2):
        Xe, Ue =  get_trim(aircraft, h, Ma, ms, km)
        fmt = r'Trim: h={:.1f}, Ma={:.1f}, ms={:.1f}, km={:.1f} -> $\alpha$={:.1f}, $\delta_{{PHR}}$={:.1f}, $\delta_{{th}}$={:.1f}'
        print(fmt.format(h, Ma, ms, km, ut.rad_of_deg(Xe[dyn.s_a]), ut.rad_of_deg(Ue[dyn.i_dm]), Ue[dyn.i_dth]))
        X = NonLinearTraj(aircraft, h, Ma, ms, km, Wh, time)
        Xlin = LinearTraj(aircraft, h, Ma, ms, km, Wh, time)
        figure = dyn.plot(time, X)
        dyn.plot(time, Xlin, figure=figure)
        plt.legend(['non lineaire', 'lineaire'])
     
    h, Ma, ms, km = 3000, 0.5, 0.2, 0.1
     
    run_trajecotry(np.arange(0, 10, 0.1), h, Ma, ms, km, Wh=2)
    run_trajecotry(np.arange(0, 240, 0.1), h, Ma, ms, km, Wh=2)
    En pièce jointe je laisse le module dynamic et utils qui sont appelés par ce code, donc à placer dans le même dossier.

    Le soucis c'est que je vois aucunes erreurs, et quand je lance mes trajectoires sur 10 et 240s bah j'ai une vieille erreur que j'arrive pas à vraiment analyser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Traceback (most recent call last):
      File "C:/Users/moi s3.py", line 90, in <module>
        run_trajecotry(np.arange(0, 10, 0.1), h, Ma, ms, km, Wh=2)
      File "C:/Users/moi s3.py", line 82, in run_trajecotry
        X = NonLinearTraj(aircraft, h, Ma, ms, km, Wh, time)
      File "C:/Users/moi s3.py", line 27, in NonLinearTraj
        X = scipy.integrate.odeint(dyn.dyn, Xe, time, args=(Ue, aircraft))
      File "C:\Python27\lib\site-packages\scipy\integrate\odepack.py", line 215, in odeint
        ixpr, mxstep, mxhnil, mxordn, mxords)
    TypeError: dyn() takes exactly 3 arguments (4 given)
    Voilà, si vous avez une idée hésitez pas !

    Merci

    dynamics3.py

    utils.py

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Salut,

    Citation Envoyé par SRV33 Voir le message
    Voilà j'ai un soucis depuis quelques jours après avoir cherché en long et en large. C'est la première fois que je poste pour un soucis, veuillez m'excuser d'avance pour les erreurs éventuelles.
    Pas sûr que quelqu'un prennent le temps de comprendre votre code.
    Donc, pour ce qui est de l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TypeError: dyn() takes exactly 3 arguments (4 given)
    Vous avez probablement compris qu'elle est provoquée par cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    X = scipy.integrate.odeint(dyn.dyn, Xe, time, args=(Ue, aircraft))
    Et si vous relisez la documentation de scipy.integrate.odeint, elle va effectuer des appels dyn.dyn(time, Xe, Ue, aircraft).
    Ce qui fait bien 4 arguments. Alors que la fonction dyn de dynamics3.py n'en prend que 3:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def dyn(X, U, P):
        '''  Dynamic model '''
        ...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2016
    Messages : 3
    Par défaut
    Tout d'abord, merci pour votre réponse. J'ai pu corriger ce problème en partie en tout cas.
    Je n'ai plus d'erreurs sur le nombre d'arguments de la fonction dyn(X, t, U, P).

    Le problème c'est qu'il ne m'affiche pas mes trajectoires, il me retourne rien mis à part un "print" des points de TRIM. Mes deux run_trajectory sur 10 et 240s renvoient rien pourtant ils devraient plotter quelque chose vu qu'il n'y a plus d'erreurs sur dyn...

    Une autre chose : le module control.matlab, ils s'installe comment sur W10 ? J'ai téléchargé control-0.7.0, dézipper, j'obtiens un dossier avec un setup.py. Je lance un terminal, je me place dans le dossier dézippé, et je lance "python setup.py install" mais ça donne rien... J'avais pas eu de soucis avec numpy, scipy et matplotlib mais je crois l'avoir fait avec pip à l'époque.

    Voilà

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Salut,

    Citation Envoyé par SRV33 Voir le message
    Le problème c'est qu'il ne m'affiche pas mes trajectoires, il me retourne rien mis à part un "print" des points de TRIM. Mes deux run_trajectory sur 10 et 240s renvoient rien pourtant ils devraient plotter quelque chose vu qu'il n'y a plus d'erreurs sur dyn...
    Peut être que vous avez un soucis dans la logique de ce que fait ce code... mais pas le temps d'essayer de comprendre ce que vous essayez de faire à partir du code que vous avez posté et pour m'assurer que cela a été raisonnablement codé.

    Citation Envoyé par SRV33 Voir le message
    Une autre chose : le module control.matlab, ils s'installe comment sur W10 ? J'ai téléchargé control-0.7.0, dézipper, j'obtiens un dossier avec un setup.py. Je lance un terminal, je me place dans le dossier dézippé, et je lance "python setup.py install" mais ça donne rien... J'avais pas eu de soucis avec numpy, scipy et matplotlib mais je crois l'avoir fait avec pip à l'époque.
    Il faut commencer par lire les instructions d'installation ou attendre le retour d'expérience que voudra bien partager une personne qui aura installé cette bibliothèque là.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2016
    Messages : 3
    Par défaut
    Bon, merci quand même d'avoir essayé de m'aider, je vais chercher par moi-même.

    mais pas le temps d'essayer de comprendre ce que vous essayez de faire
    C'est pas une épreuve notée en temps limitée ce que je propose, loin de là...
    Ce que j'essaie de faire est assez simple en soit : afficher des trajectoires sur 10 et 240s d'un modèle dynamique linéarisé au préalable autour d'un point de TRIM.

    Allez, si un soir vous ne trouvez pas le sommeil : https://en.wikipedia.org/wiki/Longit...atic_stability

    Je posterai d'ici là la solution à mes problèmes pour ceux que ça intéressent.

    Bonne soirée et merci encore.

    SRV

Discussions similaires

  1. Réponses: 4
    Dernier message: 14/03/2009, 19h56
  2. [RegEx] Récupérer les arguments d'une fonction
    Par brunoperel dans le forum Langage
    Réponses: 2
    Dernier message: 29/07/2008, 19h46
  3. Connaitre les arguments d'une fonction d'une DLL
    Par dhoorens dans le forum C++
    Réponses: 3
    Dernier message: 26/03/2008, 15h49
  4. [Langage][Classe][Methode]Comment récuperer les arguments d'une fonction ?
    Par FremyCompany dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/07/2006, 16h06
  5. [VBA-E] Lister les arguments d'une fonction
    Par laloune dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/02/2006, 12h04

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