Цель состоит в том, чтобы реализовать этот псевдокод в 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