Salve a tutti, il pivoting di questa fattorizzazione mi sta facendo impazzire, eppure sembra così semplice... sta di fatto che non mi da le stesse matrici LU di matlab. Credo che l'errore sia solo nella permutazione perché la LU classica non mi da problemi. Riuscite a vedere cosa sto sbagliando?
function [ L,U,P ] = fattorizzaLU( A )
%Fattorizzazione LU di una matrice A = LU, con matrice di permutazione
% IMPUT:
% A--> Matrice dei coefficienti
% OUTPUT:
% L,U--> matrici triangolari della fattorizzazione
[n,m] = size (A);
if n ~= m
error ('la matrice deve essere quadrata')
end
L = eye(n);
P = eye(n);
t = A(:,1);
for i= 1:n-1
% Inizio permutazione
for j = 1:length (t)
if t(j) == max (abs(t))
k = j;
end
end
if A(k,i)==0
error ('la matrice é singolare')
end
v = P(i,:);
P(i,:) = P (k,:);
P(k,:) = v;
w = A(i,i:n);
A(i,i:n) = A(k,i:n);
A(k,i:n) = w;
% fine permutazione
g = [zeros(i,1); A(i+1:n,i)]/A(i,i);
L(i+1:n,i) = g(i+1:n);
A(i+1:n,i) = 0;
A(i+1:n,i+1:n) = A(i+1:n,i+1:n)-g(i+1:n)*A(i,i+1:n);
t = [zeros(i+1,1) ; A(i:n,i)];
end
U = A;
end
praticamente dovrei scambiare la riga i-esima con riga k-esima nella matrice di permutazione P che all'inizio è l'identità, la stessa cosa va fatta nella matrice A, solo che non va scambiata l'intera riga ma solo dalla colonna i-esima in poi...