2020-06-15 17:20:15 +00:00
|
|
|
@doc doc"""
|
|
|
|
Approximation de la solution du problème ``\min_{x \in \mathbb{R}^{n}} f(x)`` en utilisant l'algorithme de Newton
|
|
|
|
|
|
|
|
# Syntaxe
|
|
|
|
```julia
|
|
|
|
xk,f_min,flag,nb_iters = Algorithme_de_Newton(f,gradf,hessf,x0,option)
|
|
|
|
```
|
|
|
|
|
|
|
|
# Entrées :
|
2020-07-05 14:59:57 +00:00
|
|
|
* **f** : (Function) la fonction à minimiser
|
|
|
|
* **gradf** : (Function) le gradient de la fonction f
|
|
|
|
* **hessf** : (Function) la Hessienne de la fonction f
|
|
|
|
* **x0** : (Array{Float,1}) première approximation de la solution cherchée
|
|
|
|
* **options** : (Array{Float,1})
|
|
|
|
* **max_iter** : le nombre maximal d'iterations
|
|
|
|
* **tolCN1** : la tolérence pour la condition nécessaire d'ordre 1
|
|
|
|
* **tol** : la tolérence pour les autres critères d'arrêt
|
2020-06-15 17:20:15 +00:00
|
|
|
|
|
|
|
# Sorties:
|
2020-07-05 14:59:57 +00:00
|
|
|
* **xmin** : (Array{Float,1}) une approximation de la solution du problème : ``\min_{x \in \mathbb{R}^{n}} f(x)``
|
|
|
|
* **f_min** : (Float) ``f(x_{min})``
|
|
|
|
* **flag** : (Integer) indique le critère sur lequel le programme à arrêter
|
2020-06-15 17:20:15 +00:00
|
|
|
* **0** : Convergence
|
|
|
|
* **1** : stagnation du xk
|
|
|
|
* **2** : stagnation du f
|
|
|
|
* **3** : nombre maximal d'itération dépassé
|
2020-07-05 14:59:57 +00:00
|
|
|
* **nb_iters** : (Integer) le nombre d'itérations faites par le programme
|
2020-06-15 17:20:15 +00:00
|
|
|
|
|
|
|
# Exemple d'appel
|
|
|
|
```@example
|
|
|
|
using Optinum
|
|
|
|
f(x)=100*(x[2]-x[1]^2)^2+(1-x[1])^2
|
|
|
|
gradf(x)=[-400*x[1]*(x[2]-x[1]^2)-2*(1-x[1]) ; 200*(x[2]-x[1]^2)]
|
|
|
|
hessf(x)=[-400*(x[2]-3*x[1]^2)+2 -400*x[1];-400*x[1] 200]
|
|
|
|
x0 = [1; 0]
|
|
|
|
options = []
|
|
|
|
xmin,f_min,flag,nb_iters = Algorithme_De_Newton(f,gradf,hessf,x0,options)
|
|
|
|
```
|
|
|
|
"""
|
|
|
|
function Algorithme_De_Newton(f::Function,gradf::Function,hessf::Function,x0,options)
|
|
|
|
|
2020-07-05 14:59:57 +00:00
|
|
|
"# Si options == [] on prends les paramètres par défaut"
|
2020-06-15 17:20:15 +00:00
|
|
|
if options == []
|
2020-07-05 14:59:57 +00:00
|
|
|
max_iter = 100
|
|
|
|
tolCN1 = 1e-15
|
|
|
|
tol = 1e-15
|
2020-06-15 17:20:15 +00:00
|
|
|
else
|
2020-07-05 14:59:57 +00:00
|
|
|
max_iter = options[1]
|
|
|
|
tolCN1 = options[2]
|
|
|
|
tol = options[3]
|
2020-06-15 17:20:15 +00:00
|
|
|
end
|
2020-07-05 14:59:57 +00:00
|
|
|
eps = 1e-8
|
2020-06-15 17:20:15 +00:00
|
|
|
|
|
|
|
n = length(x0)
|
|
|
|
xmin = zeros(n)
|
|
|
|
f_min = 0
|
|
|
|
flag = 0
|
|
|
|
nb_iters = 0
|
|
|
|
return xmin,f_min,flag,nb_iters
|
|
|
|
end
|