Guest User

Untitled

a guest
Jan 16th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 3.41 KB | None | 0 0
  1. function [x] = GAUSS(A,b)
  2.  
  3. %gaussova eliminace
  4.  
  5. close all; clc;
  6.  
  7.  
  8. if nargin == 0 
  9.     A = [1 1 2 3; 1 3 2 2; 0 9 1 6; 1 2 3 4];
  10.     b = [1 ; 2 ; 3 ; 6];
  11.  
  12.     %A = randi ([1,3], [6,6]);
  13.     %b = randi ([1,3], [6,1]);
  14.  
  15.  
  16.     %A=[1 3 4 2 2; 0 1 3 3 2; 0 0 2 3 1; 0 0 0 0 0; 0 0 0 0 0]
  17.     %b=[3 ; 2 ; 1 ; 0 ; 0]
  18. end
  19.  
  20.  
  21. n = size (A,1);
  22. p = size (A,1);
  23.  
  24. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  25. %overeni resitelnosti
  26.  
  27. if  rank (A) ~= rank ([A b])
  28.     disp('NEMA RESENI');
  29.    
  30.     normalni=rank (A)
  31.     rozsirena=rank ([A b])
  32.    
  33.     return;
  34. end
  35.  
  36.  
  37. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  38. %prevod matice do HTT
  39.  
  40. for i=1:n-1
  41.    
  42.    
  43.       if A(i,i)== 0
  44.         ind = find (A(i:end,i)~=0);
  45.            
  46.             if isempty(ind)
  47.                 continue;
  48.             else
  49.                     p=A(i,:);
  50.                     A(i,:) = A(ind(1)+i-1,:);
  51.                     A(ind(1)+i-1,:) = p;
  52.                    
  53.                     m=b(i,1);
  54.                     b(i,1) = b(ind(1)+i-1,1);
  55.                     b(ind(1)+i-1,1) = m;              
  56.             end
  57.       end
  58.    
  59.      
  60.    for  j=i+1:n
  61.        
  62.        f=A(j,i)/A(i,i)
  63.        for k=i:n
  64.            
  65.            
  66.            A(j,k)=A(j,k)-A(i,k)*f
  67.                
  68.            
  69.        end
  70.        b(j,1)=b(j,1)-f*b(i,1)
  71.        
  72.    end
  73. end
  74. %nyni mame matici v HORNIM tt
  75.  
  76.  
  77. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  78. %osetreni nekonecne mnoha reseni
  79.  
  80.  
  81. if A(n,n)==0     %tj bude nekonecne mnoho reseni
  82.  
  83.         for i=n:-1:2
  84.  
  85.             if A(i,i)==0
  86.  
  87.                 disp('nekonecne mnoho reseni, konecne x je jedno z mnoha');
  88.                 null(A)
  89.                 for j=1:n
  90.                     a=1;        %nastaveni slozky vzsledneho vektoru
  91.                     b(j,1)=b(j,1)-a*A(j,i)            
  92.                 end
  93.  
  94.                 A=A(1:n-1,1:n-1) %zmenseni rozmeru
  95.                 b=b(1:n-1,:)
  96.                 n = size (A,1);
  97.  
  98.             else
  99.                 break;
  100.  
  101.             end
  102.         end
  103.  
  104.         disp('nasledne vypadaji matice a A a vektor b pred spustenim zpetneho chodu');
  105.         A
  106.         b  
  107.  
  108.         %zpetny chod
  109.  
  110.         for i=n:-1:2
  111.  
  112.  
  113.  
  114.            for j=i-1:-1:1
  115.                f=A(j,i)/A(i,i)
  116.  
  117.  
  118.                for k=n:-1:i
  119.                    A(j,k)=A(j,k)-A(i,k)*f
  120.                end
  121.                b(j,1)=b(j,1)-f*b(i,1)
  122.            end
  123.         end   %nyni mame matici v diagonalnim tvaru
  124.        
  125.         %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  126.         %reseni
  127.        
  128.         x=ones(p,1);
  129.         for m=1:n
  130.  
  131.             x(m)=b(m,1)/A(m,m);
  132.  
  133.         end    %vysledek
  134.  
  135.         x
  136.        
  137. else    %tj bude jedno reseni
  138.  
  139.  
  140.  
  141.         %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  142.         %zpetny chod
  143.  
  144.         for i=n:-1:2
  145.  
  146.  
  147.  
  148.            for j=i-1:-1:1
  149.                f=A(j,i)/A(i,i)
  150.  
  151.  
  152.                for k=n:-1:i
  153.                    A(j,k)=A(j,k)-A(i,k)*f
  154.                end
  155.                b(j,1)=b(j,1)-f*b(i,1)
  156.            end
  157.         end   %nyni mame matici v diagonalnim tvaru
  158.  
  159.         %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  160.         %reseni
  161.  
  162.         x=zeros(n,1);
  163.         for m=1:n
  164.  
  165.             x(m)=b(m,1)/A(m,m);
  166.  
  167.         end    %vysledek
  168.  
  169.         A
  170.         b
  171.         x
  172.  
  173. end
  174.  
  175.  
  176. end
Add Comment
Please, Sign In to add comment