How to use the output of a function as the same function input?
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
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 Kommentare
Antworten (1)
Jamal Nasir
am 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 Kommentare
Jamal Nasir
am 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
Siehe auch
Kategorien
Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!