How to use the output of a function as the same function input?
1 view (last 30 days)
Show older comments
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 Comments
Answers (1)
Jamal Nasir
on 14 Apr 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 Comments
Jamal Nasir
on 18 Apr 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
See Also
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!