⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 defs.h

📁 使用R语言的马尔科夫链蒙特卡洛模拟(MCMC)源代码程序。
💻 H
字号:
/*  * Scythe Statistical Library * Copyright (C) 2000-2002 Andrew D. Martin and Kevin M. Quinn; * 2002-present Andrew D. Martin, Kevin M. Quinn, and Daniel * Pemstein.  All Rights Reserved. * * This program is free software; you can redistribute it and/or modify * under the terms of the GNU General Public License as published by * Free Software Foundation; either version 2 of the License, or (at * your option) any later version.  See the text files COPYING * and LICENSE, distributed with this source code, for further * information. * -------------------------------------------------------------------- * scythestat/defs.h *//*!  \file defs.h  * \brief Global Scythe definitions. * * This file provides a variety of global definitions used throughout * the Scythe library. * * The majority of these definitions are used only within the library * itself.  Those definitions that are part of the public interface * are documented. * *//* Doxygen main page text *//*! \mainpage Scythe Statistical Library: Application Programmers' Interface * * \section intro Introduction * * The Scythe Statistical Library is an open source C++ library for * statistical computation, written by Daniel Pemstein (University of * Illinois), Kevin M. Quinn (Harvard University), and Andrew D. * Martin (Washington University). It includes a suite of matrix * manipulation functions, a suite of pseudo-random number generators, * and a suite of numerical optimization routines. Programs written * using Scythe are generally much faster than those written in * commonly used interpreted languages, such as R and MATLAB, and can * be compiled on any system with the GNU GCC compiler (and perhaps * with other C++ compilers). One of the primary design goals of the * Scythe developers has been ease of use for non-expert C++ * programmers. We provide ease of use through three primary * mechanisms: (1) operator and function over-loading, (2) numerous * pre-fabricated utility functions, and (3) clear documentation and * example programs. Additionally, Scythe is quite flexible and * entirely extensible because the source code is available to all * users under the GNU General Public License. * * \section thisdoc About This Document * * This document is the application programmer's interface (API) to * Scythe.  It provides documentation for every class, function, and * object in Scythe that is part of the library's public interface. * In addition, the sections below explain how to obtain, install, and * compile the library. * * \section obtain Obtaining Scythe * * The most recent version of Scythe is available for download at * http://scythe.wustl.edu. * * \section install Installation *  * Scythe installs as a header-only C++ library.  After uncompressing, * simply follow the instructions in the INSTALL file included with * Scythe to install the library.  Alternatively, you may copy the * source files in scythestat and scythestat/rng into your project * directory and compile directly, using the SCYTHE_COMPILE_DIRECT * pre-processor flag. * * \section compile Compilation * * Scythe should work with the GNU GCC compiler, version 4.0.1 and * greater.  Scythe has not been tested with other compilers.  Scythe * provides a number of pre-processor flags.  The * SCYTHE_COMPILE_DIRECT allows the user to compile Scythe sources * directly.  The SCYTHE_VIEW_ASSIGNMENT_FLAG turns on R-style * recycling in Matrix::operator=() for view matrices.  * * The SCYTHE_DEBUG_LEVEL controls the amount of error trapping in * Scythe.  This level ranges from 0 (virtually no checking) to 3 (all * checking, including Matrix bounds checking, turned on).  By * default, the level is set to 3.  Here's an example of how to * compile a program with only basic error checking: * * \verbatim $ g++ myprog.cc -DSCYTHE_DEBUG_LEVEL=1 \endverbatim * * Finally, the SCYTHE_LAPACK flag enables LAPACK/BLAS.  You must have * the LAPACK and BLAS libraries installed on your system and compile * your program with the appropriate linker flags for this to work.  For * example, on linux you can enable LAPACK/BLAS support like this: * * \verbatim $ g++ myprog.cc -DSCYTHE_LAPACK -llapack -lblas -pthread \endverbatim *  * \section copy Copyright * * Scythe Statistical Library Copyright (C) 2000-2002 Andrew D. Martin * and Kevin M.  Quinn; 2002-present Andrew D. Martin, Kevin M. Quinn, * and Daniel Pemstein.  All Rights Reserved. * * This program is free software; you can redistribute it and/or * modify under the terms of the GNU General Public License as * published by Free Software Foundation; either version 2 of the * License, or (at your option) any later version.  See the text files * COPYING and LICENSE, distributed with library's source code, for * further information. * * \section acknowledge Acknowledgments * * We gratefully acknowledge support from the United States National * Science Foundation (Grants SES-0350646 and SES-0350613), the * Department of Political Science, the Weidenbaum Center, and the * Center for Empirical Research in the Law at Washington University, * and the Department of Government and The Institute for Quantitative * Social Science at Harvard University. Neither the foundation, * Washington University, nor Harvard University bear any * responsibility for this software. * * We'd also like to thank the research assistants who have helped us * with Scythe: Matthew Fasman, Steve Haptonstahl, Kate Jensen, Laura * Keys, Kevin Rompala, Joe Sheehan, and Jean Yang. */#ifndef SCYTHE_DEFS_H#define SCYTHE_DEFS_H/* In many functions returning matrices, we want to allow the user to * get a matrix of any style, but want to work with concretes inside * the function, for efficiency.  This macro originally contained the * code: *  * if (_STYLE_ == View)                                                \ *   return Matrix<_TYPE_,_ORDER_,View>(_MATRIX_);                     \ * else                                                                \ *   return _MATRIX_; * * to convert to View before return if necessary.  Of course, this is * completely redundant, since the copy constructor gets called on * return anyway, so the body of the macro was replaced with a simple * return.  If we change our minds down the road about how to handle * these returns, code changes will be centered on this macro. */#define SCYTHE_VIEW_RETURN(_TYPE_, _ORDER_, _STYLE_, _MATRIX_)        \    return _MATRIX_;/* Some macros to do bounds checking for iterator accesses.  The first * two are only called by the [] operator in the random access * iterator.  The third macro handles everything for checks on simple * current iterator location accesses. */#define SCYTHE_ITER_CHECK_POINTER_BOUNDS(POINTER)                     \{                                                                     \	SCYTHE_CHECK_30(POINTER >= start_ + size_ || POINTER < start_,      \		scythe_bounds_error, "Iterator access (offset "                   \		<< offset_ << ") out of matrix bounds")                           \}#define SCYTHE_ITER_CHECK_OFFSET_BOUNDS(OFFSET)                       \{                                                                     \	SCYTHE_CHECK_30(OFFSET >= size_, scythe_bounds_error,      	        \		"Iterator access (offset " << offset_ << ") out of matrix bounds")\}#define SCYTHE_ITER_CHECK_BOUNDS()                                    \{                                                                     \	if (M_STYLE != Concrete || M_ORDER != ORDER) {                      \		SCYTHE_ITER_CHECK_OFFSET_BOUNDS(offset_);                         \  } else {                                                            \		SCYTHE_ITER_CHECK_POINTER_BOUNDS(pos_);													  \	}                                                                   \}/*! \namespace scythe * \brief The Scythe library namespace. * * All Scythe library declarations are defined within the scythe * namespace.  This prevents name clashing with other libraries' * members or with declarations in users' program code. */namespace scythe {  /*!    * \brief Matrix order enumerator.   *   * Matrix templates may be either column-major or row-major ordered   * and this enumerator is used to differentiate between the two   * types.   *   * The enumerator provides two values: Concrete and View.   *   * \see Matrix   */  enum matrix_order { Col, Row };  /*!    * \brief Matrix style enumerator.   *   * Matrix templates may be either concrete matrices or views and   * this enumerator is used to differentiate between the two types.   *   * Concrete matrices provide direct access to an underlying array of   * matrix data, while views offer a more general interface to data   * arrays, with potentially many views referencing the same   * underlying data structure.   *   * The enum provides two values: Col and Row.   *   * \see Matrix   */  enum matrix_style { Concrete, View };  /*!   * \brief A convenient marker for vector submatrix access.      * Passing an all_elements object to a two-argument Matrix submatrix   * method allows the caller to access a full vector submatrix.  We   * further define an instance of all_elements named "_" in the   * scythe namespace to allow users to easily reference entire   * vectors within matrices.   *   * \see Matrix::operator()(const all_elements, uint)   * \see Matrix::operator()(const all_elements, uint) const   * \see Matrix::operator()(uint, const all_elements)   * \see Matrix::operator()(uint, const all_elements) const   *   */	struct all_elements {	} const _ = {};  // A little helper method to see if more col-order or row-order.  // Tie breaks towards col.  template <matrix_order o1, matrix_order o2, matrix_order o3>  bool maj_col()  {    if ((o1 == Col && o2 == Col) ||        (o1 == Col && o3 == Col) ||        (o2 == Col && o3 == Col))      return true;    return false;  }  template <matrix_order o1, matrix_order o2, matrix_order o3,            matrix_order o4>  bool maj_col()  {    if ((o1 == Col && o2 == Col) ||        (o1 == Col && o3 == Col) ||        (o1 == Col && o4 == Col) ||        (o2 == Col && o3 == Col) ||        (o2 == Col && o4 == Col) ||        (o3 == Col && o4 == Col))      return true;    return false;  }}  // end namespace scythe#endif /* SCYTHE_ERROR_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -