145 lines
3.5 KiB
Julia
Executable file
145 lines
3.5 KiB
Julia
Executable file
"""
|
|
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
|
|
x001
|
|
x002
|
|
x011
|
|
x012
|
|
x021
|
|
x022
|
|
x023
|
|
end
|
|
pts1 = Pts_sans_contraintes(
|
|
-pi / 2 + 0.5,
|
|
pi / 2,
|
|
[1; 0; 0],
|
|
[10; 3; -2.2],
|
|
[-1.2; 1],
|
|
[10; 0],
|
|
[0; 1 / 200 + 1 / 10^12]
|
|
)
|
|
|
|
## pour les problèmes avec contraintes
|
|
struct Pts_avec_contraintes
|
|
x01
|
|
x02
|
|
x03
|
|
x04
|
|
end
|
|
pts2 = Pts_avec_contraintes(
|
|
[0; 1; 1],
|
|
[0.5; 1.25; 1],
|
|
[1; 0],
|
|
[sqrt(3) / 2; sqrt(3) / 2]
|
|
)
|
|
|
|
# Fonctions de test
|
|
|
|
"""
|
|
La zéroième fonction de test
|
|
|
|
# Expression
|
|
fct0(x) = sin(x)
|
|
"""
|
|
fct0(x) = sin.(x)
|
|
# la gradient de la fonction fct0
|
|
grad_fct0(x) = cos.(x)
|
|
# la hessienne de la fonction fct0
|
|
hess_fct0(x) = -sin.(x)
|
|
# solutions de la fonction fct0
|
|
sol_exacte_fct0 = -pi / 2
|
|
|
|
"""
|
|
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
|
|
grad_fct1(x) = [
|
|
4 * (x[1] + x[2] + x[3] - 3) + 2 * (x[1] - x[2])
|
|
4 * (x[1] + x[2] + x[3] - 3) - 2 * (x[1] - x[2]) + 2 * (x[2] - x[3])
|
|
4 * (x[1] + x[2] + x[3] - 3) - 2 * (x[2] - x[3])
|
|
]
|
|
# la hessienne de la fonction fct1
|
|
hess_fct1(x) = [
|
|
6 2 4
|
|
2 8 2
|
|
4 2 6
|
|
]
|
|
# solutions de la fonction fct1
|
|
sol_exacte_fct1 = [1; 1; 1] # = -hess_fct1(x011) \ grad_fct1(zero(similar(x011)))
|
|
sol_fct1_augm = [0.5; 1.25; 0.5] # pour les problèmes avec contraintes
|
|
|
|
|
|
"""
|
|
La deuxième 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
|
|
]
|
|
# solutions de la fonction fct2
|
|
sol_exacte_fct2 = [1; 1]
|
|
sol_fct2_augm = [0.9072339605110892; 0.82275545631455] # pour les problèmes avec contraintes
|
|
|
|
"""
|
|
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("-"^80)
|
|
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
|
|
|
|
function afficher_resultats_gct(algo, sol, sol_exacte)
|
|
println("-"^80)
|
|
printstyled("Résultats de : " * algo, " :\n", bold = true, color = :blue)
|
|
println(" * sol = ", sol)
|
|
println(" * sol_exacte = ", sol_exacte)
|
|
end
|
|
|
|
function afficher_resultats_cauchy(algo, flag, sol, sol_exacte)
|
|
afficher_resultats_gct(algo, sol, sol_exacte)
|
|
println(" * flag = ", flag)
|
|
end |