How to use the output of a function as the same function input?

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

Answers (1)

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

Thanks for information, but i didn't this.
First I run TwoPhaseSimplex(4,3) and Iteration (6*12) is answer. Now, I want to use this answer into my function. Can you help me in this point?
Thanks.
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

Sign in to comment.

Products

Release

R2019a

Asked:

on 13 Apr 2020

Commented:

on 18 Apr 2020

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!