diff --git a/Optimisation/TP/TP3-diff-finies/main_diff_finies_cosinus.m b/Optimisation/TP/TP3-diff-finies/main_diff_finies_cosinus.m index 294112c47ad15fb150a2d2888ebfeabfdef91ac2..0f7ac088fdd7e738ce3ef5d8e34a5cf4247b1268 100755 --- a/Optimisation/TP/TP3-diff-finies/main_diff_finies_cosinus.m +++ b/Optimisation/TP/TP3-diff-finies/main_diff_finies_cosinus.m @@ -2,8 +2,9 @@ % Date : décembre 2017 % % Test de l'algorithme de différences finies avant sur la fonction cosinus -% fun1(x) = cos(x) -% fun2(x) = cos(x) + alpha*rand(1) +% fun1(x) = -cos(x) +% fun2(x) = -cos(x) + alpha*rand(1) +% fun3x)( = [cos(x(1)*x(2)) ; x(1)^2 ; x(1)*x(2)]; % Avec 2 points différents % @@ -38,11 +39,13 @@ disp('Test de l''algorithme de différences finies sur la fonction cosinus'); fun1 = @(x) -cos(x); fun2 = @(x) -cos(x) + 1.e-8*rand(1); true_jac = @(x) sin(x); +fun3 = @(x) [cos(x(1)*x(2)) ; x(1)^2 ; x(1)*x(2)]; +Jac_fun3 = @(x) [-sin(x(1)*x(2))*x(2) -sin(x(1)*x(2))*x(1) ; 2*x(1) 0 ; x(2) x(1)]; % Variables pour le choix de la methode de difference finie list_diff_finies = {'avants','centrees','complexes'}; %%%%% MODIFIER LE NUMERO APRES AVOIR CODE LA FONCTION ASSOCIEE %%%%%%%%%%% -methode_finite_diff = list_diff_finies{1}; +methode_finite_diff = list_diff_finies{3}; % Calcul de l'erreur sur la fonction dans le cas bruité et non bruité omega_true_fun = eps((1)); @@ -72,8 +75,11 @@ x0 = pi/3; x1 = 1.e6*pi/3; % Ordres pour faire les tests (16 + celui de h*) -ordrestrue = ([1:floor(-log10(h_star_true_fun)), -log10(h_star_true_fun), ceil(-log10(h_star_true_fun)):16]); -ordresper = ([1:floor(-log10(h_star_per_fun)), -log10(h_star_per_fun), ceil(-log10(h_star_per_fun)):16]); +ordrestrue = linspace(1,16,10000); +ordresper = ordrestrue; +% +% ordrestrue = ([1:floor(-log10(h_star_true_fun)), -log10(h_star_true_fun), ceil(-log10(h_star_true_fun)):16]); +% ordresper = ([1:floor(-log10(h_star_per_fun)), -log10(h_star_per_fun), ceil(-log10(h_star_per_fun)):16]); % Initialisation des vecteurs d'erreur err_x0 = zeros(1,length(ordrestrue)); @@ -115,7 +121,21 @@ affichage_erreur(ordrestrue, err_x1, h_star_true_fun, 'x1', methode_finite_dif affichage_erreur(ordresper, err_x0p, h_star_per_fun, 'x0p', methode_finite_diff, LW); - +% Comparaison des matrice jacobiennes cas fun3 +x0 = [1 ; 2]; +disp("------------------------------------------------------------------") +disp("Test de la matrice jacobienne sur un cas de R^n à valeurs dans R^m") +disp("------------------------------------------------------------------") +disp("diff_finies(fun3,x0,omega) - Jac_fun3(x0) = ") +switch methode_finite_diff + case 'avants' + omega = sqrt(eps); + case 'centrees' + omega = eps^(1/3.); + otherwise + omega = eps; +end +diff_finies(fun3,x0,omega) - Jac_fun3(x0) @@ -170,7 +190,7 @@ function Jac = forwardfiniteDiff(fun,x,h) % Jac : Matrice jacobienne approximé par les différences finies % real(m,n) % ------------------------------------ -Jac = 0; +Jac = zeros(length(fun(x)),length(x)); end function Jac = centredfiniteDiff(fun, x, h) @@ -186,7 +206,7 @@ function Jac = centredfiniteDiff(fun, x, h) % Jac : Matrice jacobienne approximé par les différences finies % real(m,n) % ------------------------------------ -Jac = 0; +Jac = zeros(length(fun(x)),length(x)); end function Jac = derivee_complexe(fun, x,h) @@ -203,7 +223,7 @@ function Jac = derivee_complexe(fun, x,h) % Jac : Matrice jacobienne approximé par les différences finies % real(m,n) % ------------------------------------ -Jac = 0; +Jac = zeros(length(fun(x)),length(x)); end