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

Mathématiques Discussion :

ode45 6 équations problème de divergence


Sujet :

Mathématiques

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut ode45 6 équations problème de divergence
    Voici mon prog ci dessous. Quand je le simule il donne des résultats très inattendu. Un défaut de programmation ?
    Il s'agit d'un modèle mécanique a partir d'un moteur assemblé a un arbre dont je veut observé vitesse et position et voir kel parametres l'influence.
    MOn systeme du 1er ordre découle d'un systeme de 3 equations 2nd ordre que j'ai modifié en 6 equations du 1er ordre.Bref ça donne ça:

    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
    % Ma fonction décrivant le systeme
     
    function dy=fun(t,y)
     
    Cm=28;Cr=1;
    Cf1=0.3;Cf2=0.3;Cf3=0.3;
    J1=0.4;J2=1;J3=1;
    K1=1;K2=1;K3=1;
     
    y=zeros(6,1)
    dy=zeros(6,1); 
     
    dy(1) = (K2/J1)*y(4) - (K2/J1)*y(5) + (Cm-Cf1)/J1;
    dy(2) = (K2/J2)*y(4) - (K2+K3)/J2*y(5) + (K3/J2)*y(6) - (Cf2/J2);
    dy(3) = (K3/J3)*y(4) - (-K3/J3)*y(5) - (Cf3+Cr)/J3;
    dy(4) = y(1)
    dy(5) = y(2)
    dy(6) = y(3)
    end
    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
    %******Mon programme principal******
     
    %Declaration de mes constantes
    Cm=28;Cr=1;
    Cf1=0.3;Cf2=0.3;Cf3=0.3;
    J1=0.0033;J2=0.2822;J3=0.2627;
    K2=314855;K3=1228061;
    %Mes conditions initiales
    y0=[0;0;0;0;0;0]
    t0=0,tf=100000;
     
     
    options=odeset('RelTol',1e-4);
    [t,y] = ode45(@fun,[t0,tf], y0,options);
    subplot(211)
    plot(t,y(:,1),'b', t,y(:,2),'r', t,y(:,3),'+',t,y(:,4),'.',t,y(:,5),'g',t,y(:,6),'c')

  2. #2
    Membre confirmé
    Avatar de Dam2227
    Inscrit en
    Juin 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Juin 2007
    Messages : 343
    Points : 487
    Points
    487
    Par défaut
    J'obtiens aussi une divergence quand je fais tourner le prog et il ne me semble pas y avoir d'erreur. Donc il va falloir revenir aux équations pour résoudre le problème. Es-tu sûr que tes équations sont justes?
    Matlab 7.14.0.739 (R2012a)
    C/C++, python, R, SQL, Pig, MR

    Ma philosophie: Ne rien faire, mais le faire bien.

  3. #3
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Voici mon programme ci-dessous. Quand je le simule il donne des résultats très inattendus. Un défaut de programmation ?
    Il s'agit d'un modèle mécanique à partir d'un moteur assemblé à un arbre dont je veux observer la vitesse et la position et voir quel paramètres l'influencent.
    Mon système du 1er ordre découle d'un système de 3 équations second ordre que j'ai modifié en 6 équations du 1er ordre. Bref ça donne ça:

    Indépendamment du langage SMS qui est prohibé sur ce site et des fautes d'orthographe, tes difficultés proviennent d'un problème d'algorithme et non de Matlab. Je transfère donc cette discussion.
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  4. #4
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    Si, à partir d'un certain moment, tes grandeurs semblent augmenter exponentiellement, cela veut probablement dire que ton système est raide (stiff), c'est-à-dire que le processus décrit comporte à la fois des composantes très rapides et des composantes très lentes. Trois origines possibles à cela:
    1. Tu t'es trompé en écrivant tes équations. Alors, vérifie tout.
    2. Tu as modélisé maladroitement ton processus (par exemple en incluant à la fois le transitoire à l'enclenchement et l'échauffement).
    3. Ton problème est vraiment raide et tu ne peux rien y changer.

    Dans les deux premiers cas, tu corriges. Dans le troisième, tu commences par regarder ce qui se passe en diminuant le pas d'intégration. Ensuite, tu utilises un algorithme implicite.
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  5. #5
    Candidat au Club
    Inscrit en
    Juillet 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Mes équations sont bonnes oui, la modélisation aussi est correcte. Si vous me dites que le programme est bon ben c'est à moi de voir.
    Par contre si je veux que mon Cm ( couple moteur) varie tels un signal carré, il devient donc une variable.
    t=0:1:500;
    Cm= 28*square(0.02*t);
    Du coup la ligne : dy(1) = (K2/J1)*y(4) - (K2/J1)*y(5) + (Cm-Cf1)/J1; n'est plus accepté.

  6. #6
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    si je veux que mon Cm ( couple moteur) varie tels un signal carré
    C'est physiquement impossible: le couple moteur est une combinaison linéaire de produits de deux courants, et les courants ne peuvent pas varier brusquement dans un circuit inductif.
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  7. #7
    Candidat au Club
    Inscrit en
    Juillet 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par FR119492 Voir le message
    Salut!

    C'est physiquement impossible: le couple moteur est une combinaison linéaire de produits de deux courants, et les courants ne peuvent pas varier brusquement dans un circuit inductif.
    Jean-Marc Blanc
    Dans la pratique oui, mon couple moteur ne varie jamais de cette façon. Je veux juste voir les grandeurs qui influence la position et la vitesse dans mon modèle, j'ai pris un cas extreme mé c just pour voir. Dans la réalité il va varié plus en trapèze si je peux dire ou de manière exponentielle.
    Bref , j'ai encore d'autres coef variables, comment les définir dans ma fonction??

  8. #8
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    Comme ton système est linéaire, tu peux calculer les valeurs propres de la matrice afin de déterminer s'il est raide.
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/03/2011, 14h45
  2. [C++] problème dans une équation
    Par hamoudasafira dans le forum C++
    Réponses: 6
    Dernier message: 18/01/2007, 16h28
  3. Problème simplification équation booléenne
    Par Metallic-84s dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 09/02/2006, 14h52
  4. Problème d'équations dans l'espace (perspective -> 3D)
    Par Rémiz dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 19/12/2005, 17h43

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