How to use the output of a function as the same function input?
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hello everyone, I coded the two phase simplex method, and created a function called TwoPhaseSimplex() that turns [row,column] selected point to tableau. However, I want to use the output of a function as the same function input. For example,
function [Tableau]=TwoPhaseSimplex(x,y) and I have entered first x y values, the function gives me first output. Furthermore, I want to enter second x,y values but by using function's first output. I insert the code I write:
clear,clc
%%
A=[1 -7.5 0 0 -1 0 0 0 1 0 0;3 1 8 -8 0 -1 0 0 0 1 0;-10 5 -7 7 0 0 1 0 0 0 0;0 -1 5 -5 0 0 0 -1 0 0 1];
b=[2 5 4.5 1.5];
f=[1 -1 2 -2];
w=[-4 7.5 -13 13 1 1 0 1 0 0 0 0];
Tableau=[A b';f zeros(1,8);w]
%% Iterations
TwoPhaseSimplex(4,3)
TwoPhaseSimplex(2,1)
%% Function for Iteration
function [T]=TwoPhaseSimplex(row,column)
A=[1 -7.5 0 0 -1 0 0 0 1 0 0;3 1 8 -8 0 -1 0 0 0 1 0;-10 5 -7 7 0 0 1 0 0 0 0;0 -1 5 -5 0 0 0 -1 0 0 1];
b=[2 5 4.5 1.5];
f=[1 -1 2 -2];
w=[-4 7.5 -13 13 1 1 0 1 0 0 0 0];
Tableau=[A b';f zeros(1,8);w];
%[row1, column1] = find(w == min(w));
row1=row;
column1=column;
for i=1
ratio(1,i)=b(i)/A(i,column1);
end
for i=2
ratio(1,i)=b(i)/A(i,column1);
end
for i=3
ratio(1,i)=b(i)/A(i,column1);
end
for i=4
ratio(1,i)=b(i)/A(i,column1);
end
[row2, column2] = find(ratio == min(ratio(ratio>0)));
%A(column2,column1);
%A(column2,:)/A(column2,column1);
Tableau(column2,column1);
%Tableau(column2,:)/Tableau(column2,column1);
if column2==1
T1=Tableau(column2,:)/Tableau(column2,column1);
T2=Tableau(2,:)-Tableau(2,column1)*Tableau(column2,:)/Tableau(column2,column1);
T3=Tableau(3,:)-Tableau(3,column1)*Tableau(column2,:)/Tableau(column2,column1);
T4=Tableau(4,:)-Tableau(4,column1)*Tableau(column2,:)/Tableau(column2,column1);
T5=Tableau(5,:)-Tableau(5,column1)*Tableau(column2,:)/Tableau(column2,column1);
T6=Tableau(6,:)-Tableau(6,column1)*Tableau(column2,:)/Tableau(column2,column1);
end
if column2==2
T1=Tableau(1,:)-Tableau(1,column1)*Tableau(column2,:)/Tableau(column2,column1);
T2=Tableau(column2,:)/Tableau(column2,column1);
T3=Tableau(3,:)-Tableau(3,column1)*Tableau(column2,:)/Tableau(column2,column1);
T4=Tableau(4,:)-Tableau(4,column1)*Tableau(column2,:)/Tableau(column2,column1);
T5=Tableau(5,:)-Tableau(5,column1)*Tableau(column2,:)/Tableau(column2,column1);
T6=Tableau(6,:)-Tableau(6,column1)*Tableau(column2,:)/Tableau(column2,column1);
end
if column2==3
T1=Tableau(1,:)-Tableau(1,column1)*Tableau(column2,:)/Tableau(column2,column1);
T2=Tableau(2,:)-Tableau(2,column1)*Tableau(column2,:)/Tableau(column2,column1);
T3=Tableau(column2,:)/Tableau(column2,column1);
T4=Tableau(4,:)-Tableau(4,column1)*Tableau(column2,:)/Tableau(column2,column1);
T5=Tableau(5,:)-Tableau(5,column1)*Tableau(column2,:)/Tableau(column2,column1);
T6=Tableau(6,:)-Tableau(6,column1)*Tableau(column2,:)/Tableau(column2,column1);
end
if column2==4
T1=Tableau(1,:)-Tableau(1,column1)*Tableau(column2,:)/Tableau(column2,column1);
T2=Tableau(2,:)-Tableau(2,column1)*Tableau(column2,:)/Tableau(column2,column1);
T3=Tableau(3,:)-Tableau(3,column1)*Tableau(column2,:)/Tableau(column2,column1);
T4=Tableau(column2,:)/Tableau(column2,column1);
T5=Tableau(5,:)-Tableau(5,column1)*Tableau(column2,:)/Tableau(column2,column1);
T6=Tableau(6,:)-Tableau(6,column1)*Tableau(column2,:)/Tableau(column2,column1);
end
%{
T1=Tableau(1,:)-Tableau(1,column1)*Tableau(column2,:)/Tableau(column2,column1);
T2=Tableau(2,:)-Tableau(2,column1)*Tableau(column2,:)/Tableau(column2,column1);
T3=Tableau(3,:)-Tableau(3,column1)*Tableau(column2,:)/Tableau(column2,column1);
T4=Tableau(4,:)-Tableau(4,column1)*Tableau(column2,:)/Tableau(column2,column1);
T5=Tableau(5,:)-Tableau(5,column1)*Tableau(column2,:)/Tableau(column2,column1);
T6=Tableau(6,:)-Tableau(6,column1)*Tableau(column2,:)/Tableau(column2,column1);
%}
display('Iteration')
Tableau_new=[T1;T2;T3;T4;T5;T6];
A_new=Tableau_new(1:4,1:11);
b_new=Tableau_new(:,12);
T= array2table(Tableau_new,'VariableNames',{'x1','x2','x3','x4','x5','x6','x7','x8','x9','x10','x11','b'});
f_new=Tableau_new(5,:);
w_new=Tableau_new(6,:);
end
Thanks a lot
0 commentaires
Réponses (1)
Jamal Nasir
le 14 Avr 2020
you can use for statement or while as follow
x=initial_Value
y=[];
for i=1:NoIteration
[a,b]=func(x)
y=[y;a,b];
x=[a,b]; %%using as input for next iteration
end
2 commentaires
Jamal Nasir
le 18 Avr 2020
when you call function the input size should be have fixed sized
you should re-arrange your output to be same size of input depend on your problem
and got the fixed sized each iterartions
thanks
Voir également
Catégories
En savoir plus sur Matrix Indexing dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!