Same code I can successfully run in R2021b but in R2016a it is showing Error using - Matrix dimensions must agree. What should I change to run this in R2016a?

function [facilities,R,Dij,E,C]=a(r1,r2,d1,d2,i,j)
tic
facilities=(1:i)';
R = randi([r1 r2],[i 2]);
R(:,2)=(R(:,1))+(R(:,2));
Dij=randi([d1 d2],[i,j]);
E=zeros(i,1);
E(:)=10^-6;
for m=1:i
for n=1:j
C = max((R(:,2)-Dij(:,:)),0)./max(max((R(:,2)-R(:,1)),(R(:,2)-Dij(:,:))),E(:,1));
n=n+1;
end
m=m+1;
end
toc
end
% Same code I can successfully run in R2021b but in R2016a it is showing Error using - Matrix dimensions must agree. What should I change to run this in R2016a?

3 comentarios

Hi, Matlab has given you much clearer indication about the error, but you have not posted it here, as well as data to reproduce your error.
  • At which line of code the error occured?
  • What was the value of variables entering the expression on that line?
  • In line number 12 .
  • [facilities,R,Dij,E,C]=a(10,20,30,40,5,3)
You can read more about implicit array expansion here:
The code throws an error on R2016a because it does not have implicit expansion.

Iniciar sesión para comentar.

 Respuesta aceptada

DGM
DGM el 8 de Dic. de 2022
Editada: DGM el 8 de Dic. de 2022
R2016b introduced implicit array expansion. You're relying on that. The loops are also unnecessary.
i = 10;
j = 5;
r1 = 1;
r2 = 10;
d1 = 1;
d2 = 10;
facilities=(1:i)';
R = randi([r1 r2],[i 2]);
R(:,2)=(R(:,1))+(R(:,2));
Dij=randi([d1 d2],[i,j]);
E=zeros(i,1);
E(:)=10^-6;
num = max(bsxfun(@minus,R(:,2),Dij),0);
den = max((R(:,2)-R(:,1)),E(:,1)); % these terms agree
den = bsxfun(@max,bsxfun(@minus,R(:,2),Dij),den);
C = num./den;
I tested this in R2015b

Más respuestas (0)

Categorías

Preguntada:

el 8 de Dic. de 2022

Editada:

el 8 de Dic. de 2022

Community Treasure Hunt

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

Start Hunting!

Translated by