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

📄 rungekutta4.hpp

📁 gps源代码
💻 HPP
字号:
#pragma ident "$Id: RungeKutta4.hpp 70 2006-08-01 18:36:21Z ehagen $"//============================================================================////  This file is part of GPSTk, the GPS Toolkit.////  The GPSTk is free software; you can redistribute it and/or modify//  it under the terms of the GNU Lesser General Public License as published//  by the Free Software Foundation; either version 2.1 of the License, or//  any later version.////  The GPSTk is distributed in the hope that it will be useful,//  but WITHOUT ANY WARRANTY; without even the implied warranty of//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the//  GNU Lesser General Public License for more details.////  You should have received a copy of the GNU Lesser General Public//  License along with GPSTk; if not, write to the Free Software Foundation,//  Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA//  //  Copyright 2004, The University of Texas at Austin////============================================================================/* * @file RungeKutta4.hpp * RungeKutta4 class. Provides several versions of the Runge Kutta integration * The algorithms are based on Ch.16 of "Numerical Recipes in C" but the * implementation is entirely independent, i.e., this isn't the source  * distributed with the text. */#ifndef GPSTK_RUNGEKUTTA4_H#define GPSTK_RUNGEKUTTA4_H#include "Matrix.hpp"namespace gpstk{   /** @addtogroup math */   //@{      /** The RungeKutta4 class provides a collection of integration routines       * that work on a Matrix of doubles.  Integrations use a fixed step-size.       */   class RungeKutta4    {   public:         /** Constructor.          * @param initalState a reference to the original Matrix to work on           *  that is copied to an internal Matrix.          * @param initialTime the time at which to begin integrations           * @param timeEpsilon how close the final internal timestep must match          *  the specified final time of an integration          */      RungeKutta4(const Matrix<double>& initialState,                  double initialTime=0,                  double timeEpsilon=1e-18)            : currentState(initialState), currentTime(initialTime),               teps(timeEpsilon), M(initialState.rows()), N(initialState.cols()),              k1(M,N), k2(M,N), k3(M,N), k4(M,N), yn(M,N), tempy(M,N)         { }              /** The classic Runge Kutta 4th Order Integration Algorithm.          * This routine integrates using a Runge Kutta 4th order algorithm           * with a fixed step from the internal time to \a nextTime.           * @param nextTime the time to integrate to          * @param stepSize the amount time between internal integration steps          */      void integrateTo (double nextTime,                         double stepSize = 0);         /** The classic Runge Kutta 4th-5th Order Integration Algorithm.          *  This function integrates by applying a 4th order Runge Kutta          *  algorithm multiple times. This provides two benefits. First, an          *  estimate of the truncation error is returned. Second, the multiple          *  4th order estimates are combined to produce the 5th order estimate.          * @param nextTime the time to integrate to          * @param error the Matrix of estimated integration error           *  (one for each element)          * @param stepSize the amount time between internal integration steps          */      void integrateTo (double nextTime,                        Matrix<double>& error,                        double stepSize = 0);         /** This is the function to be integrated.           * @param time the time at which to evaluate the derivative          * @param inState the Matrix to evaluate the derivative of at /a time.          * @param inStateDot the derivative of /a inState evaluated at /a time.          * @return a reference to /a inStateDot          */      virtual gpstk::Matrix<double>&       derivative(long double time,                 const gpstk::Matrix<double>& inState,                 gpstk::Matrix<double>& inStateDot) = 0;         /// Return the currnet time of the system.      double getTime(void)       { return currentTime; }         /// Return the current state of the system.      const Matrix<double>& getState(void)       { return currentState; }   protected:               /// Current time of the system      double currentTime;         /// State of the system at the current time      gpstk::Matrix<double> currentState;      double teps;   //< Precision for time calculations and comparisons      int M;         //< Number of rows in the state      int N;         //< Number of columns in the state   private:         /// Disallow copy constructor         RungeKutta4(const RungeKutta4& cloneDonor);         /// Disallow the assignment operator         RungeKutta4& operator= (const RungeKutta4& right);         /** These values are only used in the integrateTo method(s).          *  Declaring them here keeps them from being constructed every          *  time the integrateTo method(s) are called.          */         Matrix<double> k1, k2, k3, k4, yn, tempy;   }; // end class RungeKutta4   //@}} // end namespace gpstk#endif

⌨️ 快捷键说明

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