Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Codici di calcolo numerico, Esercizi di Calcolo Numerico

Codici di calcolo numerico per risoluzione quesiti esame

Tipologia: Esercizi

2024/2025

Caricato il 18/08/2025

nicolo-magoni
nicolo-magoni 🇮🇹

11 documenti

1 / 1

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
%% Problema di minimo GRADIENTE, Funzione Energia
% Problema di minimo associato:
% Sia A ∈ R^(n×n) simmetrica e definita positiva, allora x ∈ R^n è soluzione
% del sistema lineare Ax = b se e solo se minimizza la funzione energia:
% Φ(y) = (1/2)y^T A y - y^T b
phi = @(y) (1/2)*y'*A*y - y'*b; % Definizione funzione energia
grad_phi = @(y) A*y - b; % Gradiente della funzione
% Per definizione, individuo il Punto di Minimo di phi per y = x
x_min = A\b; % x_min = ;
% Valuto phi nel punto di minimo;
phi_min = phi(x_min); % phi_min = ;
% Per definizione, la Direzione di Discesa Massima nel punto x,
% equivale a -grad_phi(x):
dir_discesa1 = -grad_phi(x1);
%% Gradiente Coniugato MODIFICATO, pcg, direzioni, angoli, discesa
% Gradiente Coniugato MODIFICATO
x = x0;
r = b - A*x;
p = r;
for iter = 1:3
alfa = (p' * r) / (p' * A*p);
x = x + alfa * p;
r = r - alfa * A*p;
beta = (p' * A * r) / (p' * A*p);
p_Old = p;
p = r - beta * p;
% Bonus: Trovo angoli fra direzioni successive
theta = acos((p_Old' * p) / (norm(p) * norm(p_Old)));
theta = rad2deg(theta); % Converto in deg°
fprintf('Iterazione: %d; norm(p) = %.4f; theta[°] = %.4f; \n', ...
iter, norm(p), theta);
end
%% Metodo del gradiente a mano
phi = @(y) 1/2*y'*A*y-y'*b;
x0 = b;
r0 = b-A*x0;
alpha0 = (r0'*r0)/(r0'*A*r0);
x1 = x0 + alpha0*r0;
disp(phi(x0)); disp(phi(x1));

Anteprima parziale del testo

Scarica Codici di calcolo numerico e più Esercizi in PDF di Calcolo Numerico solo su Docsity!

%% Problema di minimo GRADIENTE, Funzione Energia

% Problema di minimo associato: % Sia A ∈ R^(n×n) simmetrica e definita positiva, allora x ∈ R^n è soluzione % del sistema lineare Ax = b se e solo se minimizza la funzione energia: % Φ(y) = (1/2)y^T A y - y^T b phi = @(y) (1/2)y'Ay - y'b; % Definizione funzione energia grad_phi = @(y) A*y - b; % Gradiente della funzione % Per definizione, individuo il Punto di Minimo di phi per y = x x_min = A\b; % x_min = ; % Valuto phi nel punto di minimo; phi_min = phi(x_min); % phi_min = ; % Per definizione, la Direzione di Discesa Massima nel punto x, % equivale a -grad_phi(x): dir_discesa1 = -grad_phi(x1);

%% Gradiente Coniugato MODIFICATO, pcg, direzioni, angoli, discesa

% Gradiente Coniugato MODIFICATO x = x0; r = b - Ax; p = r; for iter = 1: alfa = (p' * r) / (p' * Ap); x = x + alfa * p; r = r - alfa * Ap; beta = (p' * A * r) / (p' * Ap); p_Old = p; p = r - beta * p; % Bonus: Trovo angoli fra direzioni successive theta = acos((p_Old' * p) / (norm(p) * norm(p_Old))); theta = rad2deg(theta); % Converto in deg° fprintf('Iterazione: %d; norm(p) = %.4f; theta[°] = %.4f; \n', ... iter, norm(p), theta); end

%% Metodo del gradiente a mano

phi = @(y) 1/2y'Ay-y'b; x0 = b; r0 = b-Ax0; alpha0 = (r0'r0)/(r0'Ar0); x1 = x0 + alpha0*r0; disp(phi(x0)); disp(phi(x1));