% Programma per la risoluzione di sistemi triangolari
% 8/3/2017

clear
n=input('Inserire la dimensione della matrice A  ') ;
A=zeros(n) ;
risp=input('Vuoi inserire la matrice? (s/n) ','s') ; 

if risp=='s'
    for i=1:n
        for j=1:i
            A(i,j)=input(['Elemento (', num2str(i), ',' num2str(j), ') ']) ;
        end
    end
else
for i=1:size(A,1) 
    for j=1:i 
        A(i,j)=i^2+j/(2+i); 
    end 
end
end
disp(A)

% Norme di matrice - numero condizionamento
n1=norm(A,1) ;
n2=norm(A,2) ;
K=cond(A) ;
disp(['Numero di condizionamento di A: ' num2str(K)])
b=ones(n,1) ;
x=zeros(n,1) ;


% Sistema triangolare inferiore

x(1)=b(1)/A(1,1) ;
for i=2:n
    somma=A(i,1:i-1)*x(1:i-1);
    x(i)=(b(i)-somma)/A(i,i) ;
end
disp('Soluzione: ' )
disp(x)

% Sistema triangolare superiore
% Esempio: A=[1  3 4 5;
%             0 -1 2 0.5;
%             0  0 2   3;
%             0  0 0  6];

x=zeros(n,1) ;
% Inserimento di A
A=zeros(n) ;
if risp=='s'
    for i=1:n
        for j=i:n
            A(i,j)=input(['Elemento (', num2str(i), ',' num2str(j), ') ']) ;
        end
    end
else
    for i=1:n
        for j=i:n
            A(i,j)=sqrt(i+1)-0.2 ;
        end
    end
end
disp(A)
cond(A)
% Risoluzione del sistema
x(n)=b(n)/A(n,n) ;
for i=n-1:-1:1
    somma=A(i,i+1:n)*x(i+1:n) ;
    x(i)=(b(i)-somma)/A(i,i) ;
end
format short
disp('Soluzione: ')
disp(x)
