# Loop in Value Iteration Unrecognized by MATLAB

3 views (last 30 days)
Laura Freitas on 25 Oct 2021
Commented: Laura Freitas on 26 Oct 2021
I am trying to solve a value iteration problem. I have a matrix, EV, with two columns which must be estimated seperately. However, my loop doesn't work and doesn't allow me to iterate past the initial guess value. Basically, nothing past comand "while" works. MATLAB doesn't return an error or anything, it just doesn't do anything.
%Algorithm
EV0 = zeros(90,2); %Guess initial value of 0.
EV0_0 = EV0(:,1); %Column where i =0.
EV0_1 = EV0(:,2); %Column where i=1.
V = log(exp(u_0 + beta*EV0_0) + exp(u_1 + beta*EV0_1));
EV1_1 = P1*V;
EV1_0 = P0*V;
EV1 = [EV1_0 EV1_1];
while abs(EV1 - EV0) > 0.01 % continue to iterate until convergence is achieved
EV0 = EV1;
EV0_0 = EV0(:,1); %Column where i =0.
EV0_1 = EV0(:,2); %Column where i=1.
V = log(exp(u_0 + beta*EV0_0) + exp(u_1 + beta*EV0_1));
EV1_1 = P1*V;
EV1_0 = P0*V;
EV1 = [EV1_0 EV1_1];
end
Any help to understand how exactly I can get the loop to work would be greatly appreciated!
##### 2 CommentsShowHide 1 older comment
Laura Freitas on 26 Oct 2021
That's alright, the issue has been resolved. Thank you for the attempt though!

Laura Freitas on 26 Oct 2021
For clarification, EV1, EV0, P0 and P1 are matrixes, while u_0 and u_1 are vectors. EV1 and EV0 are 2x175, P0 and P1 are 175x175 and u_0 and u_1 are 175x1.
I figured out the issue myself. The issue was that EV1 and EV0 are matrixes. Hence,
abs(EV1 - EV0)
is also a matrix and does it makes no sense to compare it to a single number epsilon.
I fixed my code by setting:
V = max(max(abs(EV1 - EV0))); %The maximum difference between any two elements of EV1 and EV0
while V > epsilon
EV0 = EV1;
EV0_0 = EV0(:,1); %Column where i =0.
EV0_1 = EV0(:,2); %Column where i=1.
V = log(exp(u_0 + beta*EV0_0) + exp(u_1 + beta*EV0_1));
EV1_0 = P0*V;
EV1_1 = P1*V;
EV1 = [EV1_0 EV1_1];
V = max(max(abs(EV1 - EV0)));
end