-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathstate2control_simple.m
More file actions
72 lines (63 loc) · 1.41 KB
/
Copy pathstate2control_simple.m
File metadata and controls
72 lines (63 loc) · 1.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
function control = state2control_simple(state,coeff_mk,coeff_me,param)
% state = A, k, e
% coeff_me/mk are all coefficients
% param a container of parameters
% load parameters
bbeta = param.bbeta;
kkappa_S = param.kkappa_S;
kkappa_F = param.kkappa_F;
ttau = param.ttau;
h = param.h;
iiota = param.iiota;
aalpha = param.aalpha;
gyratio = param.gyratio;
ddelta = param.ddelta;
% find expectation terms
EM = exp([1 log(state)]*[coeff_mk coeff_me]);
A = state(1); k = state(2); e = state(3);
% Find expectation terms tomorrow
Eme = EM(2); Emk = EM(1);
% Back out other variables
c = (bbeta*Emk)^(-1);
q = kkappa_S/ttau*(1-c*bbeta*Eme-kkappa_F/ttau)^(-1);
Pm = 1 - kkappa_F - kkappa_S/q;
if q >= 1
q = 1.0-1e-7;
% warning('q>=1');
elseif q <=0
q = 1e-7;
% warning('q<=0');
end
if q ~= 0
ttheta = (q^(-iiota) - 1)^(1/iiota);
else
ttheta = 1e7;
end
if ttheta ~= 0
f = (1+ttheta^(-iiota))^(-1/iiota);
else
f = 0;
end
U = 1-(kkappa_S/q+kkappa_F)*(f+(1-f)/ttau)-h;
y = A*k^aalpha;
v = ttheta*(e);
m = v*(e)/(v^iiota+(e)^iiota)^(1/iiota);
% Find mk and me;
mk = (1-ddelta+U*aalpha*y/k)/c;
me = U/c;
% Find next state
eplus = e + y - m;
eplus = max(0.1,eplus);
I = y-c+e-eplus-kkappa_S*v-kkappa_F*m-e*h;
kplus = (1-ddelta)*k + I;
kplus = max(0.1,kplus);
% pack stuff into control
control.kplus = kplus;
control.eplus = eplus;
control.mk = mk;
control.me = me;
control.q = q;
control.f = f;
control.n = 1.0;
control.CIPI = eplus - e;
end