La décomposition LU avec pivot partiel Matlab

Je suis en train de mettre en place mes propres décomposition LU avec pivot partiel. Mon code est ci-dessous et, apparemment, fonctionne très bien, mais pour certaines matrices, il donne des résultats différents lors de la comparaison avec le haut- [L, U, P] = lu(A) fonction dans matlab

Peut quelqu'un endroit où est-ce mal?

function [L, U, P] = lu_decomposition_pivot(A)
    n = size(A,1);
    Ak = A;
    L = zeros(n);
    U = zeros(n);
    P = eye(n);
    for k = 1:n-1
        for i = k+1:n
            [~,r] = max(abs(Ak(:,k)));

            Ak([k r],:) = Ak([r k],:);
            P([k r],:) = P([r k],:);

            L(i,k) = Ak(i,k) / Ak(k,k);
            for j = k+1:n
                U(k,j-1) = Ak(k,j-1);
                Ak(i,j) = Ak(i,j) - L(i,k)*Ak(k,j);
            end
        end
    end
    L(1:n+1:end) = 1;
    U(:,end) = Ak(:,end);
return

Voici les deux matrices j'ai testé avec. La première est la bonne, alors que le second a quelques éléments inversé.

A = [1 2 0; 2 4 8; 3 -1 2];

A = [0.8443 0.1707 0.3111;
     0.1948 0.2277 0.9234;
     0.2259 0.4357 0.4302];

Mise à JOUR

J'ai vérifié mon code et la correction de certains bugs, mais encore il manque quelque chose, avec le pivot partiel. Dans la première colonne les deux dernières lignes sont toujours inversées (à comparer avec la suite de lu() dans matlab)

function [L, U, P] = lu_decomposition_pivot(A)
    n = size(A,1);
    Ak = A;
    L = eye(n);
    U = zeros(n);
    P = eye(n);
    for k = 1:n-1
        [~,r] = max(abs(Ak(k:end,k)));
        r = n-(n-k+1)+r;
        Ak([k r],:) = Ak([r k],:);
        P([k r],:) = P([r k],:);
        for i = k+1:n
            L(i,k) = Ak(i,k) / Ak(k,k);
            for j = 1:n
                U(k,j) = Ak(k,j);
                Ak(i,j) = Ak(i,j) - L(i,k)*Ak(k,j);
            end
        end
    end
    U(:,end) = Ak(:,end);
return

OriginalL'auteur BRabbit27 | 2013-03-08