Home > . > sim1.m

sim1

PURPOSE ^

Copyright (C) 2001 Michel Juillard

SYNOPSIS ^

function sim1

DESCRIPTION ^

 Copyright (C) 2001 Michel Juillard

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 % Copyright (C) 2001 Michel Juillard
0002 %
0003 function sim1
0004 
0005 global M_ options_ oo_
0006 global  iyp iyf ct_ M_ it_ c
0007 
0008 lead_lag_incidence = M_.lead_lag_incidence;
0009 
0010 ny = size(oo_.y_simul,1) ;
0011 nyp = nnz(lead_lag_incidence(1,:)) ;
0012 nyf = nnz(lead_lag_incidence(3,:)) ;
0013 nrs = ny+nyp+nyf+1 ;
0014 nrc = nyf+1 ;
0015 iyf = find(lead_lag_incidence(3,:)>0) ;
0016 iyp = find(lead_lag_incidence(1,:)>0) ;
0017 isp = [1:nyp] ;
0018 is = [nyp+1:ny+nyp] ;
0019 isf = iyf+nyp ;
0020 isf1 = [nyp+ny+1:nyf+nyp+ny+1] ;
0021 stop = 0 ;
0022 iz = [1:ny+nyp+nyf];
0023 
0024 disp (['-----------------------------------------------------']) ;
0025 disp (['MODEL SIMULATION :']) ;
0026 fprintf('\n') ;
0027 
0028 it_init = 2 ;
0029 
0030 h1 = clock ;
0031 for iter = 1:options_.maxit
0032     h2 = clock ;
0033 
0034     if ct_ == 0
0035         c = zeros(ny*options_.periods,nrc) ;
0036     else
0037         c = zeros(ny*(options_.periods+1),nrc) ;
0038     end
0039 
0040     it_ = it_init ;
0041     z = [oo_.y_simul(iyp,it_-1) ; oo_.y_simul(:,it_) ; oo_.y_simul(iyf,it_+1)] ;
0042     [d1,M_.jacobia] = feval([M_.fname '_dynamic'],z,oo_.exo_simul);
0043     M_.jacobia = [M_.jacobia(:,iz) -d1] ;
0044     ic = [1:ny] ;
0045     icp = iyp ;
0046     c (ic,:) = M_.jacobia(:,is)\M_.jacobia(:,isf1) ;
0047     for it_ = it_init+1:options_.periods+1
0048         z = [oo_.y_simul(iyp,it_-1) ; oo_.y_simul(:,it_) ; oo_.y_simul(iyf,it_+1)] ;
0049         [d1,M_.jacobia] = feval([M_.fname '_dynamic'],z,oo_.exo_simul);
0050         M_.jacobia = [M_.jacobia(:,iz) -d1] ;
0051         M_.jacobia(:,[isf nrs]) = M_.jacobia(:,[isf nrs])-M_.jacobia(:,isp)*c(icp,:) ;
0052         ic = ic + ny ;
0053         icp = icp + ny ;
0054         c (ic,:) = M_.jacobia(:,is)\M_.jacobia(:,isf1) ;
0055     end
0056 
0057     if ct_ == 1
0058         s = eye(ny) ;
0059         s(:,isf) = s(:,isf)+c(ic,1:nyf) ;
0060         ic = ic + ny ;
0061         c(ic,nrc) = s\c(:,nrc) ;
0062         c = bksup1(ny,nrc) ;
0063         c = reshape(c,ny,options_.periods+1) ;
0064         oo_.y_simul(:,it_init:options_.periods+2) = oo_.y_simul(:,it_init:options_.periods+2)+options_.slowc*c ;
0065     else
0066         c = bksup1(ny,nrc) ;
0067         c = reshape(c,ny,options_.periods) ;
0068         oo_.y_simul(:,it_init:options_.periods+1) = oo_.y_simul(:,it_init:options_.periods+1)+options_.slowc*c ;
0069     end
0070 
0071     err = max(max(abs(c./options_.scalv')));
0072     disp([num2str(iter) ' -    err = ' num2str(err)]) ;
0073     disp(['    Time of iteration     :' num2str(etime(clock,h2))]) ;
0074 
0075     if err < options_.dynatol
0076         stop = 1 ;
0077         fprintf('\n') ;
0078         disp(['    Total time of simulation     :' num2str(etime(clock,h1))]) ;
0079         fprintf('\n') ;
0080         disp(['    Convergency obtained.']) ;
0081         fprintf('\n') ;
0082         break
0083     end
0084 end
0085 
0086 if ~ stop
0087     fprintf('\n') ;
0088     disp(['    Total time of simulation     :' num2str(etime(clock,h1))]) ;
0089     fprintf('\n') ;
0090     disp(['WARNING : maximum number of iterations is reached (modify options_.maxit).']) ;
0091     fprintf('\n') ;
0092 end
0093 disp (['-----------------------------------------------------']) ;
0094 return ;
0095 
0096 % 08/24/01 MJ added start_simul

Generated on Fri 16-Jun-2006 09:09:06 by m2html © 2003