Je voudrais afficher un graphe d'une fonction en fonction d'un nombre de point définit ou bien d'un pas entre chaque point sur un intervalle donné : https://pastebin.com/mvNz1DTj
Quel est mon erreur ?
-----
Je voudrais afficher un graphe d'une fonction en fonction d'un nombre de point définit ou bien d'un pas entre chaque point sur un intervalle donné : https://pastebin.com/mvNz1DTj
Quel est mon erreur ?
passer en mode édition avancée et coller le code dans des balises code (bouton dièse):
une erreur de frappe:Code:import numpy as np import matplotlib.pyplot as plt xmin=-1 xmax=-1 ymin=-3 ymax=3 pasx=0.1 pasy=0.3 Nx=int((xmax-xmin))*pasx Ny=int((ymax-ymin))*pasy #OU : Nx= # Ny= x = np.linspace(-1, 1, Nx) y = np.linspace(-3, 3, Ny) X, Y = np.meshgrid(x, y) Z = np.sin(Y) * np.exp(-X**2) # calcul du tableau des valeurs de Z fig, ax = plt.subplots() ax.pcolormesh(X, Y, Z) plt.show()
xmax = 1 # et non -1
Nx=int((xmax - xmin) / pasx + 1.5) # le int sur tout et on divise par le pas pour avoir le nb d'intervalles, et on ajoute 0.5 pour arrondir et 1 pour les poteaux.
# idem pour Ny.
Jusqu'ici tout va bien...
on peut utiliser x=np.arange(xmin,xmax,pasx) (ou x=np.arange(xmin,xmax+pasx,pas x) pour inclure xmax)
Code:import numpy as np import matplotlib.pyplot as plt xmin=-1 xmax=1 ymin=-3 ymax=3 pasx=0.1 pasy=0.3 Nx=int((xmax-xmin))*(pasx+1.5) Ny=int((ymax-ymin))*(pasy+1.5) #OU : Nx= # Ny= x = np.linspace(-1, 1, Nx) y = np.linspace(-3, 3, Ny) X, Y = np.meshgrid(x, y) Z = np.sin(Y) * np.exp(-X**2) # calcul du tableau des valeurs de Z fig, ax = plt.subplots() ax.pcolormesh(X, Y, Z) plt.show()
erreur :
ce
num = operator.index(num)
TypeError: 'float' object cannot be interpreted as an integer
Bonjour,
Votre calcul pour le nombre d'intervalles Nx et Ny est bizarre. (le "+1.5" est incorrect).
il a mal interprété la réponse de polo974
le 1.5 est à ajouter au résultat (xmax-xmin)/pasxCode:Nx=int((xmax - xmin) / pasx + 1.5)
Re :
Voici se que me donne l'IDE :Code:import numpy as np import matplotlib.pyplot as plt xmin=-1 xmax=1 ymin=-3 ymax=3 pasx=0.1 pasy=0.3 Nx=int(1.5+(xmax-xmin))*(pasx) Ny=int(1.5+(ymax-ymin))*(pasy)+1.5 #OU : Nx= # Ny= x = np.linspace(-1, 1, Nx) y = np.linspace(-3, 3, Ny) X, Y = np.meshgrid(x, y) Z = np.sin(Y) * np.exp(-X**2) # calcul du tableau des valeurs de Z fig, ax = plt.subplots() ax.pcolormesh(X, Y, Z) plt.show()
TypeError: 'float' object cannot be interpreted as an integer
Code:import numpy as np import matplotlib.pyplot as plt xmin=-1 xmax=1 ymin=-3 ymax=3 pasx=0.1 pasy=0.3 Nx=int(1.5+(xmax-xmin))*(pasx) Ny=int(1.5+(ymax-ymin))*(pasy) #Erreur de frappe #OU : Nx= # Ny= x = np.linspace(-1, 1, Nx) y = np.linspace(-3, 3, Ny) X, Y = np.meshgrid(x, y) Z = np.sin(Y) * np.exp(-X**2) # calcul du tableau des valeurs de Z fig, ax = plt.subplots() ax.pcolormesh(X, Y, Z) plt.show()
Dernière modification par JPL ; 20/10/2022 à 14h24. Motif: Ajout de la balise Code
Tu ne lis pas nos messages comme il faut .....
Salut,
en suivant le conseil d'umfred (np.arrange), j'obtiens moi aussi la figure. Mais il y a un truc que je ne pige pas ici, c'est la présence de ce "1.5" (je ne l'ai pas utilisé), qu'est-ce qui m'échappe?
c'est pour que la valeur limite soit aussi prise en compte (d'après polo74); Je pense qu'il suffirait de faire (xmax+pasx-xmin)/pasx en fait (comme je l'utilise en #3)
Ok, merci.
Oui, mais non, car il faut faire un arrondi avant de faire le int
exemple:
>>> int(100*4.1)
409
pas bon...
>>> int(100*4.1 + .5)
410
c'est mieux...
donc plutôt que faire 2 additions, je les agrèges dans le +1.5 (mais attention, à condition d'avoir des nombres positifs, ce qui est le cas ici...)
à propos de np.arange, justement, attention... :
>>> len(np.arange(0, 420 + 4.2, 4.2))
101
ok, on a 100 intervalles, donc 101 poteaux
mais
>>> len(np.arange(0, 410 + 4.1, 4.1))
102
oups, 102 poteaux...
le float ne sait pas représenter les décimales, donc, c'est presque toujours soit un peu plus, soit un peu moins.
Jusqu'ici tout va bien...