function T=soustava(A,B) % funkce vypocita reseni soustavy linearnich rovnic % pomoci ctyr metod % metoda opacneho deleni a inverzni matice % Cramerovo pravidlo % Gaussova eliminacni metoda % Parametry % A matice soustavy % B vektor pravych stran % vymaz obsahu prikazoveho okna % nesmi byt clear, jinak si zrusim take matice A a B clc if nargin~=2 error('Chybny pocet parametru'); end % zjistim resitelnost h=rank(A); % hodnost matice soustavy hr=rank([A B]); % hodnost rozsirene matice soustavy if h ~= hr error('Soustava nema reseni'); end %zjistim rozmer matice j=size(A); n=j(1); % n=pocet radku matice A % metoda opacneho deleni % A*X=B -> X=A\B v1=A\B; disp('Vysledky pomoci metody opacneho deleni') disp(v1) disp('Pokracovat ?, stiskni cokoliv') pause % metoda vypoctu pomoci inverzni matice % A*X=B % A^(-1)*A*X=A^(-1)*B A^(-1) je vyraz pro inverzni matici v2=inv(A)*B; disp('Vysledky pomoci inverzni matice') disp(v2) disp('Pokracovat ?, stiskni cokoliv') pause % vypocet Cramerovym pravidlem for i=1:n BI=A; BI(:,i)=B; % nahrad prislusny sloupec vektorem pravych stran v3(i)=det(BI)/det(A); % vydel determinanty upravene a puvodni matice end disp('Vysledky pomoci Cramerova pravidla') disp(v3) disp('Pokracovat ?, stiskni cokoliv') pause % vypocet Gaussovou eliminacni metodou % vytvorim rozsirenou matici soustavy N=[A B]; % take by slo napsat % N=A; % N(:, j(2)+1)=B; % reseni Gaussovou eliminacni metodou for i=1:n r=N(i,:); % radek, ve kterem chci nuly ve sloupci i for k=(i+1):n vrp=-r .* N(k,i); % vynasobeny radek puvodni % vrp=N(k,i) .* (-r); % mohu napsat i obracene, u prvkoveho!!! vrn=N(k,:) .* r(i); % vynasobeny radek novy rn=vrp + vrn; % soucet radku N(k,:)=rn; % nahrada novym radkem v puvodni matici % disp(N); % pokud chci zobrazit kroky metody end end % nyni zpetny chod, vypocet reseni y1=N(:, j(2)+1); % y1 je modifikovany sloupec pravych stran for i=n:-1:1 % n je pocet radku v matici x(i)=y1(i); for k=n:-1:(i+1) x(i)=x(i)-x(k)*N(i,k); end x(i)=x(i)/N(i,i); end disp('Vysledky:') disp(x); T=x;