Rutinas Matlab y Algoritmos de Bisección

APENDICE “A”: Trayectoria de las variables hacia el estado estacionario.

function [yt,ct,it,kt,m]=
seriestk(k0,c0,a,d,b,tita,n,sigma,tauk,taui,z);

kt=zeros(n,1);

ct=zeros(n,1);

kt(1)=k0;

ct(1)=c0;

n2=n;

for i=1:(n-1)

kt(i+1)= (kt(i)^a + (1-d)*kt(i) - ct(i))/(1+z)*(1+sigma);

ct(i+1) = ct(i)*(b*((1-tauk)*a*kt(i+1)^(a-1) + (1+taui)*(1-d))/(1+taui)*(1+z)*(1+sigma))^(1/tita);

dc=ct(i+1)-ct(i);

dk=kt(i+1)-kt(i);

if
(dc/dk)<0;

n2=i;

break

end

end

m=[n2 dk];

kt= kt(1:n2);

ct= ct(1:n2);

yt=kt.^a;

it = yt - ct;

Algoritmo de Bisección

function [yt,ct,it,kt,n2]=
series2tk(k0,a,d,b,tita,n,sigma,tauk,taui,z);

% Se procede a formar un algoritmo mediante el método de bisección para
encontrar el nivel de c0 óptimo (z es la tasa de crecimiento poblaciomal)%

kee= (a*(1-tauk)/((1+z)*(1+sigma)*(1+taui)/b-(1+d)*(1 + taui)))^(1/(1-a));

c1 = k0^a + (1-d)*k0 -kee;

c2=k0^a - d*k0;

ci=(c1>0)*c1;

cs=(c2>0)*c2;

if cs<ci;

cc=ci;

ci=cs;

cs=cc;

end;

dc=1;

while (1);

c0 = (ci+cs)/2;

[yt,ct,it,kt,m]= seriestk(k0,c0,a,d,b,tita,n,sigma,tauk,taui,z);

if
m(1)==n

break;

elseif
dc<1.e-14

disp('Convergencia
no alcanzada'
)

disp('n máximo:')

disp(m(1))

break;

elseif
(sign(m(2))<=0);

cs=c0;

else

ci=c0;

end

dc = cs - ci;

end

n2 = m(1);

%Modelo de
Crecimiento Neoclásico%

%Diferentes Estados Estacionarios para Parámetros Diferentes%

a=0.3;

d=0.06;

b=0.95;

taui=0.1;

tauk0=0.05;

tauk1=0.1;

tauk2=0.2;

z=0.03;

sigma=0.01;

tita=0.2;

k0=1;

n=45;

%----Modelos Alternativos-----%

[yt1,ct1,it1,kt1,n1]= series2tk(k0,a,d,b,tita,n,sigma,tauk0,taui,z);

[yt2,ct2,it2,kt2,n2]= series2tk(k0,a,d,b,tita,n,sigma,tauk1,taui,z);

[yt3,ct3,it3,kt3,n3]= series2tk(k0,a,d,b,tita,n,sigma,tauk2,taui,z);

t1= 1:n1;

t2= 1:n2;

t3= 1:n3;

%Gráfico%

%Fases%

kee=(a*(1-tauk)/((1+taui)*(1+z)*(1+sigma)/b - (1+taui)*(1+d)))^(1/(1-a))

cee=kee^a -d*kee;

k=linspace(0,1.3*kee,100)';

c1=k.^a + (1-d).*k - kee;

c2=k.^a - d.*k;

figure(1)

plot(kt1,ct1,'*-',kt2,ct2,'d-',kt3,ct3,'o-',k,c1,k,c2);

axis([0 (1.3*kee) 0 (1.3*cee)])

title('Diagrama de
Fases'
);

xlabel('Capital');

ylabel('Consumo');

legend('tauk0 =
0.05'
,'tauk
= 0.1'
,'tauk2
= 0.2'
);

%Gráfico para las variables reales

figure(2)

plot(t1,yt1,'*-',t2,yt2,'d-',t3,yt3,'o-')

title('Ingreso');

xlabel('tiempo');

legend('tauk0 =
0.05'
,'tauk1
= 0.1'
,'tauk2
= 0.2'
);

