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.
Partager