🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
ast::ODEIntegrator类 参考

#include <ODEIntegrator.hpp>

+ 类 ast::ODEIntegrator 继承关系图:

Public 成员函数

errc_t initialize (ODE &ode) override
 
errc_t integrate (ODE &ode, double *y, double &t, double tf, std::vector< double > &xlist, std::vector< std::vector< double > > &ylist)
 
template<typename Func >
errc_t integrate (int ndim, Func func, double *y, double &t, double tf)
 
void addEventDetector (ODEEventDetector *detector)
 
template<typename Func >
std::enable_if<!std::is_base_of< ODEEventDetector, typenamestd::remove_pointer< Func >::type >::value, ODEEventDetector * >::type addEventDetector (Func func)
 
void removeEventDetector (ODEEventDetector *detector)
 
void clearEventDetectors ()
 
void clearStateObservers ()
 
void addStateObserver (ODEStateObserver *observer)
 
template<typename Func >
std::enable_if<!std::is_base_of< ODEStateObserver, typenamestd::remove_pointer< Func >::type >::value, ODEStateObserver * >::type addStateObserver (Func func)
 
void removeStateObserver (ODEStateObserver *observer)
 
ODEgetODE ()
 
double * stateAtStepStart ()
 
double * stateAtStepEnd ()
 
double & timeAtStepStart ()
 
double & timeAtStepEnd ()
 
double * stateTemp ()
 
virtual errc_t integrate (ODE &ode, double *y, double &t, double tf)=0
 
- Public 成员函数 继承自 ast::IODEIntegrator
virtual errc_t integrateOneStep (ODE &ode, double *y, double &t, double tf)=0
 
virtual errc_t singleStep (ODE &ode, double *y, double t0, double step)=0
 
- Public 成员函数 继承自 ast::ObjectNamed
 ObjectNamed ()=default
 
 ObjectNamed (StringView name)
 
const std::string & getName () const override
 
void setName (StringView name) override
 
- Public 成员函数 继承自 ast::Object
 Object (Object *parentScope)
 
 Object (std::nullptr_t)
 
virtual ClassgetType () const
 
virtual std::string getRepresentation () const
 
const std::string & name () const
 
std::string displayName () const
 
errc_t showEditDialog ()
 
Attribute attr (StringView path)
 
errc_t getAttrBool (StringView path, bool &value) const
 
errc_t getAttrInt (StringView path, int &value) const
 
errc_t getAttrDouble (StringView path, double &value) const
 
errc_t getAttrString (StringView path, std::string &value) const
 
errc_t getAttrObject (StringView path, Object *&value) const
 
double getAttrDouble (StringView path) const
 
int getAttrInt (StringView path) const
 
bool getAttrBool (StringView path) const
 
std::string getAttrString (StringView path) const
 
ObjectgetAttrObject (StringView path) const
 
errc_t setAttrBool (StringView path, bool value)
 
errc_t setAttrInt (StringView path, int value)
 
errc_t setAttrDouble (StringView path, double value)
 
errc_t setAttrString (StringView path, StringView value)
 
errc_t setAttrObject (StringView path, Object *value)
 
Classtype () const
 
const std::string & typeName () const
 
PropertygetProperty (StringView fieldName) const
 
ObjectId getID () const
 
errc_t setParentScope (Object *parentScope)
 
ObjectgetParentScope () const
 
template<typename T >
getParent () const
 
bool isOfType (const Class *type) const
 
bool isOfType (StringView typeName) const
 
template<typename T >
bool isOfType () const
 
template<typename Func >
void addDelayedLink (Func &&link)
 
template<typename Func >
void addDelayedLinkIfFailed (Func &&link)
 
void resolveLinks ()
 
bool readOnly () const
 
void setReadOnly (bool readOnly)
 
bool active () const
 
void setActive (bool active)
 
bool isComponent () const
 
void setIsComponent (bool isComponent)
 
bool isEntity () const
 
void setIsEntity (bool isEntity)
 
const char * tr (const char *msg) const
 
 Referenced ()
 
 Referenced (initial_strong_ref_t)
 
- Public 成员函数 继承自 ast::Referenced
 Referenced (initial_strong_ref_t)
 
uint32_t refCount () const
 
uint32_t weakRefCount () const
 
bool isDestructed () const
 
void destruct ()
 
uint32_t incWeakRef ()
 
uint32_t decWeakRef ()
 
uint32_t incRef ()
 
uint32_t decRef ()
 
uint32_t decRefNoDelete ()
 

Protected 成员函数

errc_t integrateOneFixedStep (ODE &ode, double absStepSize, double *y, double &t, double tf)
 
errc_t integrateFixedStep (ODE &ode, double absStepSize, double *y, double &t, double tf, int *pNumSteps=nullptr)
 
void initWorkStateObserver ()
 
 A_DISABLE_COPY (ODEIntegrator)
 
- Protected 成员函数 继承自 ast::Object
 Object (const Object &obj)
 
Objectoperator= (const Object &)
 
- Protected 成员函数 继承自 ast::Referenced
void setDestructed ()
 

Protected 属性

ODEode_ {nullptr}
 
ODEStateObserverworkStateObserver_ {nullptr}
 
ODEEventDetectorList eventDetectorList_
 
ODEStateObserverList stateObserverList_
 
ODEInnerStateObserverinnerStateObserver_ {nullptr}
 
double * stateAtStepStart_ {nullptr}
 
double * stateAtStepEnd_ {nullptr}
 
double * stateTemp_ {nullptr}
 
double timeAtStepStart_ {0.0}
 
double timeAtStepEnd_ {0.0}
 

友元

class ODEInnerStateObserver
 

额外继承的成员函数

- 静态 Public 成员函数 继承自 ast::Object
static ObjectResolve (StringView value)
 
