🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
OrdinaryDifferentialEquation.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24
25AST_NAMESPACE_BEGIN
26
33{
34public:
35 virtual ~OrdinaryDifferentialEquation() = default;
36
39 virtual int getDimension() const = 0;
40
51 virtual errc_t evaluate(const double* y, double* dy, double t) = 0;
52
54 A_ALWAYS_INLINE
55 errc_t evaluate(const double t,const double* y, double* dy){return evaluate(y, dy, t);}
56};
57
59
60
61
63template<typename Func>
64class ODEGeneric: public ODE
65{
66public:
67 ODEGeneric(Func func, int dim)
68 : func_(std::move(func))
69 , dim_(dim)
70 {}
71
72 int getDimension() const override {
73 return dim_;
74 }
75
76 errc_t evaluate(const double* y, double* dy, double t) override {
77 return func_(y, dy, t);
78 }
79
80private:
81 Func func_;
82 int dim_;
83};
84
85
88template<typename Func>
89ODEGeneric<Func> make_ode(Func func, int dim) {
90 return ODEGeneric<Func>(func, dim);
91}
92
95template<typename Func>
96ODEGeneric<Func> make_ode(int dim, Func func) {
97 return ODEGeneric<Func>(func, dim);
98}
99
100AST_NAMESPACE_END
泛型常微分方程
定义 OrdinaryDifferentialEquation.hpp:65
errc_t evaluate(const double *y, double *dy, double t) override
计算常微分方程在给定时间点和状态下的导数。
定义 OrdinaryDifferentialEquation.hpp:76
int getDimension() const override
获取微分方程的维度。
定义 OrdinaryDifferentialEquation.hpp:72
常微分方程基接口
定义 OrdinaryDifferentialEquation.hpp:33
virtual int getDimension() const =0
获取微分方程的维度。
A_ALWAYS_INLINE errc_t evaluate(const double t, const double *y, double *dy)
兼容性处理
定义 OrdinaryDifferentialEquation.hpp:55
virtual errc_t evaluate(const double *y, double *dy, double t)=0
计算常微分方程在给定时间点和状态下的导数。
ODEGeneric< Func > make_ode(Func func, int dim)
创建一个常微分方程
定义 OrdinaryDifferentialEquation.hpp:89