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
%% 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!

%% 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));