Merge branch 'macroprocessor-doc'
commit
3fc2947951
|
@ -0,0 +1,16 @@
|
|||
if HAVE_PDFLATEX
|
||||
if HAVE_BEAMER
|
||||
pdf-local: macroprocessor.pdf
|
||||
endif
|
||||
endif
|
||||
|
||||
SRC = macroprocessor.tex new-design.pdf
|
||||
|
||||
EXTRA_DIST = $(SRC)
|
||||
|
||||
macroprocessor.pdf: $(SRC)
|
||||
$(PDFLATEX) macroprocessor
|
||||
$(PDFLATEX) macroprocessor
|
||||
|
||||
clean-local:
|
||||
rm -f macroprocessor.pdf *.toc *.aux *.log *.nav *.snm *.vrb *.out *~
|
|
@ -0,0 +1,624 @@
|
|||
\documentclass{beamer}
|
||||
\usepackage[utf8]{inputenc}
|
||||
\usepackage[T1]{fontenc}
|
||||
\usepackage{lmodern}
|
||||
\usepackage{amsmath}
|
||||
\usepackage[copyright]{ccicons}
|
||||
|
||||
\usetheme{Boadilla}
|
||||
|
||||
\title{The Dynare Macro-processor}
|
||||
\subtitle{Dynare Summer School 2017}
|
||||
\author{Sébastien Villemot}
|
||||
%\pgfdeclareimage[height=0.6cm]{logo}{logo-ofce}
|
||||
\institute{OFCE}
|
||||
\date{June 13, 2017}
|
||||
|
||||
\AtBeginSection[]
|
||||
{
|
||||
\begin{frame}
|
||||
\frametitle{Outline}
|
||||
\tableofcontents[currentsection]
|
||||
\end{frame}
|
||||
}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\begin{frame}
|
||||
\titlepage
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Outline}
|
||||
\tableofcontents
|
||||
\end{frame}
|
||||
|
||||
\section{Overview}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Motivation}
|
||||
\begin{itemize}
|
||||
\item The \textbf{Dynare language} (used in MOD files) is well suited for many economic models
|
||||
\item However, as such, it lacks some useful features, such as:
|
||||
\begin{itemize}
|
||||
\item a loop mechanism for automatically repeating similar blocks of equations (such as in multi-country models)
|
||||
\item an operator for indexed sums or products inside equations
|
||||
\item a mechanism for splitting large MOD files in smaller modular files
|
||||
\item the possibility of conditionally including some equations or some runtime commands
|
||||
\end{itemize}
|
||||
\item The \textbf{Dynare Macro-language} was specifically designed to address these issues
|
||||
\item Being flexible and fairly general, it can also be helpful in other situations
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Design of the macro-language}
|
||||
\begin{itemize}
|
||||
\item The Dynare Macro-language provides a new set of \textbf{macro-commands} which can be inserted inside MOD files
|
||||
\item Language features include:
|
||||
\begin{itemize}
|
||||
\item file inclusion
|
||||
\item loops (\textit{for} structure)
|
||||
\item conditional inclusion (\textit{if/else} structures)
|
||||
\item expression substitution
|
||||
\end{itemize}
|
||||
\item The macro-processor transforms a MOD file with macro-commands into a MOD file without macro-commands (doing text expansions/inclusions) and then feeds it to the Dynare parser
|
||||
\item The key point to understand is that the macro-processor only does \textbf{text substitution} (like the C preprocessor or the PHP language)
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Design of Dynare}
|
||||
\includegraphics[width=0.95\linewidth]{new-design.pdf}
|
||||
\end{frame}
|
||||
|
||||
\section{Syntax}
|
||||
|
||||
\begin{frame}[fragile=singleslide]
|
||||
\frametitle{Macro Directives}
|
||||
\begin{itemize}
|
||||
\item Directives begin with an at-sign followed by a pound sign (\verb+@#+)
|
||||
\item A directive produces no output, but gives instructions to the macro-processor
|
||||
\item Main directives are:
|
||||
\begin{itemize}
|
||||
\item file inclusion: \verb+@#include+
|
||||
\item definition a variable of the macro-processor: \verb+@#define+
|
||||
\item conditional statements (\verb+@#if/@#ifdef/@#ifndef/@#else/@#endif+)
|
||||
\item loop statements (\verb+@#for/@#endfor+)
|
||||
\end{itemize}
|
||||
\item In most cases, directives occupy exactly one line of text. In case of need, two anti-slashes (\verb+\\+) at the end of the line indicates that the directive is continued on the next line.
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Variables}
|
||||
\begin{itemize}
|
||||
\item The macro processor maintains its own list of variables (distinct of model variables and of MATLAB/Octave variables)
|
||||
\item Macro-variables can be of four types:
|
||||
\begin{itemize}
|
||||
\item integer
|
||||
\item character string (declared between \textit{double} quotes)
|
||||
\item array of integers
|
||||
\item array of strings
|
||||
\end{itemize}
|
||||
\item No boolean type:
|
||||
\begin{itemize}
|
||||
\item false is represented by integer zero
|
||||
\item true is any non-null integer
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile=singleslide]
|
||||
\frametitle{Macro-expressions (1/2)}
|
||||
It is possible to construct macro-expressions, using standard operators.
|
||||
\begin{block}{Operators on integers}
|
||||
\begin{itemize}
|
||||
\item arithmetic operators: \texttt{+ - * /}
|
||||
\item comparison operators: \texttt{< > <= >= == !=}
|
||||
\item logical operators: \verb+&& || !+
|
||||
\item integer ranges: \texttt{1:4} is equivalent to integer array \texttt{[1,2,3,4]}
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
|
||||
\begin{block}{Operators on character strings}
|
||||
\begin{itemize}
|
||||
\item comparison operators: \texttt{== !=}
|
||||
\item concatenation: \texttt{+}
|
||||
\item extraction of substrings: if \texttt{s} is a string, then one can write \texttt{s[3]} or \texttt{s[4:6]}
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile=singleslide]
|
||||
\frametitle{Macro-expressions (2/2)}
|
||||
\begin{block}{Operators on arrays}
|
||||
\begin{itemize}
|
||||
\item dereferencing: if \texttt{v} is an array, then \texttt{v[2]} is its $2^{\textrm{nd}}$ element
|
||||
\item concatenation: \texttt{+}
|
||||
\item difference \texttt{-}: returns the first operand from which the elements of the second operand have been removed
|
||||
\item extraction of sub-arrays: \textit{e.g.} \texttt{v[4:6]}
|
||||
\item testing membership of an array: \texttt{in} operator \\ (example:
|
||||
\texttt{"b" in ["a", "b", "c"]} returns \texttt{1})
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
|
||||
Macro-expressions can be used at two places:
|
||||
\begin{itemize}
|
||||
\item inside macro directives, directly
|
||||
\item in the body of the MOD file, between an at-sign and curly braces (like \verb+@{expr}+): the macro processor will substitute the expression with its value
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile=singleslide]
|
||||
\frametitle{Define directive}
|
||||
|
||||
The value of a macro-variable can be defined with the \verb+@#define+ directive.
|
||||
|
||||
\begin{block}{Syntax}
|
||||
\verb+@#define +\textit{variable\_name}\verb+ = +\textit{expression}
|
||||
\end{block}
|
||||
|
||||
\begin{block}{Examples}
|
||||
\begin{verbatim}
|
||||
@#define x = 5 // Integer
|
||||
@#define y = "US" // String
|
||||
@#define v = [ 1, 2, 4 ] // Integer array
|
||||
@#define w = [ "US", "EA" ] // String array
|
||||
@#define z = 3 + v[2] // Equals 5
|
||||
@#define t = ("US" in w) // Equals 1 (true)
|
||||
\end{verbatim}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile=singleslide]
|
||||
\frametitle{Expression substitution}
|
||||
\framesubtitle{Dummy example}
|
||||
\begin{block}{Before macro-processing}
|
||||
\begin{verbatim}
|
||||
@#define x = [ "B", "C" ]
|
||||
@#define i = 2
|
||||
|
||||
model;
|
||||
A = @{x[i]};
|
||||
end;
|
||||
\end{verbatim}
|
||||
\end{block}
|
||||
\begin{block}{After macro-processing}
|
||||
\begin{verbatim}
|
||||
model;
|
||||
A = C;
|
||||
end;
|
||||
\end{verbatim}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile=singleslide]
|
||||
\frametitle{Inclusion directive (1/2)}
|
||||
\begin{itemize}
|
||||
\item This directive simply includes the content of another file at the place where it is inserted.
|
||||
\begin{block}{Syntax}
|
||||
\verb+@#include "+\textit{filename}\verb+"+
|
||||
\end{block}
|
||||
\begin{block}{Example}
|
||||
\begin{verbatim}
|
||||
@#include "modelcomponent.mod"
|
||||
\end{verbatim}
|
||||
\end{block}
|
||||
\item Exactly equivalent to a copy/paste of the content of the included file
|
||||
\item Note that it is possible to nest includes (\textit{i.e.} to include a
|
||||
file from an included file)
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile=singleslide]
|
||||
\frametitle{Inclusion directive (2/2)}
|
||||
\begin{itemize}
|
||||
\item The filename can be given by a macro-variable (useful in loops):
|
||||
\begin{block}{Example with variable}
|
||||
\begin{verbatim}
|
||||
@#define fname = "modelcomponent.mod"
|
||||
@#include fname
|
||||
\end{verbatim}
|
||||
\end{block}
|
||||
\item Files to include are searched for in current directory. Other directories can
|
||||
be added with
|
||||
\texttt{@includepath} directive, \texttt{-I} command line option or
|
||||
\texttt{[paths]} section in config file.
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile=singleslide]
|
||||
\frametitle{Loop directive}
|
||||
\begin{block}{Syntax}
|
||||
\verb+@#for +\textit{variable\_name}\verb+ in +\textit{array\_expr} \\
|
||||
\verb+ +\textit{loop\_body} \\
|
||||
\verb+@#endfor+
|
||||
\end{block}
|
||||
\begin{block}{Example: before macro-processing}
|
||||
\small
|
||||
\begin{verbatim}
|
||||
model;
|
||||
@#for country in [ "home", "foreign" ]
|
||||
GDP_@{country} = A * K_@{country}^a * L_@{country}^(1-a);
|
||||
@#endfor
|
||||
end;
|
||||
\end{verbatim}
|
||||
\normalsize
|
||||
\end{block}
|
||||
|
||||
\begin{block}{Example: after macro-processing}
|
||||
\small
|
||||
\begin{verbatim}
|
||||
model;
|
||||
GDP_home = A * K_home^a * L_home^(1-a);
|
||||
GDP_foreign = A * K_foreign^a * L_foreign^(1-a);
|
||||
end;
|
||||
\end{verbatim}
|
||||
\normalsize
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile=singleslide]
|
||||
\frametitle{Conditional inclusion directives (1/2)}
|
||||
|
||||
\begin{columns}[T]
|
||||
\column{0.47\linewidth}
|
||||
\begin{block}{Syntax 1}
|
||||
\verb+@#if +\textit{integer\_expr} \\
|
||||
\verb+ +\textit{body included if expr != 0} \\
|
||||
\verb+@#endif+
|
||||
\end{block}
|
||||
|
||||
\column{0.47\linewidth}
|
||||
\begin{block}{Syntax 2}
|
||||
\verb+@#if +\textit{integer\_expr} \\
|
||||
\verb+ +\textit{body included if expr != 0} \\
|
||||
\verb+@#else+ \\
|
||||
\verb+ +\textit{body included if expr == 0} \\
|
||||
\verb+@#endif+
|
||||
\end{block}
|
||||
\end{columns}
|
||||
|
||||
\begin{block}{Example: alternative monetary policy rules}
|
||||
\scriptsize
|
||||
\begin{verbatim}
|
||||
@#define linear_mon_pol = 0 // or 1
|
||||
...
|
||||
model;
|
||||
@#if linear_mon_pol
|
||||
i = w*i(-1) + (1-w)*i_ss + w2*(pie-piestar);
|
||||
@#else
|
||||
i = i(-1)^w * i_ss^(1-w) * (pie/piestar)^w2;
|
||||
@#endif
|
||||
...
|
||||
end;
|
||||
\end{verbatim}
|
||||
\scriptsize
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile=singleslide]
|
||||
\frametitle{Conditional inclusion directives (2/2)}
|
||||
|
||||
\begin{columns}[T]
|
||||
\column{0.47\linewidth}
|
||||
\begin{block}{Syntax 1}
|
||||
\verb+@#ifdef +\textit{variable\_name} \\
|
||||
\verb+ +\textit{body included if variable defined} \\
|
||||
\verb+@#endif+
|
||||
\end{block}
|
||||
|
||||
\column{0.47\linewidth}
|
||||
\begin{block}{Syntax 2}
|
||||
\verb+@#ifdef +\textit{variable\_name} \\
|
||||
\verb+ +\textit{body included if variable defined} \\
|
||||
\verb+@#else+ \\
|
||||
\verb+ +\textit{body included if variable not defined} \\
|
||||
\verb+@#endif+
|
||||
\end{block}
|
||||
\end{columns}
|
||||
|
||||
\bigskip
|
||||
|
||||
There is also \verb+@#ifndef+, which is the opposite of \verb+@#ifdef+
|
||||
(\textit{i.e.} it tests whether a variable is \emph{not} defined).
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile=singleslide]
|
||||
\frametitle{Echo and error directives}
|
||||
|
||||
\begin{itemize}
|
||||
\item The echo directive will simply display a message on standard output
|
||||
\item The error directive will display the message and make Dynare stop (only makes sense inside a conditional inclusion directive)
|
||||
\end{itemize}
|
||||
|
||||
\begin{block}{Syntax}
|
||||
\verb+@#echo +\textit{string\_expr} \\
|
||||
\verb+@#error +\textit{string\_expr}
|
||||
\end{block}
|
||||
|
||||
\begin{block}{Examples}
|
||||
\begin{verbatim}
|
||||
@#echo "Information message."
|
||||
@#error "Error message!"
|
||||
\end{verbatim}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Saving the macro-expanded MOD file}
|
||||
\begin{itemize}
|
||||
\item For \textbf{debugging or learning} purposes, it is possible to save the output of the macro-processor
|
||||
\item This output is a valid MOD file, obtained after processing the macro-commands of the original MOD file
|
||||
% \item Useful to understand how the macro-processor works
|
||||
\item Just add the \texttt{savemacro} option on the Dynare command line (after the name of your MOD file)
|
||||
\item If MOD file is \texttt{filename.mod}, then the macro-expanded version will be saved in \texttt{filename-macroexp.mod}
|
||||
\item You can specify the filename for the macro-expanded version with the syntax \texttt{savemacro=mymacroexp.mod}
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
% \begin{frame}
|
||||
% \frametitle{Note on error messages}
|
||||
% \end{frame}
|
||||
|
||||
\section{Typical usages}
|
||||
|
||||
\begin{frame}[fragile=singleslide]
|
||||
\frametitle{Modularization}
|
||||
\begin{itemize}
|
||||
\item The \verb+@#include+ directive can be used to split MOD files into several modular components
|
||||
\item Example setup:
|
||||
\begin{description}
|
||||
\item[\texttt{modeldesc.mod}:] contains variable declarations, model equations and shocks declarations
|
||||
\item[\texttt{simulate.mod}:] includes \texttt{modeldesc.mod}, calibrates parameters and runs stochastic simulations
|
||||
\item[\texttt{estim.mod}:] includes \texttt{modeldesc.mod}, declares priors on parameters and runs bayesian estimation
|
||||
\end{description}
|
||||
\item Dynare can be called on \texttt{simulate.mod} and \texttt{estim.mod}
|
||||
\item But it makes no sense to run it on \texttt{modeldesc.mod}
|
||||
\item Advantage: no need to manually copy/paste the whole model (at the beginning) or changes to the model (during development)
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile=singleslide]
|
||||
\frametitle{Indexed sums or products}
|
||||
\framesubtitle{Example: moving average}
|
||||
\begin{columns}[T]
|
||||
\column{0.47\linewidth}
|
||||
\begin{block}{Before macro-processing}
|
||||
\begin{verbatim}
|
||||
@#define window = 2
|
||||
|
||||
var x MA_x;
|
||||
...
|
||||
model;
|
||||
...
|
||||
MA_x = 1/@{2*window+1}*(
|
||||
@#for i in -window:window
|
||||
+x(@{i})
|
||||
@#endfor
|
||||
);
|
||||
...
|
||||
end;
|
||||
\end{verbatim}
|
||||
\end{block}
|
||||
\column{0.47\linewidth}
|
||||
\begin{block}{After macro-processing}
|
||||
\begin{verbatim}
|
||||
var x MA_x;
|
||||
...
|
||||
model;
|
||||
...
|
||||
MA_x = 1/5*(
|
||||
+x(-2)
|
||||
+x(-1)
|
||||
+x(0)
|
||||
+x(1)
|
||||
+x(2)
|
||||
);
|
||||
...
|
||||
end;
|
||||
\end{verbatim}
|
||||
\end{block}
|
||||
\end{columns}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile=singleslide]
|
||||
\frametitle{Multi-country models}
|
||||
\framesubtitle{MOD file skeleton example}
|
||||
\scriptsize
|
||||
\begin{verbatim}
|
||||
@#define countries = [ "US", "EA", "AS", "JP", "RC" ]
|
||||
@#define nth_co = "US"
|
||||
|
||||
@#for co in countries
|
||||
var Y_@{co} K_@{co} L_@{co} i_@{co} E_@{co} ...;
|
||||
parameters a_@{co} ...;
|
||||
varexo ...;
|
||||
@#endfor
|
||||
|
||||
model;
|
||||
@#for co in countries
|
||||
Y_@{co} = K_@{co}^a_@{co} * L_@{co}^(1-a_@{co});
|
||||
...
|
||||
@# if co != nth_co
|
||||
(1+i_@{co}) = (1+i_@{nth_co}) * E_@{co}(+1) / E_@{co}; // UIP relation
|
||||
@# else
|
||||
E_@{co} = 1;
|
||||
@# endif
|
||||
@#endfor
|
||||
end;
|
||||
\end{verbatim}
|
||||
\normalsize
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Endogeneizing parameters (1/4)}
|
||||
\begin{itemize}
|
||||
\item When doing the steady-state calibration of the model, it may be useful to consider a parameter as an endogenous (and vice-versa)
|
||||
\item Example:
|
||||
\begin{gather*}
|
||||
y = \left(\alpha^{\frac{1}{\xi}} \ell^{1-\frac{1}{\xi}} + (1-\alpha)^{\frac{1}{\xi}}k^{1-\frac{1}{\xi}}\right)^{\frac{\xi}{\xi - 1}} \\
|
||||
lab\_rat = \frac{w \ell}{p y}
|
||||
\end{gather*}
|
||||
\item In the model, $\alpha$ is a (share) parameter, and $lab\_rat$ is an endogenous variable
|
||||
\item We observe that:
|
||||
\begin{itemize}
|
||||
\item calibrating $\alpha$ is not straigthforward!
|
||||
\item on the contrary, we have real world data for $lab\_rat$
|
||||
\item it is clear that these two variables are economically linked
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile=singleslide]
|
||||
\frametitle{Endogeneizing parameters (2/4)}
|
||||
\begin{itemize}
|
||||
\item Therefore, when computing the steady state:
|
||||
\begin{itemize}
|
||||
\item we make $\alpha$ an endogenous variable and $lab\_rat$ a parameter
|
||||
\item we impose an economically relevant value for $lab\_rat$
|
||||
\item the solution algorithm deduces the implied value for $\alpha$
|
||||
\end{itemize}
|
||||
\item We call this method ``variable flipping''
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile=singleslide]
|
||||
\frametitle{Endogeneizing parameters (3/4)}
|
||||
\framesubtitle{Example implementation}
|
||||
\begin{itemize}
|
||||
\item File \texttt{modeqs.mod}:
|
||||
\begin{itemize}
|
||||
\item contains variable declarations and model equations
|
||||
\item For declaration of \texttt{alpha} and \texttt{lab\_rat}:
|
||||
\footnotesize
|
||||
\begin{verbatim}
|
||||
@#if steady
|
||||
var alpha;
|
||||
parameter lab_rat;
|
||||
@#else
|
||||
parameter alpha;
|
||||
var lab_rat;
|
||||
@#endif
|
||||
\end{verbatim}
|
||||
\normalsize
|
||||
\end{itemize}
|
||||
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile=singleslide]
|
||||
\frametitle{Endogeneizing parameters (4/4)}
|
||||
\framesubtitle{Example implementation}
|
||||
\begin{itemize}
|
||||
\item File \texttt{steadystate.mod}:
|
||||
\begin{itemize}
|
||||
\item begins with \verb+@#define steady = 1+
|
||||
\item then with \verb+@#include "modeqs.mod"+
|
||||
\item initializes parameters (including \texttt{lab\_rat}, excluding \texttt{alpha})
|
||||
\item computes steady state (using guess values for endogenous, including \texttt{alpha})
|
||||
\item saves values of parameters and endogenous at steady-state in a file, using the \texttt{save\_params\_and\_steady\_state} command
|
||||
\end{itemize}
|
||||
\item File \texttt{simulate.mod}:
|
||||
\begin{itemize}
|
||||
\item begins with \verb+@#define steady = 0+
|
||||
\item then with \verb+@#include "modeqs.mod"+
|
||||
\item loads values of parameters and endogenous at steady-state from file, using the \texttt{load\_params\_and\_steady\_state} command
|
||||
\item computes simulations
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile=singleslide]
|
||||
\frametitle{MATLAB/Octave loops vs macro-processor loops (1/3)}
|
||||
Suppose you have a model with a parameter $\rho$, and you want to make
|
||||
simulations for three values: $\rho = 0.8, 0.9, 1$. There are
|
||||
several ways of doing this:
|
||||
\begin{block}{With a MATLAB/Octave loop}
|
||||
\begin{verbatim}
|
||||
rhos = [ 0.8, 0.9, 1];
|
||||
for i = 1:length(rhos)
|
||||
rho = rhos(i);
|
||||
stoch_simul(order=1);
|
||||
end
|
||||
\end{verbatim}
|
||||
\end{block}
|
||||
\begin{itemize}
|
||||
\item The loop is not unrolled
|
||||
\item MATLAB/Octave manages the iterations
|
||||
\item Interesting when there are a lot of iterations
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile=singleslide]
|
||||
\frametitle{MATLAB/Octave loops vs macro-processor loops (2/3)}
|
||||
\begin{block}{With a macro-processor loop (case 1)}
|
||||
\begin{verbatim}
|
||||
rhos = [ 0.8, 0.9, 1];
|
||||
@#for i in 1:3
|
||||
rho = rhos(@{i});
|
||||
stoch_simul(order=1);
|
||||
@#endfor
|
||||
\end{verbatim}
|
||||
\end{block}
|
||||
\begin{itemize}
|
||||
\item Very similar to previous example
|
||||
\item Loop is unrolled
|
||||
\item Dynare macro-processor manages the loop index but not the data array (\texttt{rhos})
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile=singleslide]
|
||||
\frametitle{MATLAB/Octave loops vs macro-processor loops (3/3)}
|
||||
\begin{block}{With a macro-processor loop (case 2)}
|
||||
\begin{verbatim}
|
||||
@#for rho_val in [ "0.8", "0.9", "1"]
|
||||
rho = @{rho_val};
|
||||
stoch_simul(order=1);
|
||||
@#endfor
|
||||
\end{verbatim}
|
||||
\end{block}
|
||||
\begin{itemize}
|
||||
\item Advantage: shorter syntax, since list of values directly given in the loop construct
|
||||
\item Note that values are given as character strings (the macro-processor does not
|
||||
know floating point values)
|
||||
\item Inconvenient: can not reuse an array stored in a MATLAB/Octave variable
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
% \begin{frame}[fragile=singleslide]
|
||||
% \frametitle{Possible future developments}
|
||||
% \begin{itemize}
|
||||
% \item Find a nicer syntax for indexed sums/products
|
||||
% \item Implement other control structures: \texttt{elsif}, \texttt{switch/case}, \texttt{while/until} loops
|
||||
% \item Implement macro-functions (or templates), with a syntax like:
|
||||
% \small
|
||||
% \verb+@#define QUADRATIC_COST(x, x_ss, phi) = phi/2*(x/x_ss-1)^2+
|
||||
% \normalsize
|
||||
% \end{itemize}
|
||||
% \end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\begin{center}
|
||||
\vfill {\LARGE Thanks for your attention!} \vfill
|
||||
{\LARGE Questions?}
|
||||
\vfill
|
||||
\end{center}
|
||||
\vfill
|
||||
\begin{columns}[T]
|
||||
\column{0.2\textwidth}
|
||||
\column{0.09\textwidth}
|
||||
|
||||
\ccbysa
|
||||
\column{0.71\textwidth}
|
||||
\tiny
|
||||
Copyright © 2008--2017 Dynare Team \\
|
||||
Licence: \href{http://creativecommons.org/licenses/by-sa/4.0/}{Creative
|
||||
Commons Attribution-ShareAlike 4.0}
|
||||
\end{columns}
|
||||
\end{frame}
|
||||
|
||||
|
||||
\end{document}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,346 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="862.10712"
|
||||
height="382.82141"
|
||||
id="svg5540"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.45.1"
|
||||
version="1.0"
|
||||
sodipodi:docbase="K:\Commun\Villemot\Macroprocessor"
|
||||
sodipodi:docname="new-design.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape"
|
||||
inkscape:export-filename="K:\Commun\Villemot\Macroprocessor\new-design.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs5542">
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Lend"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path3243"
|
||||
d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
|
||||
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
|
||||
</marker>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.7"
|
||||
inkscape:cx="488.94636"
|
||||
inkscape:cy="380.52134"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
width="1052.3622px"
|
||||
height="744.09448px"
|
||||
inkscape:window-width="1024"
|
||||
inkscape:window-height="712"
|
||||
inkscape:window-x="-4"
|
||||
inkscape:window-y="-4" />
|
||||
<metadata
|
||||
id="metadata5545">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Calque 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-78.642861,-39.058769)">
|
||||
<g
|
||||
id="g4418"
|
||||
transform="translate(467.50002,289.64286)">
|
||||
<text
|
||||
sodipodi:linespacing="125%"
|
||||
id="text4420"
|
||||
y="56.6479"
|
||||
x="361.42862"
|
||||
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
|
||||
xml:space="preserve"><tspan
|
||||
id="tspan4422"
|
||||
y="56.6479"
|
||||
x="361.42862"
|
||||
sodipodi:role="line">Matlab files</tspan><tspan
|
||||
id="tspan4424"
|
||||
y="81.6479"
|
||||
x="361.42862"
|
||||
sodipodi:role="line">representing</tspan><tspan
|
||||
id="tspan4426"
|
||||
y="106.6479"
|
||||
x="361.42862"
|
||||
sodipodi:role="line">the model</tspan></text>
|
||||
<path
|
||||
transform="matrix(1.0528522,0,0,1.0682674,-22.862484,-9.0197689)"
|
||||
d="M 431.42857 79.808769 A 66.428574 51.42857 0 1 1 298.57143,79.808769 A 66.428574 51.42857 0 1 1 431.42857 79.808769 z"
|
||||
sodipodi:ry="51.42857"
|
||||
sodipodi:rx="66.428574"
|
||||
sodipodi:cy="79.808769"
|
||||
sodipodi:cx="365"
|
||||
id="path4428"
|
||||
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
sodipodi:type="arc" />
|
||||
</g>
|
||||
<g
|
||||
id="g4430"
|
||||
transform="translate(-555.35711,282.49999)">
|
||||
<text
|
||||
sodipodi:linespacing="125%"
|
||||
id="text4432"
|
||||
y="65.21933"
|
||||
x="691.42859"
|
||||
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
|
||||
xml:space="preserve"><tspan
|
||||
y="65.21933"
|
||||
x="691.42859"
|
||||
id="tspan4434"
|
||||
sodipodi:role="line">Output:</tspan><tspan
|
||||
id="tspan4436"
|
||||
y="90.21933"
|
||||
x="691.42859"
|
||||
sodipodi:role="line">Results,</tspan><tspan
|
||||
id="tspan4438"
|
||||
y="115.21933"
|
||||
x="691.42859"
|
||||
sodipodi:role="line">Graphics</tspan></text>
|
||||
<path
|
||||
d="M 747.14283 85.523056 A 54.285713 51.42857 0 1 1 638.5714,85.523056 A 54.285713 51.42857 0 1 1 747.14283 85.523056 z"
|
||||
sodipodi:ry="51.42857"
|
||||
sodipodi:rx="54.285713"
|
||||
sodipodi:cy="85.523056"
|
||||
sodipodi:cx="692.85712"
|
||||
id="path4440"
|
||||
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
sodipodi:type="arc" />
|
||||
</g>
|
||||
<g
|
||||
id="g4452"
|
||||
transform="translate(-25.357118,291.07143)">
|
||||
<text
|
||||
sodipodi:linespacing="125%"
|
||||
id="text4454"
|
||||
y="68.076462"
|
||||
x="525.71436"
|
||||
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
|
||||
xml:space="preserve"><tspan
|
||||
y="68.076462"
|
||||
x="525.71436"
|
||||
id="tspan4456"
|
||||
sodipodi:role="line">Dynare</tspan><tspan
|
||||
id="tspan4458"
|
||||
y="93.076462"
|
||||
x="525.71436"
|
||||
sodipodi:role="line">Matlab routines</tspan></text>
|
||||
<rect
|
||||
y="36.951626"
|
||||
x="448.57144"
|
||||
height="75.714287"
|
||||
width="152.85715"
|
||||
id="rect4460"
|
||||
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
||||
</g>
|
||||
<path
|
||||
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="M 757.92859,365.8802 L 577.07147,365.8802"
|
||||
id="path4466"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connection-end="#g4452"
|
||||
inkscape:connection-start="#g4418" />
|
||||
<path
|
||||
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="M 422.21432,366.33835 L 192.78572,367.69591"
|
||||
id="path4468"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connection-start="#g4452"
|
||||
inkscape:connection-end="#g4430" />
|
||||
<g
|
||||
id="g6668">
|
||||
<text
|
||||
sodipodi:linespacing="125%"
|
||||
id="text4470"
|
||||
y="117.30877"
|
||||
x="143.92857"
|
||||
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
|
||||
xml:space="preserve"><tspan
|
||||
y="117.30877"
|
||||
x="143.92857"
|
||||
id="tspan4472"
|
||||
sodipodi:role="line">MOD file</tspan><tspan
|
||||
id="tspan4474"
|
||||
y="142.30877"
|
||||
x="143.92857"
|
||||
sodipodi:role="line">with macro</tspan><tspan
|
||||
id="tspan4482"
|
||||
y="167.30877"
|
||||
x="143.92857"
|
||||
sodipodi:role="line">commands</tspan></text>
|
||||
<path
|
||||
transform="matrix(1.0725676,0,0,0.999374,99.5973,-252.25554)"
|
||||
d="M 98.57143 390.52304 A 58.57143 56.42857 0 1 1 -18.57143,390.52304 A 58.57143 56.42857 0 1 1 98.57143 390.52304 z"
|
||||
sodipodi:ry="56.42857"
|
||||
sodipodi:rx="58.57143"
|
||||
sodipodi:cy="390.52304"
|
||||
sodipodi:cx="40"
|
||||
id="path4504"
|
||||
style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
sodipodi:type="arc" />
|
||||
</g>
|
||||
<g
|
||||
id="g5516"
|
||||
transform="translate(316.78572,-245.35715)">
|
||||
<text
|
||||
sodipodi:linespacing="125%"
|
||||
id="text4476"
|
||||
y="368.38019"
|
||||
x="307.14285"
|
||||
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
|
||||
xml:space="preserve"><tspan
|
||||
y="368.38019"
|
||||
x="307.14285"
|
||||
id="tspan4478"
|
||||
sodipodi:role="line">MOD file</tspan><tspan
|
||||
id="tspan4480"
|
||||
y="393.38019"
|
||||
x="307.14285"
|
||||
sodipodi:role="line">without macro</tspan><tspan
|
||||
id="tspan4484"
|
||||
y="418.38019"
|
||||
x="307.14285"
|
||||
sodipodi:role="line">commands</tspan></text>
|
||||
<path
|
||||
transform="translate(-8.5714286,-4.2857143)"
|
||||
d="M 389.99999 391.95163 A 72.85714 65 0 1 1 244.28571,391.95163 A 72.85714 65 0 1 1 389.99999 391.95163 z"
|
||||
sodipodi:ry="65"
|
||||
sodipodi:rx="72.85714"
|
||||
sodipodi:cy="391.95163"
|
||||
sodipodi:cx="317.14285"
|
||||
id="path5475"
|
||||
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
sodipodi:type="arc" />
|
||||
</g>
|
||||
<g
|
||||
id="g5510"
|
||||
transform="translate(243.92858,-236.78572)">
|
||||
<text
|
||||
sodipodi:linespacing="125%"
|
||||
id="text4486"
|
||||
y="372.66592"
|
||||
x="165.71428"
|
||||
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
|
||||
xml:space="preserve"><tspan
|
||||
id="tspan4490"
|
||||
y="372.66592"
|
||||
x="165.71428"
|
||||
sodipodi:role="line">Macro</tspan><tspan
|
||||
id="tspan4492"
|
||||
y="397.66592"
|
||||
x="165.71428"
|
||||
sodipodi:role="line">Processor</tspan></text>
|
||||
<rect
|
||||
y="339.80878"
|
||||
x="110"
|
||||
height="72.85714"
|
||||
width="115.71429"
|
||||
id="rect5477"
|
||||
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
||||
</g>
|
||||
<g
|
||||
id="g5523"
|
||||
transform="translate(372.5,-249.64286)">
|
||||
<text
|
||||
sodipodi:linespacing="125%"
|
||||
id="text4494"
|
||||
y="368.38019"
|
||||
x="455.71426"
|
||||
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
|
||||
xml:space="preserve"><tspan
|
||||
y="368.38019"
|
||||
x="455.71426"
|
||||
id="tspan4496"
|
||||
sodipodi:role="line">Parser,</tspan><tspan
|
||||
id="tspan4498"
|
||||
y="393.38019"
|
||||
x="455.71426"
|
||||
sodipodi:role="line">Analytical</tspan><tspan
|
||||
id="tspan4500"
|
||||
y="418.38019"
|
||||
x="455.71426"
|
||||
sodipodi:role="line">derivator...</tspan></text>
|
||||
<rect
|
||||
y="339.80878"
|
||||
x="395.71429"
|
||||
height="94.285713"
|
||||
width="120"
|
||||
id="rect5479"
|
||||
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
||||
</g>
|
||||
<path
|
||||
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="M 206.35715,138.3618 L 352.92858,139.13938"
|
||||
id="path5532"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connection-end="#g5510"
|
||||
inkscape:connection-start="#g6668" />
|
||||
<path
|
||||
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="M 470.64287,140.23901 L 551.5,141.32071"
|
||||
id="path5534"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connection-start="#g5510"
|
||||
inkscape:connection-end="#g5516" />
|
||||
<path
|
||||
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="M 699.21428,140.48835 L 767.21429,138.81229"
|
||||
id="path5536"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connection-start="#g5516"
|
||||
inkscape:connection-end="#g5523" />
|
||||
<path
|
||||
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="M 828.36474,185.45163 L 828.75359,309.8802"
|
||||
id="path5538"
|
||||
inkscape:connector-type="polyline"
|
||||
inkscape:connection-end="#g4418"
|
||||
inkscape:connection-start="#g5523" />
|
||||
<rect
|
||||
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:1.5, 4.5;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
id="rect5596"
|
||||
width="634.28571"
|
||||
height="201.42857"
|
||||
x="305.71429"
|
||||
y="39.808769" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
|
||||
x="404.28574"
|
||||
y="232.66591"
|
||||
id="text6567"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan6569"
|
||||
x="404.28574"
|
||||
y="232.66591">Dynare preprocessor</tspan></text>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 17 KiB |
Loading…
Reference in New Issue