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

MATLAB Discussion :

ODE avec event - "stiff problem"


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut ODE avec event - "stiff problem"
    Bonjour à tous,

    Je suis doctorant dans un labo du CNRS et on m'a envoyé vers ce forum ("ils sont très fort") pour résoudre mon problème:

    je dois résoudre une équation (image attachée) d'un oscillateur amorti dont les les coefficients sont définis par parties. Celà créé un problème "stiff" qu'ode (toutes versions) n'arrive pas à résoudre.

    La doc de Matlab semble indiquer l'utilisation d'évenements pour détecter le passage z > 1 mais les 2 exemples fournis me semblent trop obscurs...

    J'espère que vous pourrez m'aider !
    Images attachées Images attachées  

  2. #2
    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!
    A mon avis, il y a une erreur dans ta dernière équation: pourquoi la dérivée seconde de Y?
    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)

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    c'est une mauvaise écriture: sous matlab je ne tape que Yo*cos(w*t), il se trouve que c'est l'expression d'une accélération.

  4. #4
    Futur Membre du Club
    Profil pro
    Responsable des études
    Inscrit en
    Juin 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2010
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    j'ai le même problème (enfin je pense), je souhaite simuler un panneau solaire thermique en cherchant à déterminer la température dans chaque élément. Après un bilan d'énergie dans chaque élément, j'obtiens un système de 16 équations différentielles du premier ordre.

    La résolution avec ode45 me retourne des solutions de type NaN+NaNi et celle avec ode15s me renvoie les deux avertissement suivants :
    -Warning: Matrix is singular, close to singular or badly scaled.
    Results may be inaccurate. RCOND = NaN.
    -Warning: Failure at t=0.000000e+00. Unable to meet integration tolerances without reducing the step size below the smallest value allowed (7.905050e-323) at time t.
    et ne pas de solution du tout...

    Merci d'avance pour vos idées...

  5. #5
    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
    Bonjour à vous deux (et aux autres)!
    Il est souvent difficile de dépanner des intervenants comme vous parce qu'ils ne décrivent leur problème que d'une manière très incomplète. Pour vous aider efficacement, il est essentiel de savoir
    • ce que vous connaissez (les données du problème);
    • ce que vous cherchez;
    • les méthodes que vous envisagez d'utiliser.

    Alors, j'essaie de reformuler le problème d'amorgos88, qui est le moins mal posé des deux:
    On a une plaque rectangulaire constituée de 16 éléments (4 * 4) également rectangulaires. Cette plaque reçoit un flux de chaleur dont la densité uniforme est connue. On connait également l'épaisseur (probablement faible) de la plaque, ainsi que la conductivité thermique et la chaleur spécifique du matériau qui la constitue. On veut calculer, en fonction du temps, l'élévation de température de chaque élément. Pour cela, on a essayé de résoudre l'équation de Fourier en combinant la méthode des différences finies (pour les variables d'espace) avec une intégration pas par pas (pour la dépendance du temps). L'intégration se plante pour une raison de système plus que raide.
    Si vous reformulez chacun votre problème en suivant le modèle que je vous ai donné ci-dessus, je pense que je pourrai vous aider.
    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)

  6. #6
    Futur Membre du Club
    Profil pro
    Responsable des études
    Inscrit en
    Juin 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2010
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Bonjour,
    et merci du temps que vous passez à dépanner les gens comme nous, c'est vraiment appréciable de trouver un peu d'aide.

    Je vais essayer de reformuler mon problème : je travaille dans une entreprise qui souhaiterait fabriquer elle-même des panneaux solaires thermique (qu'elle importait jusqu'à maintenant). Je suis dans la phase d'étude technique et j'ai décidé de simuler numériquement le système {panneau+eau+réservoir} afin d'obtenir les températures de chaque élément et le temps au bout duquel l'eau dans le réservoir à atteint la température souhaitée. C'est un système en thermosiphon sans appoint pour le chauffage. L'eau est chauffée uniquement grâce à l'énergie solaire et la circulation se fait par gravité grâce à la différence de masse volumique entre l'eau chaude et l'eau froide.

    L'objectif est de sélectionner les matériaux de construction afin d'avoir un cout de fabrication le moins élevé possible avec un bon compromis de résistance à la température.

    J'ai donc fait un bilan d'énergie sur chaque élément du système (16 au total : couverture en verre, absorbeur, isolant, tuyauterie, eau, tuyau d'entrée et de sortir, leurs isolant respectifs, l'eau qui les remplie, le réservoir, l'isolant du réservoir...) et j'obtiens un système de 16 équations différentielles du premier ordre mais pas toutes linéaires à cause des termes de radiation en T4.

    Exemple : dT_eau/dt = (termes de condution+termes de convection+termes de rayonnement) / (m_eau*Cp_eau)
    ...
    ...

    Je connais les températures initiales et toutes les caractéristiques physiques et géométriques du système (coéfficients de conduction, convection...), je ne cherche que le vecteur à 16 composantes des températures.

    J'ai essayé de jouer avec les odeset et je ne pense pas que mon système soit "raide"(pour moi, un système raide est un système dont les constantes de temps sont tres différentes et c'est cela qui pose problème à la résolution, ici, je pense que mes constantes de temps sont presques toutes équivalentes). De plus, je ne pense pas que les erreurs de résolution soient provoquées par les termes non linéaires, j'ai essayé de les supprimer, le résultat est le même.

    D'après mes connaissance en Matlab, le premier message devrait pouvoir se résoudre en changeant le pas de temps...rien n'y fait ou je m'y prends mal. Quant au second avertissement, il semble que la Jacobienne de mon système soit critique, mais que faire...? (Si elle analytiquement non critique, c'est qu'il s'agit d'une approximation dû au calcul numérique, mais là encore, que faire?).

    J'espère que j'ai été plus clair.

    Merci d'avance.

  7. #7
    Futur Membre du Club
    Profil pro
    Responsable des études
    Inscrit en
    Juin 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2010
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Re...

    Mon code tourne enfin, j'explique ce que j'ai fait sur les conseil d'un chercheur de mon école.

    Cette personne m'a conseillé de code un Runge & Kutta pour faire avancer ma solution pas par pas, ce que j'ai fait, c'est assez long mais dans mon cas, cela en vallait la peine. Cette méthode m'a obligé à modifier un peu mon code, pas mes équations mais seulement l'ordre des opérations, les appels aux fichiers annexes...

    Et lorsque je suis revenu sur un solveur, mon code a fonctionné immédiatement.

    Le seul problème que je rencontre maintenant est que les solutions sont des complexes, je ne sais pas d'où cela vient mais les parties réels semblent cohérentes avec les résultats que je m'attendait à trouver.

    J'espère que ce message pourra aider...

  8. #8
    Futur Membre du Club
    Profil pro
    Responsable des études
    Inscrit en
    Juin 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2010
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    je reviens vers vous car cela fait plusieurs jours que j'essaye de supprimer ce problème de résultats complexes...en vain.

    Je ne sais pas d'où cela peut provenir, je pensais à des racines ou des logarithmes de nombres négatifs mais mon code n'en comporte pas. Peut être que cela vient du solveur.

    Pensez-vous que cela influe beaucoup sur mes résultats?

    Si oui, je pensais ajouter dans mon code des "real(T)" afin d'obliger Matlab à ne considérer que la partie réelle à chaque boucle...cela vous parait-il faisable, correct, cohérent?

    Merci d'avance

Discussions similaires

  1. [AJAX] Utilisation des quotes
    Par illegalsene dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/10/2006, 09h23
  2. Formulaires : problème avec les slashes et les quotes
    Par GarGamel55 dans le forum Langage
    Réponses: 1
    Dernier message: 12/10/2005, 15h59

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