fminbnd not working for a single variable optimization problem
2 ビュー (過去 30 日間)
古いコメントを表示
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.
0 件のコメント
採用された回答
Torsten
2022 年 4 月 3 日
k1=fminbnd(@(k)valfun3(k,k0,z0,a0),kmin,kmax);
instead of
k1=fminbnd(@valfun3,kmin,kmax);
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Symbolic Math Toolbox についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!