% Detta program demonstrerar hur tidsbesparande det
% är att använda LU-faktorisering för att lösa en
% följd av ekvationssystem där alla systemen har
% samma koefficientmatris och de olika högerleden
% inte är tillgängliga samtidigt.
disp(' ')
n = input('Ange problemstorlek (antal ekvationer i systemet), n: ');

disp(' ')
disp(['Nu genereras ett slumpmassigt system Ax = b med ' num2str(n,'%5i') ' ekvationer'])

A = rand(n);
b = rand(n,1);

disp(' ')
disp('Nu loses systemet Ax = b')
pause(0.1)

% Lös _ett_ system

tic;

x = A\b;

t1 = toc;

disp(' ')
disp('Nu anvands backslash-operatorn (\) för att losa en foljd av 5')
disp('ekvationssystem som alla har A som koefficientmatris')
pause(0.1)

% Lös en följd av tio system och använd '\'-operatorn

tic;

for i = 1:5
    b = x;
    x = A\b;
end

t10backslash = toc;

disp(' ')
disp('Nu LU-faktoriseras koefficientmatrisen A och en foljd av 5')
disp('ekvationssystem loses med anvandning av LU-faktoriseringen')
pause(0.1)

% Lös en följd av tio system och använd LU-faktorisering

tic;

[L, U, P] = lu(A);

for i = 1:5
    b = x;
    d = L\(P*b);
    x = U\d;
end

t10LU = toc;

% Skriv ut de uppmätta tiderna

disp(' ')
disp('---------------------------------------------------------')
disp(' ')
disp('RESULTAT')
disp(' ')
disp(['Antal obekanta, n: ' num2str(n) ])
disp(' ')
disp(['Uppmatt tid for att losa ett system, T = ' num2str(t1,'%12.6f') ' s'])
disp(' ')
disp('Uppmatt tid for att losa 5 system:')
disp(['    Med backslash-operatorn: ' num2str(t10backslash,'%12.6f') ' s'])
disp(['    Med LU-faktorisering   : ' num2str(t10LU,'%12.6f') ' s'])
