Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- clear
- clc
- close all
- format rat
- A=[5 1 -1 0 0;1 2 0 -1 0;1 3 0 0 -1];
- c=[1;1;0;0;0];
- b=[5;6;3];
- Basis=[1 2 5];
- changebed=0;
- changevar=1;
- changeb=0;
- changec=0;
- vektor=[10 7 0 0 0 -1 20];
- result=sensitivitaetsanalyse(A,b,c,Basis,changevar,changebed,changeb,changec,vektor);
- function L=sensitivitaetsanalyse(A,b,c,Basis,changevar,changebed,changeb,changec,vektor)
- [zeilen,spalten]=size(A);
- if (changeb+changevar+changec+changebed)>1
- disp("Error")
- return
- end
- %%Änderung in b
- if changeb==1
- disp("Änderung in b");
- Aj=zeros(zeilen,zeilen);
- for i=1:zeilen
- Aj(:,i)=A(:,Basis(i)); %Bestimmung von Â
- end
- cstrichj=zeros(1,zeilen);
- for i=1:zeilen
- cstrichj(i)=c(Basis(i),1);
- end
- xstrich=inv(Aj)*vektor;
- for n=1:zeilen
- if xstrich(n)<0
- disp("Optimalität verletzt")
- L=0;
- return
- end
- end
- disp("Optimalität und Zulässigkeit bestehen")
- disp("x'* =")
- xstrich=xstrich
- disp("f'*=")
- fstern=cstrichj*xstrich
- end
- %%
- %Änderung in c
- if changec==1
- Aj=zeros(zeilen,zeilen);
- Astrich=zeros(zeilen,spalten-zeilen);
- m=1;
- n=1;
- for i=1:spalten
- if any(Basis(:)==i)
- Aj(:,m)=A(:,i); %Bestimmung von Â
- m=m+1;
- else
- Astrich(:,n)=A(:,i);
- n=n+1;
- end
- end
- cj=zeros(1,zeilen);
- cstrich=zeros(1,spalten-zeilen);
- m=1;
- n=1;
- for i=1:spalten
- if any(Basis(:)==i)
- cj(m)=c(i);
- m=m+1;
- else
- cstrich(n)=c(i);
- n=n+1;
- end
- end
- deltac=vektor-c;
- m=1;
- for i=1:spalten
- if any(Basis(:)==i)
- deltacj(m)=deltac(i);
- m=m+1;
- end
- end
- r=cstrich-cj*inv(Aj)*Astrich;
- rest=deltacj*inv(Aj)*Astrich;
- for i=1:spalten-zeilen
- if r(i)<rest(i)
- disp("Optimalität verletzt")
- L=1;
- return
- end
- end
- disp("Optimalität besteht")
- disp("x*")
- xstern= inv(Aj)*b
- disp("f*")
- fstern=cj*xstern
- end
- %%
- %Hinzufügen einer Variablen
- if changevar==1
- csix=vektor(zeilen+1);
- Aj=zeros(zeilen,zeilen);
- Astrich=zeros(zeilen,spalten-zeilen);
- m=1;
- n=1;
- for i=1:spalten
- if any(Basis(:)==i)
- Aj(:,m)=A(:,i); %Bestimmung von Â
- m=m+1;
- else
- Astrich(:,n)=A(:,i);
- n=n+1;
- end
- end
- cj=zeros(1,zeilen);
- cstrich=zeros(1,spalten-zeilen);
- m=1;
- n=1;
- for i=1:spalten
- if any(Basis(:)==i)
- cj(m)=c(i);
- m=m+1;
- else
- cstrich(n)=c(i);
- n=n+1;
- end
- end
- asix=vektor(1:zeilen);
- r=csix-cj*inv(Aj)*asix'
- if r<0
- disp("Optimum wurde verletzt, LP muss neu berechnet werden")
- else
- disp("Optimum besteht")
- xleer=zeros(1,spalten+1);
- xtemp=inv(Aj)*b;
- m=1;
- for i=1:spalten
- if any(Basis(:)==i)
- xleer(i)=xtemp(m);
- m=m+1;
- end
- end
- xstern=xleer'
- fstern=cj*xtemp
- end
- end
- if changebed==1
- bneu=zeros(zeilen+1,1);
- bneu(1:zeilen)=b(:);
- bneu(zeilen+1)=vektor(spalten+2);
- Aj=zeros(zeilen,zeilen);
- m=1;
- for i=1:spalten
- if any(Basis(:)==i)
- Aj(:,m)=A(:,i); %Bestimmung von Â
- m=m+1;
- end
- end
- m=1
- abasis=zeros(1,zeilen);
- for i=1:zeilen
- if any(Basis(:)==i)
- abasis(m)=vektor(i);
- m=m+1;
- end
- end
- Aneu=[Aj zeros(zeilen,1);abasis -1];
- xstern=inv(Aneu)*bneu;
- cj=zeros(1,zeilen);
- cstrich=zeros(1,spalten-zeilen);
- m=1;
- n=1;
- for i=1:spalten
- if any(Basis(:)==i)
- cj(m)=c(i);
- m=m+1;
- else
- cstrich(n)=c(i);
- n=n+1;
- end
- end
- for i=1:zeilen+1
- if xstern(i)<0
- disp("Optimum verletzt")
- L=0;
- return
- end
- disp("Optimum besteht")
- xstern=xstern
- xleer=zeros(spalten+1,1);
- for i=1:spalten+1
- end
- fstern=bneu'*xstern
- end
- end
- %
- L=1;
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement