Actualmente estoy intentando crear un bucle while que itere la evolución del stock de capital hasta que converja en el n-ésimo dígito. Como todavía soy bastante nuevo en Matlab me encuentro con muchos problemas. Estaría muy agradecido por cualquier tipo de ayuda.
Aquí está mi código:
% Model parameters
alpha = 1/3; %
s = 0.2; % Investment rate
delta = 0.2; % Depreciation rate
n = 0.02; % Growth of labor force
g = 0.01; % technological progress
eps = 1;
k(1,1) = 0.5;
i=0;
while eps >= 1.0e-5
t = t+1;
k(1,t) = (1/((1+n)*(1+g)))*((s*k(1,t-1)^alpha+(1-delta)*k(1,t-1)));
z = k(1,t);
z1 = k(1,t+1);
kdif = z1-z ;
eps = max(abs(kdif));
i = i + 1;
if i >= 300
break;
end
end
2 votos
Tengo varias observaciones sobre su código. En primer lugar, escriba para simplificar $k(1)=0.5$ y dentro de la fórmula del bucle while sustituir $k(1,t-1)$ por $k(t-1)$ que debe asignarse a la variable $k(t)$ y no a $k(1,t)$ . Además, sustituya $z=k(1,t)$ por $k(t).$ . Además, debe establecer el periodo de tiempo para $t=1$ antes del bucle while. Finalmente, $z1=k(1,t+1)$ no tiene sentido, este valor sigue sin calcularse. Por lo tanto, sustitúyalo por $z1=k(k-1)$ . Entonces reescribe $kdif$ a $kdif=z-z1$ . Después de estas correcciones, usted debe obtener después de $55$ iteraciones el valor $0.8097$ . Espero que esto ayude.
0 votos
@HolgerI.Meinhardt por favor publique las respuestas como respuestas - tenga en cuenta que las respuestas pueden ser en forma de pistas si cree que la pregunta del usuario es lo suficientemente simple como para que desde una perspectiva didáctica sea mejor proporcionar una pista en lugar de una respuesta directa
1 votos
Por último, elimina el iterador $i$ en todas partes no tiene sentido, ya has $t$ . Por lo tanto, dentro de la construcción if, utiliza si $ t>=300$ en su lugar.
0 votos
@HolgerI.Meinhardt Gracias, esto ayuda mucho. En realidad pensaba que tenía que escribir fila y columna siempre que trabajara con vectores. Por lo tanto, escribí k(1,t) todo el tiempo. Así que gracias por esta pista también. Obviamente, todavía estoy en los inicios del aprendizaje de Matlab.
0 votos
@HolgerI.Meinhardt Gracias. ¿Qué cambiaría si utilizara
k(t+1)=(1/((1+n)*(1+g)))*((s*k(t)^alpha+(1-delta)*k(t)))
en su lugar? Entonces, ¿es importante para Matlab si escribo algo como k(t+1)=k(t) o k(t)=k(t-1)?0 votos
Supongo que esto es mejor, ya que si uno no presta atención $t-1$ puede dar $0$ para el que el iterador no está definido.
0 votos
@HolgerI.Meinhardt ¡Gracias!