fminbnd not working for a single variable optimization problem

2 views (last 30 days)
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.

Accepted Answer

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

More Answers (0)

Categories

Find more on Symbolic Math Toolbox in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!