% Sauer 2.3.2
% Denna kod skrevs på övningen 2017-09-20 i SF1514/18/19

clear

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

b = [3 6 1 0 1]';
x = [1 1 1 -1 -1]';

bs = [2.95 6.05 1.04 -0.03 0.95]';
xs = [-2.75 2.85 2.90 -3.47 -2.63]';

% Fråga 1
rel_fel_x = max(abs(xs-x)) / max(abs(x))
rel_fel_b = max(abs(bs-b)) / max(abs(b))
% max(abs(x)) = norm(x, Inf)
experimentella_cond = rel_fel_x / rel_fel_b

% Fråga 2
bs = b*1.02
xs = A\bs
rel_fel_x = max(abs(xs-x)) / max(abs(x))
rel_fel_b = max(abs(bs-b)) / max(abs(b))
% max(abs(x)) = norm(x, Inf)
experimentella_cond = rel_fel_x / rel_fel_b

% Jämför med cond(A)
condA = cond(A, Inf)

% Slutsats: störningen i Fråga 2 hjälpte i detta fall inte för
% att uppskatta konditionstalet. Störningen i Fråga 1 var bättre.
% Det bästa är att slumpa fram många olika högerled b, beräkna
% det experimentella konditionstalet för alla och sedan ta det
% största.
