Meshgrid

Bonjour à tous
Le code suivant :
def F(x):
    x1,x2 = x[0],x[1]
    return x1**4 - 2*x1**2 + 2*x2**2 + x1 + 2*x1**2*x2

def GraphF():
    X,Y = np.meshgrid(np.linspace(-2,2,200),np.linspace(-2,1,200))
    Z = np.array( [[F( np.array([x,y]) ) for x in X] for y in Y] )
    plt.figure(1)
    plt.contour(X,Y,Z,100)
    plt.show()
    
GraphF()
Bug
Pyzo a écrit:
>>> (executing file "TP2_optimisation.py")
Traceback (most recent call last):
File "C:\Users\ceche\Documents\Mathématiques\m2\Concours\Cours\Informatique\Programme\Python\TP2_optimisation.py", line 24, in <module>
GraphF()
File "C:\Users\ceche\Documents\Mathématiques\m2\Concours\Cours\Informatique\Programme\Python\TP2_optimisation.py", line 21, in GraphF
plt.contour(X,Y,Z,100)
File "c:\anaconda\lib\site-packages\matplotlib\pyplot.py", line 2537, in contour
**kwargs)
File "c:\anaconda\lib\site-packages\matplotlib\__init__.py", line 1810, in inner
return func(ax, *args, **kwargs)
File "c:\anaconda\lib\site-packages\matplotlib\axes\_axes.py", line 6231, in contour
contours = mcontour.QuadContourSet(self, *args, **kwargs)
File "c:\anaconda\lib\site-packages\matplotlib\contour.py", line 887, in __init__
kwargs = self._process_args(*args, **kwargs)
File "c:\anaconda\lib\site-packages\matplotlib\contour.py", line 1493, in _process_args
x, y, z = self._contour_args(args, kwargs)
File "c:\anaconda\lib\site-packages\matplotlib\contour.py", line 1551, in _contour_args
x, y, z = self._check_xyz(args[:3], kwargs)
File "c:\anaconda\lib\site-packages\matplotlib\contour.py", line 1585, in _check_xyz
raise TypeError("Input z must be a 2D array.")
TypeError: Input z must be a 2D array.
Pourtant
def F(x):
    x1,x2 = x[0],x[1]
    return x1**4 - 2*x1**2 + 2*x2**2 + x1 + 2*x1**2*x2

def GraphF():
    X,Y = np.linspace(-2,2,200),np.linspace(-2,1,200)
    Z = np.array( [[F( np.array([x,y]) ) for x in X] for y in Y] )
    plt.figure(1)
    plt.contour(X,Y,Z,100)
    plt.show()
    
GraphF()
fonctionne bien, je pense du coup que mon problème vient de meshgrid, je dois ne pas savoir l'utiliser (comme c'est la première fois, vous me pardonnez :-D).

Qu'en dites-vous ?
Connectez-vous ou Inscrivez-vous pour répondre.