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 :

Résoudre l'équation de chaleur 2D avec odeint


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 21
    Par défaut Résoudre l'équation de chaleur 2D avec odeint
    Bonjour tout le monde,
    j'ai essayée de résoudre l'équation de chaleur 2D avec odeint :

    du/dt = k*[(ddu/dxx) + (ddu/dyy)] avec k = 4mm²/s le coefficient de diffusion thermique

    j'ai réussi à faire ça pour 1D et j'ai fait :

    Code python : 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
    """
    ici on résoudre l'équation de chaleur 1 à l'aide de la fonction odient
    """
    #### Importation des modules :
     
    import numpy as np
    import scipy.integrate as si
    import matplotlib.pyplot as plt
     
    #### Définition des fonctions :
     
    #solution numérique
    def equation_de_chaleur1D(u,t):
        dudt = np.zeros(X.shape)
        for i in range(1, N-1):
            dudt[i] = k * (((u[i + 1] - 2*u[i] + u[i - 1]) / dx**2)) 
     
        return dudt
     
    #### Programme principale :
     
    N = 100  
    L = 1.0    
    X = np.linspace(0, L, N) 
    dx= L / (N - 1)
    k = 0.0004                        # le coefficient de diffusion thermique
     
    t=np.linspace(0.0, 155, 101)   # TOP t=np.linspace(0.0, 162.5, 100+1) avec un pas de 1.6089 s
     
    # conditions initiales 1D                                 
    T=20* np.ones(X.shape)            # la température initiale
    T[0]=220                          # température au bord
    T[-1]=220                         # température au bord
     
     
    sol_1D = si.odeint(equation_de_chaleur1D, T, t)
    plt.plot(x,sol_1D[100],'*',label="solution numérique ")
    plt.xlabel("la position en cm")
    plt.ylabel("La température en °C")
    plt.legend()
    ____________
    Et donc pour résoudre le problème en 2D j'ai fait ça :
    Code python : 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
    """
    ici on résodre l'équation de chaleur 1 à l'aide de la fonction odient
    """
    #### Importation des modules :
     
    import numpy as np
    import scipy.integrate as si
    import matplotlib.pyplot as plt
     
    #### Définition des fonctions :
     
    #solution numérique
    def equation_de_chaleur2D(u,t):
        dudt = np.zeros((X.shape,Y.shape))
        for i in range(1, Nx-1):
            for j in range(1,Ny-1):
                dudt[i , j] = k * (((u[i + 1 , j] - 2*u[i , j] + u[i - 1 , j]) / dx**2) + ((u[i , j + 1] - 2*u[i , j] + u[i , j - 1]) / dy**2)) 
     
        return dudt
     
    #### Programme principale :
     
    Nx = 100
    Ny = 100
    L = 1.0    
    X = np.linspace(0, L, Nx) 
    Y = np.linspace(0, L, Ny) 
    dx= L / (Nx - 1)
    dy= L / (Ny - 1)
     
    k = 0.0004                        # le coefficient de diffusion thermique
     
    t=np.linspace(0.0, 155, 101)   # TOP t=np.linspace(0.0, 162.5, 100+1) avec un pas de 1.6089 s
     
    # conditions initiales 1D                                 
    T0 = 20* np.ones((X.shape,Y.shape))            # la température initiale
    T0[Nx-1,:] = 220                         # température au bord
    T0[0,:] = 220                           # température au bord
     
    sol_2D = si.odeint(equation_de_chaleur2D, T, t)
    plt.plot(x,sol_2D[100],'*',label="solution numérique ")
    plt.xlabel("la position en cm")
    plt.ylabel("La température en °C")
    plt.legend()

    _____________________
    Mais il m'envoie le message suivant :
    Initial condition y0 must be one-dimensional


    Alors que les conditions initiales pour mon cas devront être en 2D, je vous demande l'aide pour résoudre ce problème, merci à vous.

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    odeint n'intègre que des trucs 1D.

    Pour faire du 2D en général on fait ce que l'on appelle du splitting directionnelle. C'est à dire que sur un pas de temps dt on fait un coup à l'horizontale, ca donne un résultat, qu'on donne en condition initiale au coup que l'on fait à la verticale et ça ca fait la résolution pour un pas dt pour le 2D.

    Après vous pouvez aussi vous passer de odeint, en codant un schéma temporelle à la main (explicite ou implicite au choix).

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/04/2015, 12h46
  2. Réponses: 3
    Dernier message: 08/12/2014, 14h45
  3. Réponses: 4
    Dernier message: 13/08/2013, 11h37
  4. Réponses: 8
    Dernier message: 08/04/2007, 01h38
  5. Résoudre une équation sans isoler y
    Par ido123 dans le forum MATLAB
    Réponses: 4
    Dernier message: 21/12/2006, 03h35

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