%% TMA671 Lösning av uppgift N.5.50 clear; % Under storgruppsövningen som hölls onsdagen den 9e Maj 2018 % så demonstrerades uppgift 50 i Kapitel 5 i Numerisk Analys % boken. Uppgiften handlar om att approximera egenvärdena till % en matris med hjälp av potensmetoden och inversiteration % Programmet är skrivet av Johannes Borgqvist %% Definiera matrisen och startgissningen A = [6, 2, 1; 2, 3, 1; 1, 1, 1];% Matrisen x = input('Startpunkt x-koordinat:'); y = input('Startpunkt y-koordinat:'); z = input('Startpunkt z-koordinat:'); x0 = [x; y; z]; % Startgissning nuOfIter = input('Antal iterationer:'); % Antal iterationer % Allokera minne till vår egenvektor % Vi vill byta plats på rad 2 och 3 P = [0, 0, 1; 1, 0, 0; 0, 1, 0]; % Shift variabeln shift = 2; % Skriv till användaren fprintf('\n\n=================================================================\n\n'); fprintf('\tUPPGIFT N.5.50: Approximera ett specifikt egenvärde\n\n'); fprintf('=================================================================\n\n'); fprintf('\tInvers iteration med skift\n'); fprintf('-----------------------------------------------------------------\n'); %for outerIndex = 1:length(nuOfIterVec) % Definiera vår faktorisering [L,U] = lu(P*(A-shift*eye(3))); % Börja om från början xk = x0; % Okaj, nu loopar vi över antal iterationer for index = 1:nuOfIter % Skriv ut iterationen %fprintf('Iteration %d\n',index); % Börja iterera: lös för z zk = L\(P*xk); % Lös för y yk = U\zk; % Definiera xk xk = (1/norm(yk))*yk; % Uppdatera vår shift variabel shift = xk'*(A*xk); % Definiera vår faktorisering [L,U] = lu(P*(A-shift*eye(3))); end % Beräkna egenvärdet lambda = (xk')*(A*xk); %end %xk fprintf('-----------------------------------------------------------------\n'); % Jämför med eig [V,D] = eig(A); % Det är det andra egenvärdet vi är intresserade av v = V(:,2); lambdaFacit = D(2,2); fprintf('Egenvärde:\n'); fprintf('\tInvers\t\t\tMatlab\n'); fprintf('\t%0.10f\t\t%0.10f\n',lambda,lambdaFacit); format long fprintf('Egenvektor:\n'); [xk,v] fprintf('=================================================================\n\n');