%% TMA671 Lösning av uppgift N.5.44 clear; % Under storgruppsövningen som hölls onsdagen den 14e Maj 2018 % så demonstrerades uppgift 44 i Kapitel 5 i Numerisk Analys % boken. Uppgiften handlar om att approximera de största och % minsta egenvärdena till en matris med hjälp av potensmetoden % och inversiteration till en matris % Programmet är skrivet av Johannes Borgqvist %% Definiera matrisen och startgissningen A = [1, 2, 3, 0; 4, 1, 2, 5; 2, 1, 3, 1; 2, 3, 0, 4];% Matrisen [r, c] = size(A); % Dimension på A nuOfIter = 50; % Antal iterationer % Vi beräknar egenvärdena med hjälp av ''eig '' [V,D] = eig(A); % Våra egenvärden eigenValues = diag(D); % Vi beräknar de största och minsta egenvärdena som facit eigMax = max(eigenValues); % Största värde eigMin = -min(abs(eigenValues)); % Minsta värde % Vi skriver ut till användaren % Skriv till användaren fprintf('\n\n==============================================================================\n\n'); fprintf('\tUPPGIFT N.5.44: Approximera ett specifikt egenvärde\n\n'); fprintf('\n\n==============================================================================\n\n'); fprintf('\tResultat med eig:\n\n\t\tlambdaMax\t=\t%0.6f\n\n\t\t\t\t&\n\n\t\tlambdaMin\t=\t%0.6f\n\n',eigMax,eigMin); %% Vi beräknar lambdaMax med potensmetod och lambdaMin med inversiteration % För inversiteration använder vi inte pivotering utan gör det enkelt för % oss % Generera startgissningar x = rand(r,1); % Potensmetod y = rand(r,1); % Invers iteration % Vi loopar igenom och utför dessa iterationer % ''nuOfIter'' gånger for index = 1:nuOfIter x = A*x; % Potensmetod y = A\y; % Invers iteration x = x/norm(x); % Normalisering potens y = y/norm(y); % Normalisering invers end % Beräkna lambdaMax från inversmetoden lambdaMax = x'*(A*x); % Beräkna lambdaMin från inversmetoden lambdaMin = y'* (A*y); % Skriv ut största egenvärde fprintf('\tResultat med potens:\n\n\t\tlambdaMax\t=\t%0.6f\n\n',lambdaMax); % Skriv ut minsta egenvärde fprintf('\tResultat med invers:\n\n\t\tlambdaMin\t=\t%0.6f\n\n',lambdaMin); fprintf('\n\n==============================================================================\n\n');