2021-11-17 17:30:44 +00:00
|
|
|
@doc doc"""
|
|
|
|
Tester l'algorithme de pas de Cauchy
|
|
|
|
|
|
|
|
# Entrées :
|
|
|
|
* afficher : (Bool) affichage ou non des résultats de chaque test
|
|
|
|
|
|
|
|
# Les cas de test (dans l'ordre)
|
|
|
|
* quadratique 1
|
|
|
|
* quadratique 2
|
|
|
|
* quadratique 3
|
|
|
|
"""
|
2021-12-16 09:36:21 +00:00
|
|
|
function tester_pas_de_cauchy(afficher::Bool, Pas_De_Cauchy::Function)
|
2021-11-17 17:30:44 +00:00
|
|
|
|
2021-12-16 09:36:21 +00:00
|
|
|
tol_erreur = 1e-6
|
2021-11-17 17:30:44 +00:00
|
|
|
|
2021-12-16 09:36:21 +00:00
|
|
|
@testset "Pas de Cauchy" begin
|
|
|
|
"# Pour la quadratique 1"
|
2021-11-17 17:30:44 +00:00
|
|
|
|
2021-12-16 09:36:21 +00:00
|
|
|
@testset "g = 0" begin
|
|
|
|
g = [0; 0]
|
|
|
|
H = [7 0; 0 2]
|
|
|
|
delta = 1
|
|
|
|
s, e = Pas_De_Cauchy(g, H, delta)
|
|
|
|
@test (e == 0) && (isapprox(s, [0; 0], atol = tol_erreur))
|
|
|
|
end
|
2021-11-17 17:30:44 +00:00
|
|
|
|
2021-12-16 09:36:21 +00:00
|
|
|
@testset "quad 2, non saturé" begin
|
|
|
|
g = [6; 2]
|
|
|
|
H = [7 0; 0 2]
|
|
|
|
delta = 1
|
|
|
|
s, e = Pas_De_Cauchy(g, H, delta)
|
|
|
|
sol = -(norm(g)^2 / (g' * H * g)) * g
|
|
|
|
@test (e == 1) && (isapprox(s, sol, atol = tol_erreur)) # sol = [-0.9230769230769234; -0.30769230769230776]
|
|
|
|
end
|
|
|
|
@testset "quad 2, saturé" begin
|
|
|
|
g = [6; 2]
|
|
|
|
H = [7 0; 0 2]
|
|
|
|
delta = 0.9
|
|
|
|
s, e = Pas_De_Cauchy(g, H, delta)
|
|
|
|
sol = -(delta / norm(g)) * g
|
|
|
|
@test (e == -1) && (isapprox(s, sol, atol = tol_erreur)) # sol = [-0.9230769230769234; -0.30769230769230776]
|
|
|
|
end
|
|
|
|
@testset "quad 3, non saturé" begin
|
|
|
|
g = [-2; 1]
|
|
|
|
H = [-2 0; 0 10]
|
|
|
|
delta = 6
|
|
|
|
s, e = Pas_De_Cauchy(g, H, delta)
|
|
|
|
sol = -(norm(g)^2 / (g' * H * g)) * g
|
|
|
|
println("Cauchy 4 = ", sol)
|
|
|
|
@test (e == 1) && (isapprox(s, sol, atol = tol_erreur)) # sol = [-0.9230769230769234; -0.30769230769230776]
|
|
|
|
end
|
|
|
|
@testset "quad 3, saturé" begin
|
|
|
|
g = [-2; 1]
|
|
|
|
H = [-2 0; 0 10]
|
|
|
|
delta = 5
|
|
|
|
s, e = Pas_De_Cauchy(g, H, delta)
|
|
|
|
sol = -(delta / norm(g)) * g
|
|
|
|
println("Cauchy 5= ", sol)
|
|
|
|
@test (e == -1) && (isapprox(s, sol, atol = tol_erreur)) # sol = [-0.9230769230769234; -0.30769230769230776]
|
|
|
|
end
|
|
|
|
@testset "quad 3, g'*H*g <0 saturé" begin
|
|
|
|
g = [3; 1]
|
|
|
|
H = [-2 0; 0 10]
|
|
|
|
delta = 5
|
|
|
|
s, e = Pas_De_Cauchy(g, H, delta)
|
|
|
|
sol = -(delta / norm(g)) * g
|
|
|
|
println("Cauchy 6= ", sol)
|
|
|
|
@test (e == -1) && (isapprox(s, sol, atol = tol_erreur)) # sol = [-0.9230769230769234; -0.30769230769230776]
|
|
|
|
end
|
|
|
|
@testset "quad 3, g'*H*g = 0 saturé" begin
|
|
|
|
g = [1, 2]
|
|
|
|
H = [2 -1; 4 -2]
|
|
|
|
delta = 5
|
|
|
|
s, e = Pas_De_Cauchy(g, H, delta)
|
|
|
|
sol = -(delta / norm(g)) * g
|
|
|
|
println("Cauchy 6= ", sol)
|
|
|
|
@test (e == -1) && (isapprox(s, sol, atol = tol_erreur)) # sol = [-0.9230769230769234; -0.30769230769230776]
|
|
|
|
end
|
|
|
|
end
|
2021-11-17 17:30:44 +00:00
|
|
|
end
|