% FATTORIZZAZIONE LU CON TECNICA COMPATTA function [L,U,risp]=lucompat(A,n); % L U
matrici ottenute dalla fattorizzazione LU % risp
controlla se il metodo é applicabile % A
matrice da fattorizzare % n
dimensione della matrice risp=0; U=A(1,:); L=eye(n,n); i=2; while
i<=n for j=1:i-1 if
U(j,j)==0
risp=1;
j=n+1;
i=n+1; end
if risp==0 a=0; for
k=1:j-1
a=a+L(i,k)*U(k,j);
end
L(i,j)=(1/U(j,j))*(A(i,j)-a);
end end for j=i:n
a=0;
for k=1:i-1
a=a+L(i,k)*U(k,j);
end
U(i,j)=A(i,j)-a;
end
i=i+1; end % FATTORIZZAZIONE LU % UTILIZZANDO LA SEGUENZA DI PASSI DEL TEOREMA DI ESISTENZA
ED UNICITA' DELLA STESSA function [L,U,risp]=ludimost(A,n); % L,U matrici
ottenute dalla fattorizzazione LU % risp controlla
se il metodo é applicabile % A
matrice da fattorizzare % n
dimensione della matrice risp=0; L(1,1)=1; U(1,1)=A(1,1); k=2; while k<=n
if U(k-1,k-1)==0
risp=1;
k=n+1;
end if risp==0
L(k,1)=A(k,1)/U(1,1);
% RISOLUZIONE DEL SISTEMA l'* Un-1 = r'
for i=2:k-1
a=0;
for j=1:i-1
a=a+U(j,i)*L(k,j);
end
L(k,i)=(A(k,i)-a)/U(i,i);
end
L(k,k)=1;
% RISOLUZIONE DEL SISTEMA c = Ln-1 * u :
U(1,k)=A(1,k)/L(1,1);
for i=2:k-1
a=0;
for j=1:i-1
a=a+L(i,j)*U(j,k);
end
U(i,k)=(A(i,k)-a)/L(i,i);
end
U(k,k)=A(k,k)-L(k,1:k-1)*U(1:k-1,k);
end
k=k+1; end if risp==1
L=0;
U=0; end % FATTORIZZAZIONE LU CON METODO DI DOOLITTLE function [L,U,risp]=ludoolit(A,n); % L U matrici
ottenute dalla fattorizzazione LU % risp controlla
se il metodo é applicabile % A matrice
da fattorizzare % n dimensione
della matrice risp=0; U=A(1,:); L=eye(n,n); j=1; while j<n
if U(j,j)==0
risp=1;
j=n;
end if risp==0
for i=j+1:n
a=0;
for k=1:j-1
a=a+L(i,k)*U(k,j);
end
L(i,j)=(1/U(j,j))*(A(i,j)-a);
end for i=2:j+1
a=0;
for k=1:i-1
a=a+L(i,k)*U(k,j+1);
end
U(i,j+1)=A(i,j+1)-a;
end end
j=j+1; end if risp==1
L=0;
U=0; end % FATTORIZZAZIONE LU UTILIZZANDO IL METODO DI ELIMINAZIONE DI
GAUSS function [L,U,risp]=lugauss(A,n); % L U
matrici ottenute dalla fattorizzazione LU % risp
controlla se il metodo é applicabile % A
matrice da fattorizzare % n
dimensione della matrice risp=0; L=eye(n,n); U=A; k=1; while k<n
if U(k,k)==0
risp=1;
k=n;
end if risp==0
for i=k+1:n
for j=k+1:n
L(i,k)=U(i,k)/U(k,k);
U(i,j)=U(i,j)-L(i,k)*U(k,j);
end
for j=1:k
U(i,j)=0;
end
end end
k=k+1; end
if risp==1
x=0; end % RISOLUZIONE DI SISTEMI LINEARI CON STRATEGIA DI PIVOTING
PARZIALE function x=lupivpar(A,b,n); % x vettore
soluzione del sistema % A vettore
dei coefficienti del sistema % b vettore
dei termini noti % n dimensione
di A for k=1:n-1
max=0;
j=0;
for i=k:n
% ricerca dell'elemento
if abs(A(i,k))>max
% di massimo modulo sulla
max=abs(A(i,k));
% prima colonna del minore
j=i;
%
A(k,k)
end end if k~=j
% scambio di righe
u=A(k,:);
A(k,:)=A(j,:);
A(j,:)=u;
u=0;
u=b(k);
b(k)=b(j);
b(j)=u;
end for i=k+1:n
for j=k+1:n
L=A(i,k)/A(k,k);
A(i,j)=A(i,j)-L*A(k,j);
end
b(i)=b(i)-L*b(k);
end end % APPLICAZIONE DEL METODO DI GAUSS PER LA RICERCA DEL VETTORE
X: x(n)=b(n)/A(n,n); for i=n-1:-1:1
a=0;
for j=i+1:n
a=a+A(i,j)*x(j);
end
x(i)=(b(i)-a)/A(i,i); end % RISOLUZIONE DI SISTEMI LINEARI CON STRATEGIA DI PIVOTING
TOTALE function x=lupivtot(A,b,n); % x
vettore soluzione del sistema % risp controlla
se il metodo é applicabile % A
vettore dei coefficienti del sistema % b
vettore dei termini noti % n
dimensione di A for k=1:n-1
max=0;
%
Ricerca dell'elemento massimo
for i=k:n
% della matrice A(k,k)
for j=k:n
if abs(A(i,k))>max
max=abs(A(i,k));
y=i;
z(k)=j;
end
end end if k~=y
% Scambio di righe
u=A(k,:);
A(k,:)=A(y,:);
A(y,:)=u;
u=0;
u=b(k);
b(k)=b(y);
b(y)=u;
end if k~=z(k)
% Scambio di colonne
u=0;
u=A(:,k);
A(:,k)=A(:,z(k));
A(:,z(k))=u;
end for i=k+1:n
for j=k+1:n
L=A(i,k)/A(k,k);
A(i,j)=A(i,j)-L*A(k,j);
end
b(i)=b(i)-L*b(k);
end end % APPLICAZIONE DEL METODO DI GAUSS PER LA RICERCA DEL VETTORE
X: x(n)=b(n)/A(n,n); for i=n-1:-1:1
a=0;
for j=i+1:n
a=a+A(i,j)*x(j);
end
x(i)=(b(i)-a)/A(i,i); end u=0; for i=1:n-1
% ordinamento del vettore soluzione
if i~=z(i)
u=x(i)
x(i)=x(z(i));
x(z(i))=u;
end end % RISOLUZIONE DEI SISTEMI LINEARI IN CUI E' STATA CALCOLATA
LA FATTORIZZAZIONE DI
% CHOLESKY function x=lurischo(L,b,n); % x vettore
soluzione del sistema % L vettore
dei coefficienti del sistema % b vettore
dei termini noti % n dimensione
di A U=L'; y(1)=b(1)/L(1,1);
% RISOLUZIONE DEL SISTEMA L * y = b for i=2:n
a=0;
for j=1:i-1
a=a+L(i,j)*y(j);
end
y(i)=(b(i)-a)/L(i,i); end x(n)=y(n)/U(n,n);
% RISOLUZIONE DEL SISTEMA U * x = y for i=n-1:-1:1
a=0;
for j=i+1:n
a=a+U(i,j)*x(j);
end
x(i)=(y(i)-a)/U(i,i); end % RISOLUZIONE DEI SISTEMI LINEARI IN CUI E' STATA CALCOLATA
LA FATTORIZZAZIONE LU function x=lurisol(L,U,b,n); % x
vettore soluzione del sistema % L,U fattorizzazione
LU della matrice dei coefficienti del sistema % b
vettore dei termini noti % n
dimensione di A y(1)=b(1);
% RISOLUZIONE DEL SISTEMA L * y = b for i=2:n
a=0;
for j=1:i-1
a=a+L(i,j)*y(j);
end
y(i)=b(i)-a; end x(n)=y(n)/U(n,n);
% RISOLUZIONE DEL SISTEMA U * x = y for i=n-1:-1:1
a=0;
for j=i+1:n
a=a+U(i,j)*x(j);
end
x(i)=(y(i)-a)/U(i,i); end % FATTORIZZAZIONE LU PER LE MATRICI SIMMETRICHE function [L,U,C,risp,r]=lusimm(A,n,fc); % L,U
matrici ottenute dalla fattorizzazione LU % C
matrice ottenuta dalla fattorizzazione di Cholesky % risp
controlla se il metodo é applicabile % r
indica se si vuole o meno calcolare la fattorizzazione di Cholesky % A
matrice da fattorizzare % n
dimensione della matrice % fc
considera o meno l'intero algoritmo del calcolo della fattorizzazione di
Cholesky risp=0; C=0; U=triu(A); L=eye(n); p=0; k=1; while k<n
if U(k,k)==0
risp=1;
k=n;
else
if U(k,k)<0
p=1;
end
for i=k+1:n
L(i,k)=U(k,i)/U(k,k);
for j=i:n
U(i,j)=U(i,j)-L(i,k)*U(k,j);
end
end end
k=k+1; end if U(n,n)<0
p=1; end r=0; if p==1 & risp==0 & fc==0
disp('La matrice non é anche definita
positivamente');
disp('per cui non é fattorizzabile secondo
CHOLESKI');
r=0; end if p==0 & risp==0 & fc==0
disp('La matrice puo'' essere
fattorizzabile secondo CHOLESKY');
r=input('vuoi calcolarla? (se SI premere ''
1 '') : '); end if r==1
for k=1:n
D(k,k)=sqrt(U(k,k));
end
C=L*D; else
C=0; End % FATTORIZZAZIONE LU PER MATRICI TRIDIAGONALI function [L,U,risp]=lutrid(A,n); % L,U
matrici ottenute dalla fattorizzazione LU % risp
controlla se il metodo é applicabile % A
matrice da fattorizzare % n
dimensione della matrice risp=0; U(1,1)=A(1,1); L(1,1)=1; i=2; while i<=n
if U(i-1,i-1)==0
risp=1;
i=n+1;
end if risp==0
L(i,i)=1;
L(i,i-1)=A(i,i-1)/U(i-1,i-1);
U(i-1,i)=A(i-1,i);
U(i,i)=A(i,i)-L(i,i-1)*U(i-1,i);
end
i=i+1; end if risp==1
L=0;
U=0; end
|