131 lines
7.7 KiB
HTML
131 lines
7.7 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
|
"http://www.w3.org/TR/REC-html40/loose.dtd">
|
|
<html>
|
|
<head>
|
|
<title>Description of dynare_solve</title>
|
|
<meta name="keywords" content="dynare_solve">
|
|
<meta name="description" content="Copyright (C) 2001 Michel Juillard">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
|
<meta name="generator" content="m2html © 2003 Guillaume Flandin">
|
|
<meta name="robots" content="index, follow">
|
|
<link type="text/css" rel="stylesheet" href="../m2html.css">
|
|
</head>
|
|
<body>
|
|
<a name="_top"></a>
|
|
<div><a href="../index.html">Home</a> > <a href="index.html">.</a> > dynare_solve.m</div>
|
|
|
|
<!--<table width="100%"><tr><td align="left"><a href="../index.html"><img alt="<" border="0" src="../left.png"> Master index</a></td>
|
|
<td align="right"><a href="index.html">Index for . <img alt=">" border="0" src="../right.png"></a></td></tr></table>-->
|
|
|
|
<h1>dynare_solve
|
|
</h1>
|
|
|
|
<h2><a name="_name"></a>PURPOSE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
|
|
<div class="box"><strong>Copyright (C) 2001 Michel Juillard</strong></div>
|
|
|
|
<h2><a name="_synopsis"></a>SYNOPSIS <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
|
|
<div class="box"><strong>function [x,cheik] = dynare_solve(func,x,jacobian_flag,varargin) </strong></div>
|
|
|
|
<h2><a name="_description"></a>DESCRIPTION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
|
|
<div class="fragment"><pre class="comment"> Copyright (C) 2001 Michel Juillard</pre></div>
|
|
|
|
<!-- crossreference -->
|
|
<h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
|
|
This function calls:
|
|
<ul style="list-style-image:url(../matlabicon.gif)">
|
|
<li><a href="set_default_option.html" class="code" title="function options=set_default_option(options,field,default)">set_default_option</a> </li><li><a href="solve1.html" class="code" title="function [x,check] = solve1(func,x,j1,j2,jacobian_flag,varargin)">solve1</a> Copyright (C) 2001 Michel Juillard</li></ul>
|
|
This function is called by:
|
|
<ul style="list-style-image:url(../matlabicon.gif)">
|
|
<li><a href="olr1.html" class="code" title="function dr = olr1(ys,algo,olr_inst,bet,obj_var,W)">olr1</a> Copyright (C) 2001 Michel Juillard</li><li><a href="osr1.html" class="code" title="function oo_.dr=osr1(params,weights)">osr1</a> </li><li><a href="resol.html" class="code" title="function [dr,info]=resol(ys,check_flag)">resol</a> Copyright (C) 2001 Michel Juillard</li><li><a href="resol1.html" class="code" title="function dr=resol1(ys,algo,linear,iorder)">resol1</a> Copyright (C) 2001 Michel Juillard</li><li><a href="simult_.html" class="code" title="function y_=simult_(y0,dr,ex_,iorder)">simult_</a> Copyright (C) 2001 Michel Juillard</li><li><a href="steady_.html" class="code" title="function steady_()">steady_</a> Copyright (C) 2001 Michel Juillard</li></ul>
|
|
<!-- crossreference -->
|
|
|
|
|
|
<h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
|
|
<div class="fragment"><pre>0001 <span class="comment">% Copyright (C) 2001 Michel Juillard</span>
|
|
0002 <span class="comment">%</span>
|
|
0003 <a name="_sub0" href="#_subfunctions" class="code">function [x,cheik] = dynare_solve(func,x,jacobian_flag,varargin)</a>
|
|
0004 <span class="keyword">global</span> options_
|
|
0005
|
|
0006 options_ = <a href="set_default_option.html" class="code" title="function options=set_default_option(options,field,default)">set_default_option</a>(options_,<span class="string">'solve_algo'</span>,2);
|
|
0007 cheik = 0;
|
|
0008 <span class="keyword">if</span> options_.solve_algo == 0
|
|
0009 <span class="keyword">if</span> ~isempty(which(<span class="string">'fsolve'</span>)) & sscanf(version(<span class="string">'-release'</span>),<span class="string">'%d'</span>) >= 13;
|
|
0010 options=optimset(<span class="string">'fsolve'</span>);
|
|
0011 options.MaxFunEvals = 20000;
|
|
0012 options.TolFun=1e-8;
|
|
0013 options.Display = <span class="string">'off'</span>;
|
|
0014 <span class="keyword">if</span> jacobian_flag
|
|
0015 options.Jacobian = <span class="string">'on'</span>;
|
|
0016 <span class="keyword">else</span>
|
|
0017 options.Jacobian = <span class="string">'on'</span>;
|
|
0018 <span class="keyword">end</span>
|
|
0019 [x,fval,exitval,output] = fsolve(func,x,options,varargin{:});
|
|
0020 <span class="keyword">if</span> exitval > 0
|
|
0021 cheik = 0;
|
|
0022 <span class="keyword">else</span>
|
|
0023 cheik = 1;
|
|
0024 <span class="keyword">end</span>
|
|
0025 <span class="keyword">return</span>
|
|
0026 <span class="keyword">else</span>
|
|
0027 options_.solve_algo = 1;
|
|
0028 <span class="keyword">end</span>
|
|
0029 <span class="keyword">end</span>
|
|
0030
|
|
0031 <span class="keyword">if</span> options_.solve_algo == 1
|
|
0032 nn = size(x,1) ;
|
|
0033 [x,cheik]=<a href="solve1.html" class="code" title="function [x,check] = solve1(func,x,j1,j2,jacobian_flag,varargin)">solve1</a>(func,x,1:nn,1:nn,jacobian_flag,varargin{:});
|
|
0034 <span class="keyword">elseif</span> options_.solve_algo == 2
|
|
0035 nn = size(x,1) ;
|
|
0036 tolf = eps^(2/3) ;
|
|
0037
|
|
0038 <span class="keyword">if</span> jacobian_flag
|
|
0039 [fvec,fjac] = feval(func,x,varargin{:});
|
|
0040 <span class="keyword">else</span>
|
|
0041 fvec = feval(func,x,varargin{:});
|
|
0042 fjac = zeros(nn,nn) ;
|
|
0043 <span class="keyword">end</span>
|
|
0044
|
|
0045 i = find(~isfinite(fvec));
|
|
0046
|
|
0047 <span class="keyword">if</span> ~isempty(i)
|
|
0048 disp([<span class="string">'STEADY: numerical initial values incompatible with the following'</span> <span class="keyword">...</span>
|
|
0049 <span class="string">' equations'</span>])
|
|
0050 disp(i')
|
|
0051 error(<span class="string">'exiting ...'</span>)
|
|
0052 <span class="keyword">end</span>
|
|
0053
|
|
0054 f = 0.5*fvec'*fvec ;
|
|
0055
|
|
0056 <span class="keyword">if</span> max(abs(fvec)) < 0.01*tolf
|
|
0057 <span class="keyword">return</span> ;
|
|
0058 <span class="keyword">end</span>
|
|
0059
|
|
0060 <span class="keyword">if</span> ~jacobian_flag
|
|
0061 fjac = zeros(nn,nn) ;
|
|
0062 dh = max(abs(x),options_.gstep*ones(nn,1))*eps^(1/3);
|
|
0063 <span class="keyword">for</span> j = 1:nn
|
|
0064 xdh = x ;
|
|
0065 xdh(j) = xdh(j)+dh(j) ;
|
|
0066 fjac(:,j) = (feval(func,xdh,varargin{:}) - fvec)./dh(j) ;
|
|
0067 <span class="keyword">end</span>
|
|
0068 <span class="keyword">end</span>
|
|
0069
|
|
0070 [j1,j2,r,s] = dmperm(fjac);
|
|
0071
|
|
0072 <span class="keyword">for</span> i=length(r)-1:-1:1
|
|
0073 [x,cheik]=<a href="solve1.html" class="code" title="function [x,check] = solve1(func,x,j1,j2,jacobian_flag,varargin)">solve1</a>(func,x,j1(r(i):r(i+1)-1),j2(r(i):r(i+1)-1),jacobian_flag,varargin{:});
|
|
0074 <span class="keyword">if</span> cheik
|
|
0075 error(sprintf(<span class="string">'Solve block = %d check = %d\n'</span>,i,cheik));
|
|
0076 <span class="keyword">end</span>
|
|
0077 <span class="keyword">end</span>
|
|
0078 [x,cheik]=<a href="solve1.html" class="code" title="function [x,check] = solve1(func,x,j1,j2,jacobian_flag,varargin)">solve1</a>(func,x,1:nn,1:nn,jacobian_flag,varargin{:});
|
|
0079
|
|
0080 <span class="keyword">end</span>
|
|
0081 <span class="comment">% fvec1 = feval(func,x,varargin{:})</span>
|
|
0082
|
|
0083 <span class="comment">% 08/28/03 MJ add a final call to solve1 for solve_algo == 1 in case</span>
|
|
0084 <span class="comment">% initvals generates 'false' zeros in the Jacobian</span>
|
|
0085</pre></div>
|
|
<hr><address>Generated on Fri 16-Jun-2006 09:09:06 by <strong><a href="http://www.artefact.tk/software/matlab/m2html/">m2html</a></strong> © 2003</address>
|
|
</body>
|
|
</html> |