figure(3)

plot(t1,ct1,'*-',t2,ct2,'d-',t3,ct3,'o-')

title('Consumo');

xlabel('tiempo');

legend('tauk0 =
0.05'
,'tauk1
= 0.1'
,'tauk2
= 0.2'
);

figure(4)

plot(t1,it1,'*-',t2,it2,'d-',t3,it3,'o-')

title('Inversión');

xlabel('tiempo');

legend('tauk0 =
0.05'
,'tauk1
= 0.1'
,'tauk2
= 0.2'
);

figure(5)

plot(t1,kt1,'*-',t2,kt2,'d-',t3,kt3,'o-')

title('Capital');

xlabel('tiempo');

legend('tauk0 =
0.05'
,'tauk1
= 0.1'
,'tauk2
= 0.2'
);

Para obtener la trayectoria de las variables cuando varía el impuesto a la
inversión, se utilizaron los mismos programas con las correspondientes
modificaciones.

APÉNDICE B: Variables en equilibrio.

%Valores en Estado Estacionario%

function keess =
ss(tauc,tauk,taul,taui,n,d,a,b,tita,sigma);

%---Parámetros Calibrados---%

tauc=0.21; %imp al
consumo

taui=0.05; %imp a la
inversión

taul=0.25; %imp al
trabajo

tauk=0.1; %imp al
capital

n=0.03; %tasa de
crecimiento de la población

d=0.06; %tasa
depreciación

a=0.3; %Elasticidad
producto del factor capital

b=0.95; %tasa de
descuento social

tita=0.8;
%Elasticidad de la utiliada marginal con respecto al consumo

sigma=0.01; %Tasa de
crecimiento del producto

%--- Restantes Variables en Estado Estacionario ---%

keess=(((1+n)*(1 + sigma)*(1+taui)/b - (1-d)*(1+taui))/(a*(1-tauk)))^(1/(a-1));

yeess= keess^a;

ieess= keess*(d+n);

ceess= yeess - ieess;

reess= a*keess^(a-1);

weess= yeess - reess*keess;

geess= tauk*keess*reess + tauc*ceess + taul*weess + taui*ieess;

%--- Distribución de Recursos es Estado Estacionario ---%

retribalcap= (1-tauk)*reess*keess;

retribaltrab= (1-taul)*weess;

prestributar= geess/yeess;

tasaahorro= (yeess-ceess)/yeess;

%--- Salidas y Gráficos ---%

disp('------Valor de
las Variables en Estado Estacionario--------'
);

disp(' keess yeess
ieess ceess geess reess weess'
);

disp([keess yeess ieess ceess geess reess weess]);

disp('------Otros
Datos--------'
);

disp('retrib cap
retrib trab pres trib tasa ahorro'
);

disp([retribalcap retribaltrab prestributar tasaahorro]);

 

 

 

 

 

 

APÉNDICE “C”: Análisis Laffer.

%---Parámetros Calibrados---%

tauc=0.21; %imp al
consumo

tauk=0.05; %imp a la
inversión

taul=0.25; %imp al
trabajo

n=0.03; %tasa de
crecimiento de la población

d=0.06; %tasa
depreciación

a=0.3; %Elasticidad
producto del factor capital

b=0.95; %tasa de
descuento social

tita=0.8;
%Elasticidad de la utiliada marginal con respecto al consumo

sigma=0.01; %Tasa de
crecimiento del producto

%---Bucle para el Consumo y el Capital en Estado Estacionario para dif tasas
a la Inv---%

m=50;

taui= linspace(0.01,0.99,m)';
%vector con diferentes tasas
(equidistantes) para el capital

keess= zeros(m,1);

for i=1:m

keess(i,1)=(((1+n)*(1 + sigma)*(1+taui(i))/b - (1-d)*(1+taui(i)))/(a*(1-tauk)))^(1/(a-1));

ceess(i,1)=(((1+n)*(1 + sigma)*(1+taui(i))/b - (1-d)*(1+taui(i)))/(a*(1-tauk)))^(a/(a-1))
-d*(((1+n)*(1+taui(i))/b - (1-d)*(1+taui(i)))/(a*(1-tauk)))^(1/(a-1));

