% Soluzione di un sistema lineare mal condizionato
% con metodi vari e confronto degli errori,
% si veda l'esercizio 4 del 09/12/2008 
% (http://www.dm.unibo.it/~achilles/calc/calc08-12-09.pdf)
% e Quarteroni-Saleri, esempio 5.9, pag. 147.
% I programmi da utilizzare sono:
% http://www.dm.unibo.it/~achilles/calc/Programmi_CS4a/itermeth.m
% http://www.dm.unibo.it/~achilles/calc/Programmi_CS4a/sol.m


A = hilb(13)
% numero di condzionamento rispetto alla norma 2
cond(A)
b=A*ones(13,1)
[L, U, P] = lu(A)
bperm = P*b;
% sostituzione in avanti
y(1) = bperm(1);
for k = 2:13 y(k)=bperm(k)-L(k,1:k-1)*y(1:k-1)';end;
% sostituzione all'indietro
xlu(13)=y(13)/U(13,13);
for k=12:-1:1 xlu(k)=(y(k)-U(k,k+1:13)*xlu(k+1:13)')/U(k,k);end;
xlu'
errlu = norm(ones(13,1) - xlu')

% Il calcolo precedente puo' esssere eseguito piu' comodamente 
% con lo script sol.m.
xsol = sol(A,b)
errsol = norm(ones(13,1) - xsol)

% Soluzione del sistema lineare usando \.
x = A\b
err = norm (ones(13,1) - x)

% Soluzione del sistema lineare usando il metodo iterativo di Gauss-Seidel,
% implementato nello script itermeth.m.
[xgs, iter]  = itermeth(A,b,zeros(13,1),20000,1.e-10,'G')
errgs = norm (ones(13,1) - xgs)



