🛰️航天仿真算法库 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 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 integrateStep (ODE &ode, double *y, double &t, double tf)=0
 
virtual errc_t singleStep (ODE &ode, double *y, double t0, double step)=0
 

Protected 成员函数

void initWorkStateObserver ()
 
 A_DISABLE_COPY (ODEIntegrator)
 

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
 

详细描述

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
目前只能添加在堆上动态创建的状态观察者,如果添加栈上的状态观察者,会导致内存问题

◆ 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

积分ODE

积分ODE,将积分结果存储在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状态向量列表

◆ 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

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

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

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

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