%========================================================================= % PRIME METODY PRO RESENI SOUSTAV LINEARNICH ALGEBRAICKYCH ROVNIC %========================================================================= %------------------------------------------------------------------------- % function [x,gem_error]=gem(A,b); % Gaussova eliminační metoda % pro reseni soustavy Ax=b %------------------------------------------------------------------------- A=[3 2 1; 2 4 5; 3 4 8]; b=[10 25 35]'; gem(A,b); A=[4 5 6 7; 8 10 5 1; 2 6 1 3; 4 1 3 6]; b=[60 47 29 39]'; gem(A,b); %------------------------------------------------------------------------- % function x=gem_sloupcova_pivotace(A,b); % Gaussova eliminační metoda se sloupcovou pivotací % pro reseni soustavy Ax=b %------------------------------------------------------------------------- A=[4 5 6 7; 8 10 5 1; 2 6 1 3; 4 1 3 6]; b=[60 47 29 39]'; gem_sloupcova_pivotace(A,b); %------------------------------------------------------------------------- % function [L,U] = lu_rozklad(A); % Metoda LU rozkladu pro ctvercovou matici A %------------------------------------------------------------------------- A=[3 2 1; 2 4 5; 3 4 8] [L,U]=lu_rozklad(A) A=[4 5 6 7; 8 10 5 1; 2 6 1 3; 4 1 3 6]; [L,U]=lu_rozklad(A) %------------------------------------------------------------------------- % function x=lu_metoda(A,b); % Metoda řešení soustavy Ax=b pomoci % metody LU rozkladu matice A %------------------------------------------------------------------------- A=[3 2 1; 2 4 5; 3 4 8]; b=[10 25 35]'; lu_metoda(A,b); %========================================================================= % ITERACNI METODY PRO RESENI SOUSTAV LINEARNICH ALGEBRAICKYCH ROVNIC %========================================================================= %------------------------------------------------------------------------- % function [x,nm_error,iteraci,H] = jacobi(A, b, x_0, tolerantion, max_iter); % Jacobiova metoda pro reseni soustavy rovnic Ax=b % % vstupní parametry: % A - matice soustavy % b - vektor pravé strany % x_0 - počáteční aproximace (vektor) % tolerantion - nastavení požadované přesnosti (číslo) % max_iter - nastavení maximálního počtu iterací (číslo) % % výstupní paramery: % x - poslední aproximace řešení % nm_error - euklidovská norma rozdílu % dvou po sobě jdoucích aproximací % iteraci - počet iteračních kroků metody %------------------------------------------------------------------------- % A =[6 -3 1; 4 -2 1; 1 3 6]; % b=[15 16 1]'; % x0=[0 0 0]'; % tolerantion=0.01; % max_iter=200; % jacobi(A, b, x0, tolerantion, max_iter); jacobi([6 -3 1; 4 -2 1; 1 3 6],[15 16 1]',[0 0 0]',0.01,200); %------------------------------------------------------------------------- % function [x,nm_error,iteraci,H] = gauss_seidel(A, b, x0, tolerantion, max_iter); % Gauss-Seidelova metoda pro reseni soustavy rovnic Ax=b %------------------------------------------------------------------------- % A =[6 -3 1; 4 -2 1; 1 3 6]; % b=[15 16 1]'; % x0=[0 0 0]'; % tolerantion=0.01; % max_iter=200; % gauss_seidel(A, b, x0, tolerantion, max_iter); gauss_seidel([6 -3 1; 4 -2 1; 1 3 6],[15 16 1]',[0 0 0]',0.01,200); %------------------------------------------------------------------------- % function [x,nm_error,iteraci,H] = sor(A, b, x0, omega, tolerantion, max_iter); % Relaxacni metoda SOR pro reseni soustavy rovnic Ax=b % omega - relaxační parametr %------------------------------------------------------------------------- % A =[6 -3 1; 4 -2 1; 1 3 6]; % b=[15 16 1]'; % x0=[0 0 0]'; % omega=1.1; % tolerantion=0.01; % max_iter=200; % sor(A, b, x0, omega, tolerantion, max_iter); sor([6 -3 1; 4 -2 1; 1 3 6],[15 16 1]',[0 0 0]', 1.2 ,0.01,200); sor([6 -3 1; 4 -2 1; 1 3 6],[15 16 1]',[0 0 0]', 1.4 ,0.01,200); sor([6 -3 1; 4 -2 1; 1 3 6],[15 16 1]',[0 0 0]', 1.536 ,0.01,200); %------------------------------------------------------------------------- % function omega = optimalni_omega(A); % Urceni optimalniho parametru omega pro metodu SOR %------------------------------------------------------------------------- optimalni_omega([6 -3 1; 4 -2 1; 1 3 6]); %------------------------------------------------------------------------ % Specialni pripady %------------------------------------------------------------------------ A=[1 2 -2; 1 1 1; 2 2 1]; b=[1 3 5]'; x0=[0 0 0]'; tolerantion=0.01; max_iter=20; [x,nm_error,iteraci,H_J]=jacobi(A, b, x0, tolerantion, max_iter); [x,nm_error,iteraci,H_GS]=gauss_seidel(A, b, x0, tolerantion, max_iter); % Vlastni cisla iteracni matice Jacobiovy metody eig(H_J) % Vlastni cisla iteracni matice Gauss-Seidelovy metody eig(H_GS) %------------------------------------------------------------------------ A=[5 3 4; 3 6 4; 4 4 5]; b=[12 13 13]'; x0=[0 0 0]'; tolerantion=0.01; max_iter=20; [x,nm_error,iteraci,H_J]=jacobi(A, b, x0, tolerantion, max_iter); [x,nm_error,iteraci,H_GS]=gauss_seidel(A, b, x0, tolerantion, max_iter); % Vlastni cisla iteracni matice Jacobiovy metody eig(H_J) % Vlastni cisla iteracni matice Gauss-Seidelovy metody eig(H_GS) %========================================================================= % Geometricky vyznam iteracnich metod %========================================================================= jacobi_G; gauss_seidel_G sor_G(0.8); sor_G(1.25); %========================================================================= % GRADIENTNI METODY %========================================================================= gradientni_metody_I gradientni_metody_II metoda_nejvetsiho_spadu_2D; metoda_nejvetsiho_spadu_3D; mns_1; mns_2; metoda_sdruzenych_gradientu_2D; metoda_sdruzenych_gradientu_3D;