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

Scilab Discussion :

Résolution d'un système d'équations différentielles


Sujet :

Scilab

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur développement de composants
    Inscrit en
    Mai 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : Ingénieur développement de composants
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2016
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Résolution d'un système d'équations différentielles
    Bonjour,
    Je suis en train de résoudre (ou bien, essayer de..) ce système
    Nom : 2.JPG
Affichages : 997
Taille : 20,1 Ko

    a(t) est une fonction gaussienne qui décrit les ‘inputs’ du système
    Nom : 1.jpg
Affichages : 602
Taille : 29,2 Ko

    J’ai fait comme ç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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    function dx=f(t, x, a)
        dx (1) = a(t) - Pgamma*x(2)*(1-R) // dg/dt
        dx (2) = x(3) - Pbeta*x(2) // di/dt
        dx (3) = Pdelta*x(1) - Peta*x(1)^2 // dq/dt
    endfunction
    function [res]=a(t)
        inter = 2; 
        larg = 1; 
        haut = 220; 
        res = zeros(1,length(t))
        for i=1:length(t)
     
            if modulo(t(i),inter)<=larg/2 | modulo(t(i),inter)>=inter-larg/2 then
                if modulo(t(i),inter)>=inter-larg/2 then
                        x = modulo(t(i),inter) - (inter-larg/2);
                elseif modulo(t(i),inter)<=larg/2
                        x = modulo(t(i),inter) + larg/2;
                end
                res(i) = haut*exp(-(x-larg/2)^2/(larg/(24)));
            else
                res(i) = 0;
            end
        end
    endfunction
    Pgamma = 1.82; 
    Pbeta = 1/25; 
    Peta = 1.05; 
    Pdelta = 90*Peta; 
    R = 0;
    X0=[90;25;1]; //[g0;i0;q0]
    t0=0;
    t=0:0.005:3; 
    x=ode(X0,t0,t,f)
    Mais je reçois une erreur, qui disparait si j’enlève le terme au carré de la troisième équation:
    lsoda--  at t (=r1), mxstep (=i1) steps   
    needed before reaching tout
          where i1 is :        500                                                  
          where r1 is :   0.1132577023323D+01      

    Est-ce-que quelqu’un a des suggestions ?

    Merci beaucoup

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut Résolution d'un système d'équations différentielles
    Bonjour,
    Une idée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     dx (3) = Pdelta*x(1) - Peta*x(1)*x(1)) // dq/dt

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur développement de composants
    Inscrit en
    Mai 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : Ingénieur développement de composants
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2016
    Messages : 3
    Points : 1
    Points
    1
    Par défaut J'avais essayé
    Citation Envoyé par phryte Voir le message
    Bonjour,
    Une idée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     dx (3) = Pdelta*x(1) - Peta*x(1)*x(1)) // dq/dt
    Bonjour,
    J'avais essayé mais ça ne change rien. J'ai aussi essayé d'utiliser une fonction externe, mais ça ne change rien non plus...

    Par contre j'ai noté que ce n'est pas un problème lié au carré: en enlevant, par exemple, le dernier terme dans la première équation, j'ai un résultat (pas correct, mais je n'ai pas d'erreur).

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut Résolution d'un système d'équations différentielles
    Limite de fonctionnement :

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur développement de composants
    Inscrit en
    Mai 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : Ingénieur développement de composants
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2016
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Explication
    Citation Envoyé par phryte Voir le message
    Limite de fonctionnement :
    Pourquoi? Ça vient de où?
    Excuse-moi pour la question naïf...

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Bonjour,
    Le problème vient de l'initialisation du maximum d'itérations des calculs à 500 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    odeoptions = [1,0,0,%inf,0,2,500,12,5,0,-1,-1]
    Je n'ai pas réussi à forcer davantage.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2016
    Messages : 6
    Points : 8
    Points
    8
    Par défaut
    Le problème ne vient pas de scilab mais du problème considéré. Dans la solution la 3ième fonction "explose" au-delà de t=1 , trace le graphe pour vérifier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // je ne modifie que les dernières lignes du code
    t=0:0.005:1; // limiter t<=1
    x=ode(X0,t0,t,f);// résoudre
    plot(t,x(1,:),'-r',t,x(2,:),'-b',t,x(3,:),'-g')// afficher les graphes
    la courbe en vert atteint déjà des valeurs de l'ordre de 10^7 pour t=1

Discussions similaires

  1. Résolution de systèmes d'équations différentielles
    Par wajdibelhaj dans le forum MATLAB
    Réponses: 0
    Dernier message: 08/04/2014, 03h35
  2. Réponses: 10
    Dernier message: 14/02/2012, 13h33
  3. Résolution d'un système d'équations différentielles
    Par dptmt dans le forum Mathématiques
    Réponses: 1
    Dernier message: 04/05/2011, 14h04
  4. [Débutant] résolution d'un système d'équation différentielle, schéma implicite
    Par autocadNUL dans le forum MATLAB
    Réponses: 6
    Dernier message: 20/04/2011, 16h43
  5. Réponses: 0
    Dernier message: 06/04/2010, 06h02

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