MATLAB: Matlab multiplication of two matrices in max-plus algebra

max-plus algebra

In max-plus algebra
x+y=max(x,y)
x*y=x+y
where x , y denote the entries.
How two multiply two matrices in MATLAB such that addition implies maximum value and multiplication imply sum .
Thanks

Best Answer

TotalStation=13;
Part=20;
FST=3;
c=0;
PST=10;
BST=11;
NBuf=10;
AT=zeros(TotalStation,FST);
AU=sym('AU%d%d',[TotalStation,1]);
BU=zeros(TotalStation,1);
BufU=sym('AU%d%d',[TotalStation,1]);
Uk=zeros(FST,Part);
Uk1=zeros(FST,1);
IST=zeros(FST,Part);
Y=sym('Y%d%d',[TotalStation,Part+NBuf]);
Y1=sym('Y1%d%d',[TotalStation,1]);
for k=1 : Part
if k==1
%first part
Y(BST,1)=0;
Y1(BST,1)=T(BST,1);
for i=BST+1 : TotalStation
Y(i,1)=Y1(i-1,1);
Y1(i,1)=Y1(i-1,1)+T(i,1);
end
for i=1 : BST-1
Y(i,1)=0;
Y1(i,1)=0;
end
Y;
Y1;
for i=BST : TotalStation
Y1(i,1)=Y(i,1);
end
Y1;
else
%second part until last part of buffer
if k <= NBuf && k >1
k;
Y1;
BufU(BST,1)=Y1(BST,1)+T(BST);
for j=BST+1 : size(Buf,1)
c=max(BufU(j-1,1)+T(j-1),T(j,1)+Y1(j ,1));
BufU(j,1)=c;
end
BufU;
for i=1 : BST-1
BufU(i,1)=0;
end
for i=1 : size(B,1)
Y(i,k)=BufU(i,1);
end
BufU;
for i=1 : size(B,1)
Y1(i,1)=Y(i,k);
end
Y;
Y1;
else
if k==NBuf+1
for i=1 : FST
Uk1(i,1)=Uk(i,1);
end
for i=1 : size(B,1)
for j=1 : size(Uk1,2)
c=B(i,1)+Uk1(1,j);
for v=1 : size(B,2)
c=max(c,B(i,v)+Uk1(v,j));
end
BU(i,j)=c;
end
end
%make BU(i,k) to BU(i,k-NBuf) to fix the dimensions and start
from
%1
%for i=1 : size(B,1)
%Y(i,k)=BU(i,k-NBuf);
%end
for i=1:BST-1
Y(i,k)=BU(i,1);
end
Y(BST,k)=max(Y1(BST+1,1),BU(BST,k-NBuf))
for i=BST+1 : size(B,1)
Y(i-1,k)+T(i-1,1);
Y1(i,1);
BU(i,k-NBuf);
Y(i,k)=max(Y1(i,1),max(Y(i-1,k)+T(i-1,1),BU(i,k-NBuf)))
end
for i=1 : FST
IST(i,k-NBuf)=Uk1(i,k-NBuf);
end
else
for i=1 : size(B,1)
Y1(i,1)=Y(i,k-1);
end
Y1
for i=1 : size(A,1)
for j=1 : size(Y1,2)
c=A(i,1)+Y1(1,j);
for v=1 : size(A,2)
c=max(c,A(i,v)+Y1(v,j));
end
AU(i,j)=c;
end
end
AU;
for i=1 : FST
Uk(i,k-NBuf)=IST(i,k-NBuf-1)+T(i,1);
end
Uk;
for i=1 : FST
Uk1(i,1)=Uk(i,k-NBuf);
end
Uk1;
for i=1 : size(B,1)
for j=1 : size(Uk1,2)
c=B(i,1)+Uk1(1,j);
for v=1 : size(B,2)
c=max(c,B(i,v)+Uk1(v,j));
end
BU(i,j)=c;
end
end
if k > NBuf+1
for i=1 : size(A,1)
for j=1 : size(Y1,2)
c=Buf(i,1)+Y1(1,j);
for v=1 : size(A,2)
c=max(c,Buf(i,v)+Y1(v,j));
end
BufU(i,j)=c;
end
end
BufU
end
for i=1 : size(AU,1)
for j=1 : size(AU,2)
% if k > NBuf+1
%AT(i,j)=max(BufU(i,j),max(AU(i,j),BU(i,j)));
%else
AT(i,j)=max(AU(i,j),BU(i,j));
%end
end
end
AT;
for i=1 : size(B,1)
Y(i,k)=AT(i,1);
end
end
end
end
Y
end