end

%--- Restantes Variables en Estado Estacionario ---%

yeess= keess.^a;

ieess= keess.*(d+n);

reess= a*keess.^(a-1);

weess= yeess - reess.*keess;

geess= tauk*keess.*reess + tauc*ceess + taul*weess + taui.*ieess;

%--- Distribución de Recursos es Estado Estacionario ---%

retribalcap= (1-tauk)*reess.*keess;

retribaltrab= (1-taul)*weess;

prestributar= geess./yeess;

tasaahorro= (yeess-ceess)./yeess;

%--- Salidas y Gráficos ---%

disp('------Valor de
las Variables en Estado Estacionario--------'
);

disp(' keess yeess
ieess ceess geess reess weess taui'
);

disp([keess yeess ieess ceess geess reess weess taui]);

figure(1)

plot(taui,[yeess ceess keess ieess geess])

legend(['y';'c';'k';'i';'g'])

title('Analisis tipo
Laffer de las Variables Percapita'
)

xlabel('taui')

 

 

 

 

figure(2)

subplot(2,1,1)

plot(taui,[weess reess])

legend(['w';'r'])

title('Analisis de
Precios de Factores'
)

xlabel('taui')

subplot(2,1,2)

plot(taui,[retribalcap retribaltrab])

title('Análisis
Distributivo'
)

xlabel('taui')

legend(['capital';'trabajo'])

figure (3)

plot(taui,[prestributar tasaahorro])

title('Otos Datos')

xlabel('taui')

legend(['prestrib';'tasaahorro'])

%--- Valores Máximos para las Variables en Estado Estacionario ---%

productomaximo=max(yeess);

gastomaximo=max(geess);

consumomaximo=max(ceess);

inversionmaxima=max(ieess);

capitalmaximo=max(keess);

disp('--- Valores
Máximos de las Variables para cada Alícuota ---'
)

disp(' yeess keess
ceess ieess geess'
)

disp([productomaximo capitalmaximo consumomaximo inversionmaxima gastomaximo])

Para el caso del impuesto al capital se utilizó el mismo bucle con las
respectivas modificaciones del caso.

Como citar este artículo: 

Federico "Rutinas Matlab y Algoritmos de Bisección" [en linea]
Dirección URL: https://www.zonaeconomica.com/fiscal/computacional/matlab (Consultado el 23 de Abr de 2024)



Temas de Economía: 

Comentarios

Estimados,

Recibimos algunos mensajes preguntandonos qué es un algoritmo de bisección, sin embargo, no sabemos qué es.

¿Alguien puede explicar brevemente qué es un algoritmo de bisección?

Si alguien lo sabe, por favor enviar un comentario explicando. Indicar nombre.

Gracias de antemano,

Equipo de zonaeconomica.com

Federico

Un algoritmo de biseccion es un metodo muy para hallar raices de una funcion , como f(x)=cos(5x)-x; la manera en la que procede este metodo es muy facil , toma dos puntos en x ; a,b luego calcula el punto medio de estos , osea p1=(a+b)/2, si f(p1)*f(a)<0 , entonces p2=(a-p1)/2 en caso contrario p2=(b-p1)/2; asi sucesivamente hasta encontrar un aproximado a la raiz .... este metodo tiene un % de error muy alto hay metodos con mayor precision , pero de mayor dificultad

Me preguntaba como hago para introducir la alicuota de inversion, que datos debo tomar para representar la alicuota??? cricimiento del PIB??, espero su pronta respuesta, mil gracias por su atención prestada.

Quería hacer un comentario del asunto, se llama bisección porque se corta el intervalo donde se cree que está la solución a la mitad y se escoge uno donde está la solución, así sucesivamente hasta que se aproxima a el punto que es la raíz de la función a la cual se le aplica el método. Recordemos que cuando la función se hace cero(que es para lo que necesitamos el programa) se hallan valores para los cuales hay máximos(valóres óptimos) o mínimos, en este caso lo que estaban preguntando.

Espero sirva de algo

Añadir nuevo comentario

Experimento Computacional en un Modelo de Equilibrio General con Gobierno