Vous êtes sur la page 1sur 1

# -*- coding:Latin-1 -*-

from math import *

from numpy import *

from scipy import *

from pylab import * # pour utiliser plot

# TP 1 : EXO 2

#----------------------------------------------------------------------------------------#

# Définition de la matrice A

n=10

A=np.zeros((n,n)) # cree une matrice zero de taille n

## A COMPLETER ##

b=np.ones((n,1))

#----------------------------------------------------------------------------------------#

# Definition de J(v) (fonctionnelle quadratique avec v de taille n)

def J(v):

"fonction a minimiser"

## A COMPLETER ##

return J

#----------------------------------------------------------------------------------------#

# Définition du gradient de la fonction J a minimiser : grad=Av-b

def gradJ(v):

## A COMPLETER ##

return grad

#----------------------------------------------------------------------------------------#

# Programme minimisation de J sur R^n par la methode du gradient à pas constant

[ValPropre,VecPropre]=np.linalg.eig(A) # Calcul des valeurs propres de A

pas=2./(min(ValPropre)+max(ValPropre)) # Calcul du pas fixe optimal

nbit=0 # nombre iterations

x=np.zeros((n,1)) # point initial

grad=gradJ(x) # calcul du gradient en x

err=np.linalg.norm(grad) # erreur initialz

while (err>0.0001 and nbit<5000):

## A COMPLETER ##

nbit+=1

print("Le minimum est atteint pour ")

print("x = ")

print(x)

print("Le nombre d'iteration est de ",nbit," et la norme du dernier gradient est ",err)

#----------------------------------------------------------------------------------------#

# Representation des lignes de niveau de J et du champ de vecteur du gradient

x1 = np.arange(-3.0, 3.0, 0.1)

x2 = np.arange(-3.0, 3.0, 0.1)

xx1,xx2 = np.meshgrid(x1,x2);

z = 2*xx1**2 + 2*xx2**2 -2*xx1*xx2-xx1-xx2;

h = plt.contourf(x1,x2,z)

U = 4*xx1-2*xx2-1

V = 4*xx2-2*xx1-1

Q = plt.quiver(x1, x2, U, V, units='width')

plt.show()

Vous aimerez peut-être aussi