Escolar Documentos
Profissional Documentos
Cultura Documentos
[A,b]=generator();
threshold=10^(-6);
maxiter=40;
n = length(A);
x=zeros(n,1);
k=0;
r = b - A * x;
p = r;
rs = r' * r;
while (norm(rs, inf) > threshold)
M = A * p;
alpha = rs/ (p'*M);
x = x + alpha*p;
r = r - alpha*M;
rn = r' * r;
if k > maxiter
break;
end
p = r + (rn / rs) * p;
rs = rn;
k=k+1;
end
% function [x, error] = gmres()
max_iterations=40;
[A,b]=generator();
threshold=10^(-6);
n = length(A);
x=zeros(n,1); % Same as initial vector x0
m = max_iterations;
e1=zeros(n,1);
e1(1)=1;
%use x0 as the initial vector=all zeros
r=b-A*x;
b_norm = norm(b);
error = norm(r)/b_norm;
%------arnoldi iteration-----------------------------------------
[H(1:k+1,k),Q(:,k+1)] = arnoldi(A, Q, k);
%eliminate H(i+1,i)
h(k) = cs_k*h(k) + sn_k*h(k+1);
h(k+1) = 0.0;
end
function [h,q] = arnoldi(A, Q, k)
q = A*Q(:,k);
for i = 1:k
h(i)= q'*Q(:,i);
q = q - h(i)*Q(:,i);
end
h(k+1) = norm(q);
q = q / h(k+1); % Produces the orthogonal column in Krylov space
end
function [A,b] = generator()
D = [1:0.01:9,10,12,16,24];
[Q,~] = qr(randn(805));
A = Q*diag(D)*Q';
b=randi(10,805,1);