Advertisement
Guest User

Untitled

a guest
Jul 13th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 5.57 KB | None | 0 0
  1. clear
  2. clc
  3. close all
  4. format rat
  5. A=[5 1 -1 0 0;1 2 0 -1 0;1 3 0 0 -1];
  6. c=[1;1;0;0;0];
  7. b=[5;6;3];
  8. Basis=[1 2 5];
  9. changebed=0;
  10. changevar=1;
  11. changeb=0;
  12. changec=0;
  13.  
  14. vektor=[10 7 0 0 0 -1 20];
  15. result=sensitivitaetsanalyse(A,b,c,Basis,changevar,changebed,changeb,changec,vektor);
  16.  
  17.  
  18. function L=sensitivitaetsanalyse(A,b,c,Basis,changevar,changebed,changeb,changec,vektor)
  19. [zeilen,spalten]=size(A);
  20. if (changeb+changevar+changec+changebed)>1
  21.     disp("Error")
  22.     return
  23. end
  24.  
  25. %%Änderung in b
  26. if changeb==1
  27.    
  28.     disp("Änderung in b");
  29.     Aj=zeros(zeilen,zeilen);
  30.  
  31.     for i=1:zeilen
  32.         Aj(:,i)=A(:,Basis(i));  %Bestimmung von Â
  33.    
  34.     end
  35.    
  36.     cstrichj=zeros(1,zeilen);
  37.    
  38.     for i=1:zeilen
  39.         cstrichj(i)=c(Basis(i),1);    
  40.        
  41.        
  42.     end
  43.    
  44.     xstrich=inv(Aj)*vektor;
  45.     for n=1:zeilen
  46.          if xstrich(n)<0
  47.          disp("Optimalität verletzt")
  48.          L=0;
  49.          return
  50.          end
  51.     end
  52.     disp("Optimalität und Zulässigkeit bestehen")
  53.     disp("x'* =")
  54.     xstrich=xstrich
  55.    
  56.     disp("f'*=")
  57.     fstern=cstrichj*xstrich
  58. end
  59. %%
  60. %Änderung in c
  61.     if changec==1
  62.          Aj=zeros(zeilen,zeilen);
  63.          Astrich=zeros(zeilen,spalten-zeilen);
  64.          m=1;
  65.          n=1;
  66.          for i=1:spalten
  67.              if any(Basis(:)==i)
  68.                 Aj(:,m)=A(:,i);  %Bestimmung von Â
  69.                 m=m+1;
  70.              else
  71.                 Astrich(:,n)=A(:,i);
  72.                 n=n+1;
  73.              end
  74.          
  75.          end
  76.         cj=zeros(1,zeilen);
  77.         cstrich=zeros(1,spalten-zeilen);
  78.         m=1;
  79.         n=1;
  80.         for i=1:spalten
  81.             if any(Basis(:)==i)
  82.                 cj(m)=c(i);
  83.                 m=m+1;
  84.             else
  85.                 cstrich(n)=c(i);
  86.                 n=n+1;
  87.                
  88.             end
  89.         end
  90.         deltac=vektor-c;
  91.         m=1;
  92.         for i=1:spalten
  93.             if any(Basis(:)==i)
  94.                 deltacj(m)=deltac(i);
  95.                 m=m+1;
  96.                
  97.                
  98.             end
  99.         end
  100.        
  101.         r=cstrich-cj*inv(Aj)*Astrich;
  102.         rest=deltacj*inv(Aj)*Astrich;
  103.         for i=1:spalten-zeilen
  104.         if r(i)<rest(i)
  105.             disp("Optimalität verletzt")
  106.             L=1;
  107.             return
  108.         end
  109.         end
  110.         disp("Optimalität besteht")
  111.      disp("x*")
  112.     xstern= inv(Aj)*b
  113.     disp("f*")
  114.     fstern=cj*xstern    
  115.     end
  116.    
  117. %%
  118. %Hinzufügen einer Variablen
  119.        
  120.         if changevar==1
  121.             csix=vektor(zeilen+1);
  122.             Aj=zeros(zeilen,zeilen);
  123.             Astrich=zeros(zeilen,spalten-zeilen);
  124.             m=1;
  125.             n=1;
  126.             for i=1:spalten
  127.                 if any(Basis(:)==i)
  128.                     Aj(:,m)=A(:,i);  %Bestimmung von Â
  129.                     m=m+1;
  130.                 else
  131.                     Astrich(:,n)=A(:,i);
  132.                     n=n+1;
  133.                 end
  134.          
  135.             end
  136.             cj=zeros(1,zeilen);
  137.             cstrich=zeros(1,spalten-zeilen);
  138.              m=1;
  139.             n=1;
  140.             for i=1:spalten
  141.                 if any(Basis(:)==i)
  142.                     cj(m)=c(i);
  143.                     m=m+1;
  144.                 else
  145.                     cstrich(n)=c(i);
  146.                     n=n+1;
  147.                
  148.                 end
  149.             end
  150.             asix=vektor(1:zeilen);
  151.             r=csix-cj*inv(Aj)*asix'
  152.             if r<0
  153.             disp("Optimum wurde verletzt, LP muss neu berechnet werden")
  154.             else
  155.                 disp("Optimum besteht")
  156.                 xleer=zeros(1,spalten+1);
  157.                 xtemp=inv(Aj)*b;
  158.                 m=1;
  159.                 for i=1:spalten
  160.                 if any(Basis(:)==i)
  161.                    xleer(i)=xtemp(m);
  162.                    m=m+1;
  163.                 end    
  164.                 end
  165.                 xstern=xleer'
  166.                 fstern=cj*xtemp
  167.                
  168.                 end
  169.        
  170.            
  171.        
  172.        
  173.        
  174.        
  175.        
  176.         end
  177.        
  178.        
  179.         if changebed==1
  180.         bneu=zeros(zeilen+1,1);
  181.         bneu(1:zeilen)=b(:);
  182.         bneu(zeilen+1)=vektor(spalten+2);
  183.         Aj=zeros(zeilen,zeilen);
  184.         m=1;
  185.         for i=1:spalten
  186.              if any(Basis(:)==i)
  187.                 Aj(:,m)=A(:,i);  %Bestimmung von Â
  188.                 m=m+1;
  189.              
  190.              end
  191.          
  192.          end
  193.        
  194.        
  195.        
  196.         m=1
  197.         abasis=zeros(1,zeilen);
  198.         for i=1:zeilen
  199.                 if any(Basis(:)==i)
  200.                     abasis(m)=vektor(i);
  201.                     m=m+1;
  202.                 end
  203.          
  204.         end
  205.         Aneu=[Aj zeros(zeilen,1);abasis -1];
  206.         xstern=inv(Aneu)*bneu;
  207.         cj=zeros(1,zeilen);
  208.             cstrich=zeros(1,spalten-zeilen);
  209.              m=1;
  210.             n=1;
  211.             for i=1:spalten
  212.                 if any(Basis(:)==i)
  213.                     cj(m)=c(i);
  214.                     m=m+1;
  215.                 else
  216.                     cstrich(n)=c(i);
  217.                     n=n+1;
  218.                
  219.                 end
  220.             end
  221.         for i=1:zeilen+1
  222.             if xstern(i)<0
  223.                 disp("Optimum verletzt")
  224.                 L=0;
  225.                 return
  226.             end
  227.             disp("Optimum besteht")
  228.             xstern=xstern
  229.             xleer=zeros(spalten+1,1);
  230.             for i=1:spalten+1
  231.            
  232.            
  233.             end
  234.                
  235.             fstern=bneu'*xstern
  236.         end
  237.        
  238.        
  239.        
  240.        
  241.        
  242.        
  243.        
  244.         end
  245. %
  246. L=1;
  247. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement