TP-optimisation-numerique-2/test/fonctions_de_tests.jl

109 lines
2.8 KiB
Julia
Raw Normal View History

2021-11-17 17:30:44 +00:00
"""
Ce fichier contient toutes fonctions utilisés dans les tests des algorithmes :
- L'algorithme de Newton
- Les régions de confiance
- Le Lagrangien augmenté
"""
# Les points initiaux
# pour les problèmes sans contraintes
struct Pts_sans_contraintes
x011
x012
x021
x022
x023
end
x011 = [1; 0; 0]
x012 = [10; 3; -2.2]
x021 = [-1.2; 1]
x022 = [10; 0]
x023 = [0; 1/200 + 1/10^12]
# les points initiaux utilisés dans les problèmes sans contraintes
pts1 = Pts_sans_contraintes(x011,x012,x021,x022,x023)
# pour les problèmes avec contraintes
struct Pts_avec_contraintes
x01
x02
x03
x04
end
x01 = [0; 1; 1]
x02 = [0.5; 1.25; 1]
x03 = [1; 0]
x04 = [sqrt(3)/2 ;sqrt(3)/2]
pts2 = Pts_avec_contraintes(x01,x02,x03,x04)
# Les solutions exactes
# sol_exacte_fct1 = -hess_fct1(x011)\grad_fct1(zero(similar(x011)))
sol_exacte_fct1 = [1;1;1]
sol_exacte_fct2 = [1;1]
"""
La première fonction de test
# Expression
fct1(x) = 2*(x[1]+x[2]+x[3]-3)^2 + (x[1]-x[2])^2 + (x[2]-x[3])^2
"""
fct1(x) = 2*(x[1]+x[2]+x[3]-3)^2 + (x[1]-x[2])^2 + (x[2]-x[3])^2
# la gradient de la fonction fct1
function grad_fct1(x)
y1 = 4*(x[1]+x[2]+x[3]-3) + 2*(x[1]-x[2])
y2 = 4*(x[1]+x[2]+x[3]-3) - 2*(x[1]-x[2]) +2*(x[2]-x[3])
y3 = 4*(x[1]+x[2]+x[3]-3) - 2*(x[2]-x[3])
return [y1;y2;y3]
end
# la hessienne de la fonction fct1
hess_fct1(x) = [6 2 4;2 8 2;4 2 6]
"""
La première fonction de test
# Expression
fct2(x)=100*(x[2]-x[1]^2)^2+(1-x[1])^2
"""
fct2(x)=100*(x[2]-x[1]^2)^2+(1-x[1])^2
# la gradient de la fonction fct2
grad_fct2(x)=[-400*x[1]*(x[2]-x[1]^2)-2*(1-x[1]) ; 200*(x[2]-x[1]^2)]
#la hessienne de la fonction fct2
hess_fct2(x)=[-400*(x[2]-3*x[1]^2)+2 -400*x[1];-400*x[1] 200]
# Pour les problèmes avec contraintes
# solutions
sol_fct1_augm = [0.5 ; 1.25 ; 0.5]
sol_fct2_augm = [0.9072339605110892; 0.82275545631455]
"""
La première contrainte
# Expression
contrainte1(x) = x[1]+x[3]-1
"""
contrainte1(x) = x[1]+x[3]-1
grad_contrainte1(x) = [1 ;0; 1]
hess_contrainte1(x) = [0 0 0;0 0 0;0 0 0]
"""
La deuxième contrainte
# Expression
contrainte2(x) = (x[1]^2) + (x[2]^2) -1.5
"""
contrainte2(x) = (x[1]^2) + (x[2]^2) -1.5
grad_contrainte2(x) = [2*x[1] ;2*x[2]]
hess_contrainte2(x) = [2 0;0 2]
# Affichage les sorties de l'algorithme des Régions de confiance
function afficher_resultats(algo,nom_fct,point_init,xmin,fxmin,flag,sol_exacte,nbiters)
println("-------------------------------------------------------------------------")
printstyled("Résultats de : "*algo*" appliqué à "*nom_fct*" au point initial "*point_init*" :\n",bold=true,color=:blue)
println(" * xsol = ",xmin)
println(" * f(xsol) = ",fxmin)
println(" * nb_iters = ",nbiters)
println(" * flag = ",flag)
println(" * sol_exacte : ", sol_exacte)
end