Fsolve within a for loop
Show older comments
Hi. I need to get each column of z_ss in each iteration j after fsolve. The problem is I do not know how to adjust the function in the separate file accordingly, such that in the first iteration it is considering z_ss(:,1) , in the second z_ss(:,2) ect...
This is the code:
clear
clc
r_annual = 6.5;
rss = r_annual/400;
delta = 0.021;
sigma = 0.15;
alpha = 0.36;
rho = 0.95;
sigma_theta = 0.01;
theta_ss = 1; %(1)
M = 2;
g = 0:0.1:0.2;
z_ss = ones(M,length(g));
gamma = zeros(length(g),1);
beta = zeros(length(g),1);
for j = 1:length(g)
gamma(j) = 1+g(j);
beta(j) = gamma(j)/(1+rss);
params = [sigma alpha rss beta(j) r_annual delta rho gamma(j) M];
options=optimset('display','iter');%,'TolFun',1e-4,'TolX', 1e-4);
options=optimset(options,'MaxFunEvals',10000,'TolX',1e-8);
z_steady = @(z_ss)steadygrow(params, z_ss);
z_ss(:,j) = fsolve(z_steady, z_ss, options); %(2)
end;
and the function is :
function H = steadygrow(params, z_ss)
%params = [sigma alpha rss beta(j) r_annual delta rho gamma(j) M];
h = zeros(params(9),1);
s1 = zeros(params(9),1);
s2 = zeros(params(9),1);
for i = 1:params(9)
s1(i) = (1-normcdf(z_ss(i)-params(1)))*(params(4)*(1-params(6)))^(i-1)*(params(8))^(-i);
s2(i) = (1-normcdf(z_ss(i)))*(params(4)*(1-params(6)))^(i-1);
end;
S1 = log(sum(s1));
S2 = log(sum(s2));
for i =1:params(9)
h(i) = z_ss(i) - 1/params(1)*( log(1-params(2)) + S1 - S2 + 1/2*params(1)^2 + i * log (params(8)) );
end;
H = h;
end
Any help would be appreciated.
1 Comment
Torsten
on 4 Oct 2018
You mean how to supply z_ss(:,j) as initial guess for z_ss in the j'th call to fsolve ?
Accepted Answer
More Answers (0)
Categories
Find more on Loops and Conditional Statements 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!