PA = LU факторизация Matlab - PullRequest
       37

PA = LU факторизация Matlab

0 голосов
/ 27 октября 2019

Цель состоит в том, чтобы реализовать этот псевдокод в Matlab

ВХОД: A - это матрица nxm, m> = n
ВЫХОД: Факторизация PA = LU, хранящаяся в одной матрице и одном векторе

 STEP 1: Set P = (1:n)', set M = A

 STEP 2: For i = 1,2,...,n-1 do STEPS 3-6 

 STEP 3: Find k so that abs(M(k,i)) >= abs(M(l,i)) for l = i,i+1,...,n

 STEP 4: Interchange rows i and rows k of M and entries i and k of P

 STEP 5: If M(i,i) = 0
         OUTPUT("Matrix is rank deficient")

 STEP 6: For j = i+1,i+2,...,n do STEPS 7-9

 STEP 7: Set  a = M(j,i)/M(i,i)

 STEP 8: Set  M(j,i:end) = M(j,i:end) - a*M(i,i:end)

 STEP 9: Set  M(j,i) = a

 STEP 10: OUTPUT([P,M]); STOP.

В конце ШАГА 6 для каждого i у вас есть матрица [P (i), A (i)]
Построить матрицу

Это код, который я написал:

clear all; close all;
r = RandStream('mt19937ar','Seed',1234);
A = r.randn(6,6);

out = [];
P= (1:6)';
M=A;
for i=1:5
    for l=i:6
        for k=l+1:6
            if abs(M(k,i)) >= abs(M(l,i))
                final_K=k;
                %interchange rows and entries
                temp=M(i,:);
                M(final_K,:)=M(i,:);
                M(i,:)=temp;

                temp_2=P(1,i);
                P(1,final_K)=P(1,i);
                P(1,i)=temp_2; 
            end
        end    

    end
    if M(i,i) == 0
       disp('Matrix is rank deficient');
    end 

    for j=i+1:6
        a=M(j,i)/M(i,i);
        M(j,i:end) = M(j,i:end) - a*M(i,i:end);
        M(j,i)=a;
        out = [P,M];
    end

end

Я ожидаю, что на выходе будет матрица 30 * 7

...