

# Avertissement : dans les versions plus récentes de Pyzo, la méthode proposée dans le poly de Centrale pour tracer les graphes est obsolète. Je vais indiquer les deux versions (Centrale et moderne)

import numpy as np
import matplotlib.pyplot as plt

## Exercice 8

def f(x,y):
    return(4*(x**2+y**2)**2-4*x*(x**2-3*y**2)-27*(x**2+y**2-1))
f=np.vectorize(f)

# a. Surface z=f(x,y)

X=np.arange(-2,2,0.01)
Y=np.arange(-2,2,0.01)
X,Y=np.meshgrid(X,Y)
Z=f(X,Y)

# Version Centrale
from mpl_toolkits.mplot3d import Axes3D
ax = Axes3D(plt.figure())

#Version moderne
ax = plt.axes(projection="3d")


ax.plot_surface(X,Y,Z)
plt.show()

## b. Lignes de niveau

X=np.arange(-3,3.2,0.01)
Y=np.arange(-3,3,0.01)
X,Y=np.meshgrid(X,Y)

Z=f(X,Y)

plt.axis('equal')

plt.contour(X,Y,Z,[-12,-6,0,6,12,18,24])
plt.show()

## Exercice 9

def K(x,y):
    if x>=y:
        return(np.sin(x)*np.cos(y))
    else:
        return(np.cos(x)*np.sin(y))

# On obtient alpha(x,y)=1/2(x+y-|x-y|) et beta(x,y)1/2(x+y+|x-y|) donc alpha et beta sont continues car valeur absolue est continue.
# Et K(x,y)=sin(beta(x,y))*cos(alpha(x,y)) est continue comme composée de fonctions continues. Puisque C est fermé et borné, on en déduit que K atteint son min et son max sur C.

K=np.vectorize(K)

X=np.arange(0,np.pi/2,0.01)
Y=np.arange(0,np.pi/2,0.01)
X,Y=np.meshgrid(X,Y)

Z=K(X,Y)

# Version Centrale
from mpl_toolkits.mplot3d import Axes3D
ax = Axes3D(plt.figure())

#Version moderne
ax = plt.axes(projection="3d")

ax.plot_surface(X,Y,Z)
plt.show()

# On conjecture que le minimum vaut 0, atteint en (0,0) et (pi/2,pi/2); et le maximum vaut 1, atteint en (0,pi/2) et en (pi/2,0)