Asked by BOWEN LI
on 2 Aug 2019

Hi everyone, i met a problem when i try to check my following code which is a function file, when i try with some inputs, Matlab generates NaN which made me confused.

%set objective functions

function f =totalcost(y,yi,sij)

%set constants for the equations

r1=0.05;%annual demand growth rate

r2=0.1;%annual demand growth rate caused by the completion of rail routes

d=[0 20 30 35].';%di distance beween links 1-4. d1=0 since link 0-1 does not exist.

ub=10;%cost of buses in $/hour

nc=6;%number of cars per train

uc=50;%cost of rail cars in $/car

L=500;%rail maintenance cost in $/mile

k=1000;%rail construction cost in $/mile

td=0.08;%dwell time for bus and rail in hours

vb=40;% bus operating speed

vr=60;% train operating speed

u=10; %user value of time in dollars per hour

N=4;

qijTemp=randi(10,4);

qij0=tril((qijTemp-diag(diag(qijTemp))),-1)+((tril(qijTemp-diag(diag(qijTemp)),-1))).' ;

qij=zeros(4,4,4);

hb1=zeros(4,1);

hb2=zeros(4,1);

hb=zeros(4,1);

hr=zeros(4,1);

cu=zeros(4,1);

ci=zeros(4,1);

rb=zeros(4,1);

rr=zeros(4,1);

cv=zeros(4,1);

cm=zeros(4,1);

cc=zeros(4,1);

f=zeros(4,1);

for t=1:N

if t==1

qij(:,:,t)=qij0;

yi(:,:,t)=zeros(4);

sij(:,:,t)=zeros(4);

cc(t)=y(:,1,t).'*d*k;

else

qij(:,:,t)=(qij(:,:,t-1).*(1+r1).^t).*((1/8)*(1+sij(:,:,t-1).*r2).^t);

cc(t)=(y(:,1,t)-y(:,1,t-1)).'*d*k;%construction cost

end

hb1(t)=sum(2*(1-yi(1,:,t))*d./vb)+sum((1-yi(1,:,t))*td)*ub; %bus headway

hb2(t)=sum(sum((1-yi(:,:,t)).*qij(:,:,t)));

hb(t)=2*sqrt(hb1(t)+hb2(t));

hr(t)=2*sqrt(((2*yi(1,:,t)*d)/vr+sum(yi(1,:,t)*td))*nc*uc/sum(sum((0.1+y(:,:,t)).*qij(:,:,t))));

cu(t)=sum(sum(qij(:,:,t).*(1-yi(:,:,t))))*(hb(t)/2)*(u/4)+sum(sum(qij(:,:,t).*yi(:,:,t)))*(hr(t)/2)*(u/4); %user wait cost

ci1(t)=((diag((1-yi(:,:,t))*qij(:,:,t))).'*(d+td))*(u/vb);

ci2(t)=((diag(yi(:,:,t)*qij(:,:,t))).'*(d+td)).*(u+vb);

ci(t)=ci1(t)+ci2(t);

rb(t)=2*(1-yi(1,:,t))*d/vb+2*sum((1-yi(1,:,t))*td);%bus round trip time

rr(t)=2*((yi(1,:,t)*d)/vr)+sum((yi(1,:,t))*td); %rail round trip time

cv(t)=(rb(t)/hb(t))*ub+(rr(t)/hr(t))*nc*uc;%vehicle operating speed

cm(t)=(yi(1,:,t)*d)*L;%maintenance cost

f(t)=cu(t)+ci(t)+cv(t)+cm(t)+cc(t);

end

f = sum(f);

end

The input i tried with is

totalcost(zeros(4,1,4),zeros(4,4,4),zeros(4,4,4))

Thanks for helping me!

Opportunities for recent engineering grads.

Apply Today
## 10 Comments

## dpb (view profile)

## Direct link to this comment

https://es.mathworks.com/matlabcentral/answers/474627-why-i-receive-a-nan-value#comment_731302

## BOWEN LI (view profile)

## Direct link to this comment

https://es.mathworks.com/matlabcentral/answers/474627-why-i-receive-a-nan-value#comment_731308

## Joel Handy (view profile)

## Direct link to this comment

https://es.mathworks.com/matlabcentral/answers/474627-why-i-receive-a-nan-value#comment_731315

## BOWEN LI (view profile)

## Direct link to this comment

https://es.mathworks.com/matlabcentral/answers/474627-why-i-receive-a-nan-value#comment_731317

## Walter Roberson (view profile)

## Direct link to this comment

https://es.mathworks.com/matlabcentral/answers/474627-why-i-receive-a-nan-value#comment_731318

## BOWEN LI (view profile)

## Direct link to this comment

https://es.mathworks.com/matlabcentral/answers/474627-why-i-receive-a-nan-value#comment_731324

## Walter Roberson (view profile)

## Direct link to this comment

https://es.mathworks.com/matlabcentral/answers/474627-why-i-receive-a-nan-value#comment_731332

## BOWEN LI (view profile)

## Direct link to this comment

https://es.mathworks.com/matlabcentral/answers/474627-why-i-receive-a-nan-value#comment_731341

## Walter Roberson (view profile)

## Direct link to this comment

https://es.mathworks.com/matlabcentral/answers/474627-why-i-receive-a-nan-value#comment_731358

## BOWEN LI (view profile)

## Direct link to this comment

https://es.mathworks.com/matlabcentral/answers/474627-why-i-receive-a-nan-value#comment_731384

Sign in to comment.