% NOGGRANNHET

%från http://www.it.uu.se/edu/course/homepage/bervet1/lab/linekvsys/noggrannhetstest.m
clear all; clc;

home 

disp('Nu konstrueras ett slumpmässigt lineärt ekvationssystem')
disp('med 5 ekvationer och 5 obekanta.')
disp(' ')
disp('Systemet konstrueras så att:')
disp('  a. den exakta lösningen är att alla obekanta har värdet 1');
disp('  b. systemet är illa-konditionerat.')
disp(' ');
disp('>> Tryck mellanslag för att fortsätta')
pause
disp(' ')

% Konstruera ekvationssystemet

S = rand(5);
D = diag([1 -1 1e-30 -1e-30 1e-30]);
A = S*D*inv(S);

disp('Konditionstalet av A är ');
konditionstal = cond(A);
konditionstal
disp(['Konditionstalet av A är ', num2str(konditionstal)]);
% Konstruera ett högerled z, så att Ax = z har den
% exakta lösningen x = [1 1 1 1 1]
x = ones(5,1);
z = A*x;

% Lös nu systemet
xs = A\z;

% Skriv ut resultatet
disp('Ekvationssystemet är Ax = z, med')
A
z

disp(' ')
disp('>> Tryck mellanslag för att fortsätta')
pause
disp(' ')


disp('Exakt lösning är:')
x
disp('men lösningen beräknad med Matlabs \-operator')
xs

disp(' ')
disp('>> Tryck mellanslag för att fortsätta')
pause
disp(' ')

disp('Insättning av den exakta lösningen x i')
disp('ekvationssystemet ger att')
disp('skillnaden mellan högerled och vänsterled,')
disp('det vill säga z - A*x, är:')
disp(z-A*x)

disp(' ')
disp('>> Tryck mellanslag för att fortsätta')
pause
disp(' ')

disp('Insättning av den beräknade lösningen xs i')
disp('ekvationssystemet ger att')
disp('skillnaden mellan högerled och vänsterled,')
disp('det vill säga z - A*xs, är:')
disp(z-A*xs)

disp(' ')
disp('>> Tryck mellanslag f�r att fortsätta')
pause
disp(' ')

disp('Felet i xs, det vill säga x - xs, är:')
disp(x-xs)