2 pièce(s) jointe(s)
[DEB] meshgrid quiver gradient
Bonjour à tous ,
Malgré mes recherches j'ai un peu de mal avec les fonctions précédentes.
Il s'agit de simuler une décroissance de température en fonction de l'éloignement d'une source de chaleur . T= np.exp(-x**2)*np.exp(-y**2)*np.exp(-z**2) et de faire de ce champ scalaire un champ vectoriel par l'usage du gradient afin d'obtenir une représentation visuelle telle que celle-ci Pièce jointe 586895
Voici mon code
Code:
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
| #
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.gca(projection='3d')
# coordonnées des points de la simulation
x, y, z = np.meshgrid(np.linspace(-5,5,10),
np.linspace(-5,5,10),
np.linspace(-5,5,10))
# Evolution de la température en fonction de la position dans la pièce
T= np.exp(-x**2)*np.exp(-y**2)*np.exp(-z**2)
# Calcul du gradient par le calcul de 3 dérivées partielles
u = -20*x*(np.exp(-x**2)*np.exp(-y**2)*np.exp(-z**2))
v = -20*y*(np.exp(-x**2)*np.exp(-y**2)*np.exp(-z**2))
w = -20*z*(np.exp(-x**2)*np.exp(-y**2)*np.exp(-z**2))
plt.grid()
plt.quiver(x, y, z, u, v, w)
plt.show() |
et le résultat
Pièce jointe 586896
Faut il utliser la fonction np.gradient ?
Je n'ai visiblement pas compris ce que représentent u,v w
En vous remerciant de m'avoir consacré de votre temps
[DEB] Champ vecteur 3D matplotlib meshgrid quiver
Je mets ce code pour les débutants qui galère un peu comme moi dans les graphismes :)
Après quelque modifications de code on obtient qqchose de ressemblant au logiciel de math.
Il faut noter que ici les vecteurs sont égaux. Ceci est dû au fait que le paramètre normalize est à True ,mais le graphe est plus joli
Code:
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
| # Simulation totalement fictive de la répartition de la chaleur dans une pièce en fonction de la position .
# Loi de diffusion T=10*exp-(x²+y²+z²)
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure(figsize=[14,14])
ax = fig.gca(projection='3d')
# coordonnées des points de la simulation
x, y, z = np.meshgrid(np.linspace(-5, 5,10),
np.linspace(-5, 5, 10),
np.linspace(-5, 5, 10 ))
# Evolution de la température en fonction de la position dans la pièce
T = np.exp(-x ** 2) * np.exp(-y ** 2) * np.exp(-z ** 2)
# Calcul du gradient par le calcul de 3 dérivées partielles
u = -20* x * (np.exp(-x ** 2) * np.exp(-y ** 2) * np.exp(-z ** 2))
v = -20* y * (np.exp(-x ** 2) * np.exp(-y ** 2) * np.exp(-z ** 2))
w = -20* z * (np.exp(-x ** 2) * np.exp(-y ** 2) * np.exp(-z ** 2))
plt.grid()
# si on met True les vecteurs on la même longueur mais c'est plus joli
plt.quiver(x, y, z, u, v, w,normalize=True)
plt.show() |