Bonjour à tous,
J'essaie de faire une représentation graphique 2d d'un calcul. Pour cela j'utilise une fonction f pour répartir correctement les points sur mon graphique. Ci-dessous la fonction en question (elle n'est pas entière car il y a beaucoup de cas mais c'est pour donner une idée de la forme). Or, lorsque j'essaie d'utiliser cette fonction avec contourf par exemple, j'ai le message d'erreur suivant : if y[j] == 0 and x[i] >= 0 and x[i] <= (N+1)*h : ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all().
Le problème est que ni la fonction any() ni la fonction all() ne peuvent m'aider dans ce cas là et d'ailleurs je ne comprends pas comment il suppose que y[j] est une liste de plusieurs éléments alors que c'est censé être justement un unique élément.
J'ai vu des exemples pour tracer un graphique avec des codes du genre :
Code : 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 def f(x,y): for i in range(N+2) : for j in range(N+2) : if y[j] == 0 and x[i] >= 0 and x[i] <= (N+1)*h : return Beta elif y[j] == (N+1)*h and x[i] >= 0 and x[i] <= (N+1)*h : return Alpha elif x[i] == 0 and y[j] >= 0 and y[j] <= (N+1)*h : return Alpha elif x[i] == (N+1)*h and y[j] >= 0 and y[j] <= (N+1)*h : return Alpha pas = 12 x = np.linspace(0,(N+1)*h,pas) y = np.linspace(0,(N+1)*h,pas) X,Y = np.meshgrid(x,y) Contour = plt.contourf(X, Y, f(X,Y)) plt.axis('scaled') plt.colorbar() plt.show()
Or, dans mon cas, ma fonction n'est pas une expression analytique toute faite comme dans l'exemple ci-dessus. Selon x et y, j'ai des cas différents et j'ai l'impression que les conditions sur if ne plaisent pas trop. Ainsi, je n'ai aucune idée de comment réussir à résoudre le problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 def f(x,y): return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2) n = 256 x = np.linspace(-3,3,n) y = np.linspace(-3,3,n) X,Y = np.meshgrid(x,y) contourf(X, Y, f(X,Y), 8, alpha=.75, cmap='jet') C = contour(X, Y, f(X,Y), 8, colors='black', linewidth=.5) show()
En quoi avoir plusieurs cas dans ma fonction est un problème ?
Merci d'avance !
Partager