static void ClassInit (Class *cls)
 
static ClassStaticType ()
 
- 静态 Public 属性 继承自 ast::Object
static Class staticType
 

详细描述

ODE 积分器

积分器是ODE求解的基础类,提供了积分ODE的通用接口。

成员函数说明

◆ addEventDetector() [1/2]

template<typename Func >
std::enable_if<!std::is_base_of< ODEEventDetector, typenamestd::remove_pointer< Func >::type >::value, ODEEventDetector * >::type ast::ODEIntegrator::addEventDetector ( Func func)
inline

添加事件检测器(泛型模板)

添加一个事件检测器,用于检测ODE的事件

参数
func事件检测函数

◆ addEventDetector() [2/2]

void ast::ODEIntegrator::addEventDetector ( ODEEventDetector * detector)

添加事件检测器

添加一个事件检测器,用于检测ODE的事件

参数
detector事件检测器对象
Bug
目前只能添加在堆上动态创建的事件检测器,如果添加栈上的事件检测器,会导致内存问题

◆ addStateObserver() [1/2]

template<typename Func >
std::enable_if<!std::is_base_of< ODEStateObserver, typenamestd::remove_pointer< Func >::type >::value, ODEStateObserver * >::type ast::ODEIntegrator::addStateObserver ( Func func)
inline

添加状态观察者(泛型模板)

添加一个状态观察者,用于观察ODE的状态

参数
func状态观察函数

◆ addStateObserver() [2/2]

void ast::ODEIntegrator::addStateObserver ( ODEStateObserver * observer)

添加状态观察者

添加一个状态观察者,用于观察ODE的状态

参数
observer状态观察者对象
Bug
目前只能添加在堆上动态创建的状态观察者,如果添加栈上的状态观察者,会导致内存问题

◆ clearEventDetectors()

void ast::ODEIntegrator::clearEventDetectors ( )

清除所有事件检测器

清除所有添加的事件检测器

◆ clearStateObservers()

void ast::ODEIntegrator::clearStateObservers ( )

清除所有状态观察者

清除所有添加的状态观察者

◆ getODE()

ODE * ast::ODEIntegrator::getODE ( )
inline

获取ODE方程

获取当前积分器关联的ODE方程

返回
ODE方程

◆ initialize()

errc_t ast::ODEIntegrator::initialize ( ODE & ode)
overridevirtual

初始化积分器

初始化积分器,设置ODE的维度和步长等参数

参数
ode常微分方程对象

实现了 ast::IODEIntegrator.

ast::RK4, ast::RK8, ast::RKCK, ast::RKF45, ast::RKF56, ast::RKF78 , 以及 ast::RKV8 重载.

◆ integrate() [1/3]

template<typename Func >
errc_t ast::ODEIntegrator::integrate ( int ndim,
Func func,
double * y,
double & t,
double tf )
inline

积分ODE

积分ODE,将积分结果存储在y和t中

参数
[in]ndimODE的维度
[in]func常微分方程
[in,out]y状态向量
[in,out]t当前时间
[in]tf最终时间

◆ integrate() [2/3]

virtual errc_t ast::IODEIntegrator::integrate ( ODE & ode,
double * y,
double & t,
double tf )
virtual

从当前时间t开始积分到最终时间tf,直到事件检测器触发事件或者积分到最终时间tf,并将积分结果存储在y中

参数
[in]ode常微分方程对象
[in,out]y状态向量
[in,out]t当前时间
[in]tf最终时间

实现了 ast::IODEIntegrator.

ast::ODEVarStepIntegrator 重载.

◆ integrate() [3/3]

errc_t ast::ODEIntegrator::integrate ( ODE & ode,
double * y,
double & t,
double tf,
std::vector< double > & xlist,
std::vector< std::vector< double > > & ylist )

积分ODE

积分ODE,将积分结果存储在y中 同时将时间点和状态向量存储在xlist和ylist中

参数
[in]ode常微分方程对象
[in,out]y状态向量
[in,out]t当前时间
[in]tf最终时间
[out]xlist时间点列表
[out]ylist状态向量列表

◆ integrateFixedStep()

errc_t ast::ODEIntegrator::integrateFixedStep ( ODE & ode,
double absStepSize,
double * y,
double & t,
double tf,
int * pNumSteps = nullptr )
protected

int ndim = ode.getDimension();

◆ removeEventDetector()

void ast::ODEIntegrator::removeEventDetector ( ODEEventDetector * detector)

删除事件检测器

删除一个事件检测器

参数
detector事件检测器对象

◆ removeStateObserver()

void ast::ODEIntegrator::removeStateObserver ( ODEStateObserver * observer)

删除状态观察者

删除一个状态观察者

参数
observer状态观察者对象

◆ stateAtStepEnd()

double * ast::ODEIntegrator::stateAtStepEnd ( )
inline

获取当前积分步的结束状态

获取当前积分步的结束状态

返回
当前积分步的结束状态

◆ stateAtStepStart()

double * ast::ODEIntegrator::stateAtStepStart ( )
inline

获取当前积分步的开始状态

获取当前积分步的开始状态

返回
当前积分步的开始状态

◆ stateTemp()

double * ast::ODEIntegrator::stateTemp ( )
inline

获取临时状态向量

获取当前积分步的临时状态向量

返回
当前积分步的临时状态向量

◆ timeAtStepEnd()

double & ast::ODEIntegrator::timeAtStepEnd ( )
inline

获取当前积分步的结束时间

获取当前积分步的结束时间

返回
当前积分步的结束时间

◆ timeAtStepStart()

double & ast::ODEIntegrator::timeAtStepStart ( )
inline

获取当前积分步的开始时间

获取当前积分步的开始时间

返回
当前积分步的开始时间

该类的文档由以下文件生成: