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.