feat: presque fini
This commit is contained in:
parent
422543a5f8
commit
99ce6be786
|
@ -117,7 +117,7 @@ function Lagrangien_Augmente(algo, f::Function, c::Function, gradf::Function, he
|
||||||
if norm(_gradL(x_k, lambda_k, 0)) <= max(tol * norm(_gradL(x_0, lambda_0, 0)), epsilon) && norm(c(x_k)) <= max(tol * norm(c(x_0), epsilon))
|
if norm(_gradL(x_k, lambda_k, 0)) <= max(tol * norm(_gradL(x_0, lambda_0, 0)), epsilon) && norm(c(x_k)) <= max(tol * norm(c(x_0), epsilon))
|
||||||
flag = 0
|
flag = 0
|
||||||
break
|
break
|
||||||
elseif k >= max_iter
|
elseif k >= itermax
|
||||||
flag = 1
|
flag = 1
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
|
|
|
@ -125,12 +125,12 @@ function Regions_De_Confiance(algo, f::Function, gradf::Function, hessf::Functio
|
||||||
if norm(gradf(x_k1)) <= max(Tol_rel * norm(gradf(x0)), Tol_abs)
|
if norm(gradf(x_k1)) <= max(Tol_rel * norm(gradf(x0)), Tol_abs)
|
||||||
flag = 0
|
flag = 0
|
||||||
break
|
break
|
||||||
# elseif norm(x_k1 - x_k) <= max(Tol_rel * norm(x_k), Tol_abs)
|
elseif rho_k >= eta1 && norm(x_k1 - x_k) <= max(Tol_rel * norm(x_k), Tol_abs)
|
||||||
# flag = 1
|
flag = 1
|
||||||
# break
|
break
|
||||||
# elseif abs(f(x_k1) - f(x_k)) <= max(Tol_rel * abs(f(x_k)), Tol_abs)
|
elseif rho_k >= eta1 && abs(f(x_k1) - f(x_k)) <= max(Tol_rel * abs(f(x_k)), Tol_abs)
|
||||||
# flag = 2
|
flag = 2
|
||||||
# break
|
break
|
||||||
elseif k >= max_iter
|
elseif k >= max_iter
|
||||||
flag = 3
|
flag = 3
|
||||||
break
|
break
|
||||||
|
|
|
@ -35,83 +35,9 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 26,
|
"execution_count": null,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [],
|
||||||
{
|
|
||||||
"name": "stdout",
|
|
||||||
"output_type": "stream",
|
|
||||||
"text": [
|
|
||||||
"-0.5463024898437906\n",
|
|
||||||
"0.5463024898437907 1.4901161193847656e-8\n",
|
|
||||||
"0.046335607865117034\n",
|
|
||||||
"0.04633560786511692 1.4901161193847656e-8\n",
|
|
||||||
"-3.311802133838644e-5\n",
|
|
||||||
"3.311802133842967e-5 1.4901161193847656e-8\n",
|
|
||||||
"[1.4802973661668753e-16, 1.0, 0.9999999999999998]\n",
|
|
||||||
"1.414213562373095 1.4901161193847656e-8\n",
|
|
||||||
"[-9.0, -2.0000000000000004, 3.1999999999999984]\n",
|
|
||||||
"9.759098319004682 1.4901161193847656e-8\n",
|
|
||||||
"[0.0247191011235956, 0.3806741573033705]\n",
|
|
||||||
"0.38147588128083515 1.4901161193847656e-8\n",
|
|
||||||
"[1.938395770052605, -4.555708012050932]\n",
|
|
||||||
"4.950944723224334 1.4901161193847656e-8\n",
|
|
||||||
"[0.0003148077076046218, 3.757858630244299]\n",
|
|
||||||
"3.757858643430518 1.4901161193847656e-8\n",
|
|
||||||
"[0.23656563220117438, 0.3612025483564667]\n",
|
|
||||||
"0.43177607538855944 1.4901161193847656e-8\n",
|
|
||||||
"[3.84568678781476e-7, 0.0559640674724924]\n",
|
|
||||||
"0.0559640674738137 1.4901161193847656e-8\n",
|
|
||||||
"[4.304346341338872e-6, 8.608655775764598e-6]\n",
|
|
||||||
"9.624778007431938e-6 1.4901161193847656e-8\n",
|
|
||||||
"[-0.0004499775011251476, 99.99100044997749]\n",
|
|
||||||
"99.99100045098997 1.4901161193847656e-8\n",
|
|
||||||
"[-8.99918559194064, -179.97561277424336]\n",
|
|
||||||
"180.20046208260007 1.4901161193847656e-8\n",
|
|
||||||
"[-2.2498396305867807e-8, 80.98534127317878]\n",
|
|
||||||
"80.98534127317878 1.4901161193847656e-8\n",
|
|
||||||
"[-0.0003644080598389195, -0.0007290817061411055]\n",
|
|
||||||
"0.0008150787497567694 1.4901161193847656e-8\n",
|
|
||||||
"[-4.4407648973031725e-16, 1.3279323318740367e-7]\n",
|
|
||||||
"1.3279323318737823e-7 1.4901161193847656e-8\n",
|
|
||||||
"[-4.99999958629818e9, -0.005000000001]\n",
|
|
||||||
"4.99999958629818e9 1.4901161193847656e-8\n",
|
|
||||||
"[-4.99999958629818e9, -0.005000000001]\n",
|
|
||||||
"4.99999958629818e9 1.4901161193847656e-8\n",
|
|
||||||
"[6.004800496839379e-7, 2.499999586298196e19]\n",
|
|
||||||
"2.499999586298196e19 4.99999958629818e-6\n",
|
|
||||||
"[-3518.437500703689, 3.518437209586888e13]\n",
|
|
||||||
"3.5184372097024e13 24999.995862981963\n",
|
|
||||||
"[2.0220898268939407, -2.0208532713048275e10]\n",
|
|
||||||
"2.0208533504e10 25000.03104735406\n",
|
|
||||||
"[-1.0e-9, -1.0e-9, -1.0e-9]\n",
|
|
||||||
"1.732050758583135e-9 1.4901161193847656e-8\n",
|
|
||||||
"[-4.9999974749156296e-5, 9899.99000000505]\n",
|
|
||||||
"9899.99000000505 1.4901161193847656e-8\n",
|
|
||||||
"[-98.99990041369064, -19799.970182750585]\n",
|
|
||||||
"19800.217681078513 1.4901161193847656e-8\n",
|
|
||||||
"[-2.529670807346846e-11, 9800.980281920612]\n",
|
|
||||||
"9800.980281920612 1.4901161193847656e-8\n",
|
|
||||||
"[-4.95863093076493e-5, -9.917753547159461e-5]\n",
|
|
||||||
"0.0001108827561570618 1.4901161193847656e-8\n",
|
|
||||||
"[0.0247191011235956, 0.3806741573033705]\n",
|
|
||||||
"0.38147588128083515 1.4901161193847656e-8\n",
|
|
||||||
"[1.938395770052605, -4.555708012050932]\n",
|
|
||||||
"4.950944723224334 1.4901161193847656e-8\n",
|
|
||||||
"\u001b[0m\u001b[1mTest Summary: | \u001b[22m\u001b[32m\u001b[1mPass \u001b[22m\u001b[39m\u001b[36m\u001b[1mTotal\u001b[22m\u001b[39m\n",
|
|
||||||
"L'algo de Newton | \u001b[32m 24 \u001b[39m\u001b[36m 24\u001b[39m\n"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"data": {
|
|
||||||
"text/plain": [
|
|
||||||
"Test.DefaultTestSet(\"L'algo de Newton\", Any[Test.DefaultTestSet(\"Cas test 0 x0 = solution\", Any[Test.DefaultTestSet(\"solution\", Any[], 1, false, false), Test.DefaultTestSet(\"itération\", Any[], 1, false, false)], 0, false, false), Test.DefaultTestSet(\"Cas test 0 x0 = x001\", Any[Test.DefaultTestSet(\"solution\", Any[], 1, false, false), Test.DefaultTestSet(\"itération\", Any[], 1, false, false)], 0, false, false), Test.DefaultTestSet(\"Cas test 0 x0 = x002\", Any[Test.DefaultTestSet(\"solution\", Any[], 1, false, false), Test.DefaultTestSet(\"itération\", Any[], 1, false, false)], 0, false, false), Test.DefaultTestSet(\"Cas test 1 x0 = solution\", Any[Test.DefaultTestSet(\"solution\", Any[], 1, false, false), Test.DefaultTestSet(\"itération\", Any[], 1, false, false)], 0, false, false), Test.DefaultTestSet(\"Cas test 1 x0 = x011\", Any[Test.DefaultTestSet(\"solution\", Any[], 1, false, false), Test.DefaultTestSet(\"itération\", Any[], 1, false, false)], 0, false, false), Test.DefaultTestSet(\"Cas test 1 x0 = x012\", Any[Test.DefaultTestSet(\"solution\", Any[], 1, false, false), Test.DefaultTestSet(\"itération\", Any[], 1, false, false)], 0, false, false), Test.DefaultTestSet(\"Cas test 2 x0 = solution\", Any[Test.DefaultTestSet(\"solution\", Any[], 1, false, false), Test.DefaultTestSet(\"itération\", Any[], 1, false, false)], 0, false, false), Test.DefaultTestSet(\"Cas test 2 x0 = x021\", Any[Test.DefaultTestSet(\"solution\", Any[], 1, false, false), Test.DefaultTestSet(\"itération\", Any[], 1, false, false)], 0, false, false), Test.DefaultTestSet(\"Cas test 2 x0 = x022\", Any[Test.DefaultTestSet(\"solution\", Any[], 1, false, false), Test.DefaultTestSet(\"itération\", Any[], 1, false, false)], 0, false, false), Test.DefaultTestSet(\"Cas test 2 x0 = x023\", Any[Test.DefaultTestSet(\"solution\", Any[], 1, false, false), Test.DefaultTestSet(\"exception\", Any[], 1, false, false)], 0, false, false), Test.DefaultTestSet(\"Cas test stagnation x\", Any[Test.DefaultTestSet(\"flag\", Any[], 1, false, false)], 0, false, false), Test.DefaultTestSet(\"Cas test stagnation f(x)\", Any[Test.DefaultTestSet(\"flag\", Any[], 1, false, false)], 0, false, false), Test.DefaultTestSet(\"Cas test itermax\", Any[Test.DefaultTestSet(\"itération\", Any[], 1, false, false), Test.DefaultTestSet(\"flag\", Any[], 1, false, false)], 0, false, false)], 0, false, false)"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"metadata": {},
|
|
||||||
"output_type": "display_data"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"source": [
|
"source": [
|
||||||
"tester_algo_newton(false, Algorithme_De_Newton)"
|
"tester_algo_newton(false, Algorithme_De_Newton)"
|
||||||
]
|
]
|
||||||
|
@ -165,38 +91,6 @@
|
||||||
"2. Coder l'algorithme de régions de confiance (fichier `Regions_De_Confiance.jl`). Tester sur les problèmes de l’Annexe A."
|
"2. Coder l'algorithme de régions de confiance (fichier `Regions_De_Confiance.jl`). Tester sur les problèmes de l’Annexe A."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": null,
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [],
|
|
||||||
"source": [
|
|
||||||
"function my_afficher_resultats_cauchy(algo, s, e)\n",
|
|
||||||
" println(\"-------------------------------------------------------------------------\")\n",
|
|
||||||
" printstyled(\"Résultats de : \", algo, \"\\n\", bold = true, color = :blue)\n",
|
|
||||||
" println(\" * s = \", s)\n",
|
|
||||||
" println(\" * e = \", e)\n",
|
|
||||||
"end\n",
|
|
||||||
"\n",
|
|
||||||
"g1 = [0; 0]\n",
|
|
||||||
"H1 = [7 0; 0 2]\n",
|
|
||||||
"delta1 = 1\n",
|
|
||||||
"s1, e1 = Pas_De_Cauchy(g1, H1, delta1)\n",
|
|
||||||
"my_afficher_resultats_cauchy(\"Cauchy 1\", s1, e1)\n",
|
|
||||||
"\n",
|
|
||||||
"g2 = [6; 2]\n",
|
|
||||||
"H2 = [7 0; 0 2]\n",
|
|
||||||
"delta2 = 1\n",
|
|
||||||
"s2, e2 = Pas_De_Cauchy(g2, H2, delta2)\n",
|
|
||||||
"my_afficher_resultats_cauchy(\"Cauchy 2\", s2, e2)\n",
|
|
||||||
"\n",
|
|
||||||
"g3 = [-2; 1]\n",
|
|
||||||
"H3 = [-2 0; 0 10]\n",
|
|
||||||
"delta3 = 1\n",
|
|
||||||
"s3, e3 = Pas_De_Cauchy(g3, H3, delta3)\n",
|
|
||||||
"my_afficher_resultats_cauchy(\"Cauchy 3\", s3, e3)"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": null,
|
||||||
|
@ -206,28 +100,6 @@
|
||||||
"tester_pas_de_cauchy(false, Pas_De_Cauchy)"
|
"tester_pas_de_cauchy(false, Pas_De_Cauchy)"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": null,
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [],
|
|
||||||
"source": [
|
|
||||||
"options = [10, 0.5, 2.00, 0.25, 0.75, 2, 10000, sqrt(eps()), 1e-15]\n",
|
|
||||||
"algo = \"cauchy\"\n",
|
|
||||||
"\n",
|
|
||||||
"x0 = sol_exacte_f0\n",
|
|
||||||
"xmin, f_min, flag, nb_iters = Regions_De_Confiance(algo, f0, grad_f0, hess_f0, x0, options)\n",
|
|
||||||
"my_afficher_resultats(\"RC-Cauchy\", \"f0\", x0, xmin, f_min, flag, sol_exacte_f0, nb_iters)\n",
|
|
||||||
"\n",
|
|
||||||
"x0 = sol_exacte_f1\n",
|
|
||||||
"xmin, f_min, flag, nb_iters = Regions_De_Confiance(algo, f1, grad_f1, hess_f1, x0, options)\n",
|
|
||||||
"my_afficher_resultats(\"RC-Cauchy\", \"f1\", x0, xmin, f_min, flag, sol_exacte_f1, nb_iters)\n",
|
|
||||||
"\n",
|
|
||||||
"x0 = sol_exacte_f2\n",
|
|
||||||
"xmin, f_min, flag, nb_iters = Regions_De_Confiance(algo, f2, grad_f2, hess_f2, x0, options)\n",
|
|
||||||
"my_afficher_resultats(\"RC-Cauchy\", \"f2\", x0, xmin, f_min, flag, sol_exacte_f2, nb_iters)"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"cell_type": "markdown",
|
"cell_type": "markdown",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
|
@ -265,49 +137,6 @@
|
||||||
"Annexe A."
|
"Annexe A."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": null,
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [],
|
|
||||||
"source": [
|
|
||||||
"function my_afficher_resultats_gct(algo, s)\n",
|
|
||||||
" println(\"-------------------------------------------------------------------------\")\n",
|
|
||||||
" printstyled(\"Résultats de : \", algo, \"\\n\", bold = true, color = :blue)\n",
|
|
||||||
" println(\" * s = \", s)\n",
|
|
||||||
"end\n",
|
|
||||||
"\n",
|
|
||||||
"options = []\n",
|
|
||||||
"\n",
|
|
||||||
"gradf(x) = [-400 * x[1] * (x[2] - x[1]^2) - 2 * (1 - x[1]); 200 * (x[2] - x[1]^2)]\n",
|
|
||||||
"hessf(x) = [-400*(x[2]-3*x[1]^2)+2 -400*x[1]; -400*x[1] 200]\n",
|
|
||||||
"xk = [1; 0]\n",
|
|
||||||
"s = Gradient_Conjugue_Tronque(gradf(xk), hessf(xk), options)\n",
|
|
||||||
"my_afficher_resultats_gct(\"Cauchy 1\", s)\n",
|
|
||||||
"\n",
|
|
||||||
"grad = [0; 0]\n",
|
|
||||||
"Hess = [7 0; 0 2]\n",
|
|
||||||
"s = Gradient_Conjugue_Tronque(grad, Hess, options)\n",
|
|
||||||
"my_afficher_resultats_gct(\"Cauchy 2\", s)\n",
|
|
||||||
"\n",
|
|
||||||
"# le cas de test 2 H definie positive\n",
|
|
||||||
"max_iter = 100\n",
|
|
||||||
"tol = 1e-7\n",
|
|
||||||
"grad = [6; 2]\n",
|
|
||||||
"Hess = [7 0; 0 2]\n",
|
|
||||||
"delta = 0.5 # sol = pas de Cauchy \n",
|
|
||||||
"s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])\n",
|
|
||||||
"my_afficher_resultats_gct(\"Cauchy 3\", s)\n",
|
|
||||||
"\n",
|
|
||||||
"delta = 1.2 # saturation à la 2ieme itération\n",
|
|
||||||
"s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])\n",
|
|
||||||
"my_afficher_resultats_gct(\"Cauchy 4\", s)\n",
|
|
||||||
"\n",
|
|
||||||
"delta = 3 # sol = min global\n",
|
|
||||||
"s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])\n",
|
|
||||||
"my_afficher_resultats_gct(\"Cauchy 5\", s)"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": null,
|
||||||
|
@ -323,29 +152,7 @@
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
"options = [10, 0.5, 2.00, 0.25, 0.75, 2, 10000, sqrt(eps()), 1e-15]\n",
|
"tester_regions_de_confiance(true, Regions_De_Confiance)"
|
||||||
"algo = \"gct\"\n",
|
|
||||||
"\n",
|
|
||||||
"x0 = sol_exacte_f0\n",
|
|
||||||
"xmin, f_min, flag, nb_iters = Regions_De_Confiance(algo, f0, grad_f0, hess_f0, x0, options)\n",
|
|
||||||
"my_afficher_resultats(\"RC-GCT\", \"f0\", x0, xmin, f_min, flag, sol_exacte_f0, nb_iters)\n",
|
|
||||||
"\n",
|
|
||||||
"x0 = sol_exacte_f1\n",
|
|
||||||
"xmin, f_min, flag, nb_iters = Regions_De_Confiance(algo, f1, grad_f1, hess_f1, x0, options)\n",
|
|
||||||
"my_afficher_resultats(\"RC-GCT\", \"f1\", x0, xmin, f_min, flag, sol_exacte_f1, nb_iters)\n",
|
|
||||||
"\n",
|
|
||||||
"x0 = sol_exacte_f2\n",
|
|
||||||
"xmin, f_min, flag, nb_iters = Regions_De_Confiance(algo, f2, grad_f2, hess_f2, x0, options)\n",
|
|
||||||
"my_afficher_resultats(\"RC-GCT\", \"f2\", x0, xmin, f_min, flag, sol_exacte_f2, nb_iters)"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": null,
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [],
|
|
||||||
"source": [
|
|
||||||
"tester_regions_de_confiance(false, Regions_De_Confiance)"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -452,7 +259,7 @@
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
"tester_lagrangien_augmente(false, Lagrangien_Augmente)"
|
"tester_lagrangien_augmente(true, Lagrangien_Augmente)"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -168,7 +168,7 @@ function tester_algo_newton(afficher::Bool, Algorithme_De_Newton::Function)
|
||||||
x0 = ones(3) .* 0.9999
|
x0 = ones(3) .* 0.9999
|
||||||
xmin, f_min, flag, nb_iters = Algorithme_De_Newton(fct1, grad, hess, x0, options)
|
xmin, f_min, flag, nb_iters = Algorithme_De_Newton(fct1, grad, hess, x0, options)
|
||||||
if (afficher)
|
if (afficher)
|
||||||
afficher_resultats("stagnation x de Newton", "fct0", x0, xmin, f_min, flag, sol_exacte_fct0, nb_iters)
|
afficher_resultats("stagnation x de Newton", "fct0", x0, xmin, f_min, flag, sol_exacte_fct1, nb_iters)
|
||||||
end
|
end
|
||||||
@testset "flag" begin
|
@testset "flag" begin
|
||||||
@test flag == 1
|
@test flag == 1
|
||||||
|
|
|
@ -25,55 +25,55 @@ function tester_gct(afficher::Bool, Gradient_Conjugue_Tronque::Function)
|
||||||
Hess = [7 0; 0 2]
|
Hess = [7 0; 0 2]
|
||||||
delta = 1
|
delta = 1
|
||||||
s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])
|
s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])
|
||||||
@test s ≈ [0.0; 0.0] atol = tol_test
|
@test isapprox(s, [0.0; 0.0], atol = tol_test)
|
||||||
|
|
||||||
# le cas de test 2 H definie positive
|
# le cas de test 2 H definie positive
|
||||||
grad = [6; 2]
|
grad = [6; 2]
|
||||||
Hess = [7 0; 0 2]
|
Hess = [7 0; 0 2]
|
||||||
delta = 0.5 # sol = pas de Cauchy
|
delta = 0.5 # sol = pas de Cauchy
|
||||||
s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])
|
s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])
|
||||||
@test s ≈ -delta * grad / norm(grad) atol = tol_test
|
@test isapprox(s, -delta * grad / norm(grad), atol = tol_test)
|
||||||
delta = 1.2 # saturation à la 2ieme itération
|
delta = 1.2 # saturation à la 2ieme itération
|
||||||
s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])
|
s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])
|
||||||
@test s ≈ [-0.8740776099190263, -0.8221850958502244] atol = tol_test
|
@test isapprox(s, [-0.8740776099190263, -0.8221850958502244], atol = tol_test)
|
||||||
delta = 3 # sol = min global
|
delta = 3 # sol = min global
|
||||||
s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])
|
s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])
|
||||||
@test s ≈ -Hess \ grad atol = tol_test
|
@test isapprox(s, -Hess \ grad, atol = tol_test)
|
||||||
|
|
||||||
# le cas test 2 bis matrice avec 1 vp < 0 et 1 vp > 0
|
# le cas test 2 bis matrice avec 1 vp < 0 et 1 vp > 0
|
||||||
grad = [1, 2]
|
grad = [1, 2]
|
||||||
Hess = [1 0; 0 -1]
|
Hess = [1 0; 0 -1]
|
||||||
delta = 1.0 # g^T H g < 0 première direction concave
|
delta = 1.0 # g^T H g < 0 première direction concave
|
||||||
s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])
|
s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])
|
||||||
@test s ≈ -delta * grad / norm(grad) atol = tol_test
|
@test isapprox(s, -delta * grad / norm(grad), atol = tol_test)
|
||||||
grad = [1, 0]
|
grad = [1, 0]
|
||||||
delta = 0.5 # g^T H g > 0 sol pas de Cauchy
|
delta = 0.5 # g^T H g > 0 sol pas de Cauchy
|
||||||
s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])
|
s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])
|
||||||
@test s ≈ -delta * grad / norm(grad) atol = tol_test
|
@test isapprox(s, -delta * grad / norm(grad), atol = tol_test)
|
||||||
grad = [2, 1] # g^T H g > 0 sol à l'itération 2, saturation
|
grad = [2, 1] # g^T H g > 0 sol à l'itération 2, saturation
|
||||||
delta = 6
|
delta = 6
|
||||||
s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])
|
s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])
|
||||||
@test isapprox(s, [0.48997991959774634, 5.979959839195494], atol = tol_test) || isapprox(s, [-4.489979919597747, -3.979959839195493], atol = tol_test)
|
@test isapprox(s, [0.48997991959774634, 5.979959839195494], atol = tol_test) || isapprox(s, [-4.489979919597747, -3.979959839195493], atol = tol_test)
|
||||||
# le cas de test 3
|
# le cas de test 3
|
||||||
#grad = [-2 ; 1]
|
grad = [-2; 1]
|
||||||
#Hess = [-2 0 ; 0 10]
|
Hess = [-2 0; 0 10]
|
||||||
#delta = 10
|
delta = 10
|
||||||
#s = Gradient_Conjugue_Tronque(grad,Hess,[delta;max_iter;tol])
|
s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])
|
||||||
#@test s ≈ [9.102342582478453; -4.140937032991381] atol = tol_test
|
@test isapprox(s, [9.102342582478453; -4.140937032991381], atol = tol_test)
|
||||||
|
|
||||||
# le cas de test 4
|
# le cas de test 4
|
||||||
#grad = [0 ; 0]
|
grad = [0; 0]
|
||||||
#Hess = [-2 0 ; 0 10]
|
Hess = [-2 0; 0 10]
|
||||||
#delta = 1
|
delta = 1
|
||||||
#s = Gradient_Conjugue_Tronque(grad,Hess,[delta;max_iter;tol])
|
s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])
|
||||||
#@test s ≈ [0.0 ; 0.0] atol = tol_test
|
@test isapprox(s, [0.0; 0.0], atol = tol_test)
|
||||||
|
|
||||||
# le cas de test 5
|
# le cas de test 5
|
||||||
grad = [2; 3]
|
grad = [2; 3]
|
||||||
Hess = [4 6; 6 5]
|
Hess = [4 6; 6 5]
|
||||||
delta = 3
|
delta = 3
|
||||||
s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])
|
s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])
|
||||||
@test s ≈ [1.9059020876695578; -2.3167946029410595] atol = tol_test
|
@test isapprox(s, [1.9059020876695578; -2.3167946029410595], atol = tol_test)
|
||||||
|
|
||||||
# le cas de test 6
|
# le cas de test 6
|
||||||
# Le pas de Cauchy conduit à un gradient nul en 1 itération
|
# Le pas de Cauchy conduit à un gradient nul en 1 itération
|
||||||
|
@ -81,6 +81,6 @@ function tester_gct(afficher::Bool, Gradient_Conjugue_Tronque::Function)
|
||||||
Hess = [4 0; 0 -15]
|
Hess = [4 0; 0 -15]
|
||||||
delta = 2
|
delta = 2
|
||||||
s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])
|
s = Gradient_Conjugue_Tronque(grad, Hess, [delta; max_iter; tol])
|
||||||
@test s ≈ [-0.5; 0.0] atol = tol_test
|
@test isapprox(s, [-0.5; 0.0], atol = tol_test)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -21,6 +21,10 @@ function tester_pas_de_cauchy(afficher::Bool, Pas_De_Cauchy::Function)
|
||||||
H = [7 0; 0 2]
|
H = [7 0; 0 2]
|
||||||
delta = 1
|
delta = 1
|
||||||
s, e = Pas_De_Cauchy(g, H, delta)
|
s, e = Pas_De_Cauchy(g, H, delta)
|
||||||
|
sol = [0; 0]
|
||||||
|
if afficher
|
||||||
|
println("Cauchy 1= ", sol)
|
||||||
|
end
|
||||||
@test (e == 0) && (isapprox(s, [0; 0], atol = tol_erreur))
|
@test (e == 0) && (isapprox(s, [0; 0], atol = tol_erreur))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -30,6 +34,9 @@ function tester_pas_de_cauchy(afficher::Bool, Pas_De_Cauchy::Function)
|
||||||
delta = 1
|
delta = 1
|
||||||
s, e = Pas_De_Cauchy(g, H, delta)
|
s, e = Pas_De_Cauchy(g, H, delta)
|
||||||
sol = -(norm(g)^2 / (g' * H * g)) * g
|
sol = -(norm(g)^2 / (g' * H * g)) * g
|
||||||
|
if afficher
|
||||||
|
println("Cauchy 2= ", sol)
|
||||||
|
end
|
||||||
@test (e == 1) && (isapprox(s, sol, atol = tol_erreur)) # sol = [-0.9230769230769234; -0.30769230769230776]
|
@test (e == 1) && (isapprox(s, sol, atol = tol_erreur)) # sol = [-0.9230769230769234; -0.30769230769230776]
|
||||||
end
|
end
|
||||||
@testset "quad 2, saturé" begin
|
@testset "quad 2, saturé" begin
|
||||||
|
@ -38,6 +45,9 @@ function tester_pas_de_cauchy(afficher::Bool, Pas_De_Cauchy::Function)
|
||||||
delta = 0.9
|
delta = 0.9
|
||||||
s, e = Pas_De_Cauchy(g, H, delta)
|
s, e = Pas_De_Cauchy(g, H, delta)
|
||||||
sol = -(delta / norm(g)) * g
|
sol = -(delta / norm(g)) * g
|
||||||
|
if afficher
|
||||||
|
println("Cauchy 3= ", sol)
|
||||||
|
end
|
||||||
@test (e == -1) && (isapprox(s, sol, atol = tol_erreur)) # sol = [-0.9230769230769234; -0.30769230769230776]
|
@test (e == -1) && (isapprox(s, sol, atol = tol_erreur)) # sol = [-0.9230769230769234; -0.30769230769230776]
|
||||||
end
|
end
|
||||||
@testset "quad 3, non saturé" begin
|
@testset "quad 3, non saturé" begin
|
||||||
|
@ -46,7 +56,9 @@ function tester_pas_de_cauchy(afficher::Bool, Pas_De_Cauchy::Function)
|
||||||
delta = 6
|
delta = 6
|
||||||
s, e = Pas_De_Cauchy(g, H, delta)
|
s, e = Pas_De_Cauchy(g, H, delta)
|
||||||
sol = -(norm(g)^2 / (g' * H * g)) * g
|
sol = -(norm(g)^2 / (g' * H * g)) * g
|
||||||
|
if afficher
|
||||||
println("Cauchy 4= ", sol)
|
println("Cauchy 4= ", sol)
|
||||||
|
end
|
||||||
@test (e == 1) && (isapprox(s, sol, atol = tol_erreur)) # sol = [-0.9230769230769234; -0.30769230769230776]
|
@test (e == 1) && (isapprox(s, sol, atol = tol_erreur)) # sol = [-0.9230769230769234; -0.30769230769230776]
|
||||||
end
|
end
|
||||||
@testset "quad 3, saturé" begin
|
@testset "quad 3, saturé" begin
|
||||||
|
@ -55,7 +67,9 @@ function tester_pas_de_cauchy(afficher::Bool, Pas_De_Cauchy::Function)
|
||||||
delta = 5
|
delta = 5
|
||||||
s, e = Pas_De_Cauchy(g, H, delta)
|
s, e = Pas_De_Cauchy(g, H, delta)
|
||||||
sol = -(delta / norm(g)) * g
|
sol = -(delta / norm(g)) * g
|
||||||
|
if afficher
|
||||||
println("Cauchy 5= ", sol)
|
println("Cauchy 5= ", sol)
|
||||||
|
end
|
||||||
@test (e == -1) && (isapprox(s, sol, atol = tol_erreur)) # sol = [-0.9230769230769234; -0.30769230769230776]
|
@test (e == -1) && (isapprox(s, sol, atol = tol_erreur)) # sol = [-0.9230769230769234; -0.30769230769230776]
|
||||||
end
|
end
|
||||||
@testset "quad 3, g'*H*g <0 saturé" begin
|
@testset "quad 3, g'*H*g <0 saturé" begin
|
||||||
|
@ -64,7 +78,9 @@ function tester_pas_de_cauchy(afficher::Bool, Pas_De_Cauchy::Function)
|
||||||
delta = 5
|
delta = 5
|
||||||
s, e = Pas_De_Cauchy(g, H, delta)
|
s, e = Pas_De_Cauchy(g, H, delta)
|
||||||
sol = -(delta / norm(g)) * g
|
sol = -(delta / norm(g)) * g
|
||||||
|
if afficher
|
||||||
println("Cauchy 6= ", sol)
|
println("Cauchy 6= ", sol)
|
||||||
|
end
|
||||||
@test (e == -1) && (isapprox(s, sol, atol = tol_erreur)) # sol = [-0.9230769230769234; -0.30769230769230776]
|
@test (e == -1) && (isapprox(s, sol, atol = tol_erreur)) # sol = [-0.9230769230769234; -0.30769230769230776]
|
||||||
end
|
end
|
||||||
@testset "quad 3, g'*H*g = 0 saturé" begin
|
@testset "quad 3, g'*H*g = 0 saturé" begin
|
||||||
|
@ -73,7 +89,9 @@ function tester_pas_de_cauchy(afficher::Bool, Pas_De_Cauchy::Function)
|
||||||
delta = 5
|
delta = 5
|
||||||
s, e = Pas_De_Cauchy(g, H, delta)
|
s, e = Pas_De_Cauchy(g, H, delta)
|
||||||
sol = -(delta / norm(g)) * g
|
sol = -(delta / norm(g)) * g
|
||||||
println("Cauchy 6= ", sol)
|
if afficher
|
||||||
|
println("Cauchy 7= ", sol)
|
||||||
|
end
|
||||||
@test (e == -1) && (isapprox(s, sol, atol = tol_erreur)) # sol = [-0.9230769230769234; -0.30769230769230776]
|
@test (e == -1) && (isapprox(s, sol, atol = tol_erreur)) # sol = [-0.9230769230769234; -0.30769230769230776]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -29,6 +29,7 @@ function tester_regions_de_confiance(afficher::Bool, Regions_De_Confiance::Funct
|
||||||
delta0_2 = 2
|
delta0_2 = 2
|
||||||
options1 = [deltaMax, gamma1, gamma2, eta1, eta2, delta0_1, maxits, Tol_abs, Tol_rel]
|
options1 = [deltaMax, gamma1, gamma2, eta1, eta2, delta0_1, maxits, Tol_abs, Tol_rel]
|
||||||
options2 = [deltaMax, gamma1, gamma2, eta1, eta2, delta0_2, maxits, Tol_abs, Tol_rel]
|
options2 = [deltaMax, gamma1, gamma2, eta1, eta2, delta0_2, maxits, Tol_abs, Tol_rel]
|
||||||
|
options_max_iter = [deltaMax, gamma1, gamma2, eta1, eta2, delta0_2, 10, Tol_abs, Tol_rel]
|
||||||
|
|
||||||
# l'ensemble de tests
|
# l'ensemble de tests
|
||||||
@testset "La méthode des RC " begin
|
@testset "La méthode des RC " begin
|
||||||
|
@ -37,6 +38,13 @@ function tester_regions_de_confiance(afficher::Bool, Regions_De_Confiance::Funct
|
||||||
###################################################
|
###################################################
|
||||||
# Un premier sous-ensemble de tests
|
# Un premier sous-ensemble de tests
|
||||||
@testset "avec Cauchy " begin
|
@testset "avec Cauchy " begin
|
||||||
|
# cas de test 0
|
||||||
|
x_min11, fmin11, flag11, nb_iters11 = Regions_De_Confiance("cauchy", fct1, grad_fct1, hess_fct1, sol_exacte_fct1, options1)
|
||||||
|
if (afficher)
|
||||||
|
afficher_resultats("régions de confiance avec " * "cauchy", "fonction 1", "sol_exacte", x_min11, fmin11, flag11, sol_exacte_fct1, nb_iters11)
|
||||||
|
end
|
||||||
|
@test isapprox(x_min11, sol_exacte_fct1, atol = tol_erreur)
|
||||||
|
|
||||||
# cas de test 1
|
# cas de test 1
|
||||||
x_min11, fmin11, flag11, nb_iters11 = Regions_De_Confiance("cauchy", fct1, grad_fct1, hess_fct1, pts1.x011, options1)
|
x_min11, fmin11, flag11, nb_iters11 = Regions_De_Confiance("cauchy", fct1, grad_fct1, hess_fct1, pts1.x011, options1)
|
||||||
if (afficher)
|
if (afficher)
|
||||||
|
@ -60,12 +68,18 @@ function tester_regions_de_confiance(afficher::Bool, Regions_De_Confiance::Funct
|
||||||
|
|
||||||
# cas de test 4
|
# cas de test 4
|
||||||
x_min22, fmin22, flag22, nb_iters22 = Regions_De_Confiance("cauchy", fct2, grad_fct2, hess_fct2, pts1.x022, options2)
|
x_min22, fmin22, flag22, nb_iters22 = Regions_De_Confiance("cauchy", fct2, grad_fct2, hess_fct2, pts1.x022, options2)
|
||||||
println("iters = ", nb_iters22)
|
|
||||||
if (afficher)
|
if (afficher)
|
||||||
afficher_resultats("régions de confiance avec " * "cauchy", "fonction 2", "x022", x_min22, fmin22, flag22, sol_exacte_fct2, nb_iters22)
|
afficher_resultats("régions de confiance avec " * "cauchy", "fonction 2", "x022", x_min22, fmin22, flag22, sol_exacte_fct2, nb_iters22)
|
||||||
end
|
end
|
||||||
@test isapprox(x_min22, sol_exacte_fct2, atol = tol_erreur)
|
@test isapprox(x_min22, sol_exacte_fct2, atol = tol_erreur)
|
||||||
|
|
||||||
|
# cas de test max_iter
|
||||||
|
x_min22, fmin22, flag22, nb_iters22 = Regions_De_Confiance("cauchy", fct2, grad_fct2, hess_fct2, pts1.x022, options_max_iter)
|
||||||
|
if (afficher)
|
||||||
|
afficher_resultats("régions de confiance avec " * "cauchy", "fonction 2", "x022", x_min22, fmin22, flag22, sol_exacte_fct2, nb_iters22)
|
||||||
|
end
|
||||||
|
@test flag22 == 3
|
||||||
|
|
||||||
# cas de test 5
|
# cas de test 5
|
||||||
x_min23, fmin23, flag23, nb_iters23 = Regions_De_Confiance("cauchy", fct2, grad_fct2, hess_fct2, pts1.x023, options2)
|
x_min23, fmin23, flag23, nb_iters23 = Regions_De_Confiance("cauchy", fct2, grad_fct2, hess_fct2, pts1.x023, options2)
|
||||||
if (afficher)
|
if (afficher)
|
||||||
|
@ -79,6 +93,13 @@ function tester_regions_de_confiance(afficher::Bool, Regions_De_Confiance::Funct
|
||||||
###################################################
|
###################################################
|
||||||
# Un deuxième sous-ensemble de tests
|
# Un deuxième sous-ensemble de tests
|
||||||
@testset "avec GCT " begin
|
@testset "avec GCT " begin
|
||||||
|
# cas de test 0
|
||||||
|
x_min11, fmin11, flag11, nb_iters11 = Regions_De_Confiance("gct", fct1, grad_fct1, hess_fct1, sol_exacte_fct1, options1)
|
||||||
|
if (afficher)
|
||||||
|
afficher_resultats("régions de confiance avec " * "gct", "sol_exacte", "x011", x_min11, fmin11, flag11, sol_exacte_fct1, nb_iters11)
|
||||||
|
end
|
||||||
|
@test isapprox(x_min11, sol_exacte_fct1, atol = tol_erreur)
|
||||||
|
|
||||||
# cas de test 1
|
# cas de test 1
|
||||||
x_min11, fmin11, flag11, nb_iters11 = Regions_De_Confiance("gct", fct1, grad_fct1, hess_fct1, pts1.x011, options1)
|
x_min11, fmin11, flag11, nb_iters11 = Regions_De_Confiance("gct", fct1, grad_fct1, hess_fct1, pts1.x011, options1)
|
||||||
if (afficher)
|
if (afficher)
|
||||||
|
@ -110,9 +131,30 @@ function tester_regions_de_confiance(afficher::Bool, Regions_De_Confiance::Funct
|
||||||
# cas de test 5
|
# cas de test 5
|
||||||
x_min23, fmin23, flag23, nb_iters23 = Regions_De_Confiance("gct", fct2, grad_fct2, hess_fct2, pts1.x023, options2)
|
x_min23, fmin23, flag23, nb_iters23 = Regions_De_Confiance("gct", fct2, grad_fct2, hess_fct2, pts1.x023, options2)
|
||||||
if (afficher)
|
if (afficher)
|
||||||
afficher_resultats("régions de confiance avec " * "gct", "fonction 2", "x023", x_min11, fmin23, flag23, sol_exacte_fct2, nb_iters23)
|
afficher_resultats("régions de confiance avec " * "gct", "fonction 2", "x023", x_min23, fmin23, flag23, sol_exacte_fct2, nb_iters23)
|
||||||
end
|
end
|
||||||
@test isapprox(x_min23, sol_exacte_fct2, atol = tol_erreur)
|
@test isapprox(x_min23, sol_exacte_fct2, atol = tol_erreur)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# @testset "Cas test stagnation x" begin
|
||||||
|
# hess(x) = [
|
||||||
|
# 1e15 0 0
|
||||||
|
# 0 1e15 0
|
||||||
|
# 0 0 1e15
|
||||||
|
# ]
|
||||||
|
# grad(x) = [
|
||||||
|
# 10
|
||||||
|
# 10
|
||||||
|
# 10
|
||||||
|
# ]
|
||||||
|
# x0 = ones(3) .* 0.9999
|
||||||
|
# xmin, f_min, flag, nb_iters = Regions_De_Confiance("cauchy", fct1, grad, hess, x0, options2)
|
||||||
|
# if (afficher)
|
||||||
|
# afficher_resultats("stagnation x regions de confiance avec cauchy", "fct0", x0, xmin, f_min, flag, sol_exacte_fct1, nb_iters)
|
||||||
|
# end
|
||||||
|
# @testset "flag" begin
|
||||||
|
# @test flag == 1
|
||||||
|
# end
|
||||||
|
# end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue