fminbnd not working for a single variable optimization problem

2 vues (au cours des 30 derniers jours)
David Hong
David Hong le 3 Avr 2022
Commenté : David Hong le 3 Avr 2022
Hello,
I'm attempting to solve a single variable optimization problem however the function is quite complicated that requires 2 steps of optimizations for a given target variable. My issue is my specified function is stating I have too little inputs.
clear all;
global beta delta alpha kmat zmat t_matrix V_0 gamma
alpha = 0.2;
beta = 0.9;
delta = 0.1;
gamma = 2;
rho = 0.6;
mu=0;
sigma_z=0.6;
delta=0.05
%Steady State Computation
syms kstar cstar hstar x
eqns = [alpha*kstar^(alpha - 1)*hstar^(1-alpha) - (1/beta-1+delta)==0,
cstar^(-gamma)*(1-alpha)*kstar^alpha*hstar^(-alpha) == 1/(1-hstar),
cstar+delta*kstar == kstar^alpha*hstar^(1-alpha)];
sol = vpasolve(eqns, [kstar cstar hstar],[0.1 0.1 0.1]);
kstar = double(sol.kstar)
cstar = double(sol.cstar)
hstar = double(sol.hstar)
%Discretization
kmin=[0.1*kstar 0.01];
kmin=max(kmin);
kmax=[1.75*kstar 1];
kmax=min(kmax);
kgrid=30;
zgrid=10;
dev=1;
kmat = linspace(kmin,kmax,kgrid);
[zmat, t_matrix] = tauchen(zgrid,mu,rho,sigma_z,dev); %Discretization of AR 1 Process
s = meshgrid(kmat,kmat,zmat);
size(s)
V_0 = meshgrid(zmat,kmat);
for i = 1:size(s,1)
for m = 1:size(s,3)
V_0(i,m) = (((exp(zmat(m))*kmat(i)^alpha*hstar^(1-alpha) -delta*kmat(i))^alpha...
*(1-hstar)^(1-alpha))^(1-gamma)/(1-gamma))/(1-beta);
end
end
V_0 = real(V_0);
maxits = 1000;
eps = 1e-7;
dif=eps+1000;
its=0;
%Finding the maximum and iterating
while dif>eps && its<maxits
for j=1:zgrid
for i=1:kgrid
k0=kmat(1,i);
z0=zmat(j,1);
a0=t_matrix(j,:);
k1=fminbnd(@valfun3,kmin,kmax);
v1(i,j)=-valfun3(k1,k0,z0,a0);
k11(i,j)=k1;;
end
end
dif=norm(v1-v0)
v0=v1;
its=its+1
end
function val=valfun3(k,k0,z0,a0)
global beta delta alpha kmat zmat V_0 gamma
g = interp2(zmat,kmat,V_0,zmat',k,'linear');
C = exp(z0)*k0^(alpha)*labor(k,k0,z0)^(1-alpha) + (1-delta)*k0-k;
if C<=0
val=-888888888888888-8000*abs(C);
else
val=(exp(z0)*k0^(alpha)*labor(k,k0,z0)^(1-alpha) + (1-delta)*k0-k)^(1-gamma)/(1-gamma) + log(1-labor(k,k0,z0))+beta*(g*a0');
end
val=-val;
end
function h=labor(k,k0,z0)
global delta alpha gamma
syms y
f = 1/(1-y)*(exp(z0)*k0^alpha*y^(1-alpha)+(1-delta)*k0 - k)^gamma-(1-alpha)*exp(z0)*k0^alpha*y^(-alpha)==0;
h=double(vpasolve(f,y,[0 1]));
end
Thanks for any guidance ahead of time.

Réponse acceptée

Torsten
Torsten le 3 Avr 2022
k1=fminbnd(@(k)valfun3(k,k0,z0,a0),kmin,kmax);
instead of
k1=fminbnd(@valfun3,kmin,kmax);

Plus de réponses (0)

Catégories

En savoir plus sur Symbolic Math Toolbox dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by