我有兴趣使用隐式方案使用 odeint 库解决 ODE 系统,但我很难实现一个简单的implicit_euler
示例。
查看文档,我设法使工作显式步进器、自适应步进器以及rosenbrock4
步进器。前者似乎是半隐式的。因此,我有兴趣实现一个完全隐式的方案(同时在每个时间步检索雅可比矩阵)。但是我没有找到这个步进器的文档和工作示例。我所拥有的是
typedef boost::numeric::ublas::vector< double > vector_type;
typedef boost::numeric::ublas::matrix< double > matrix_type;`
struct stiff_system
{
void operator()( const vector_type &x , vector_type &dxdt , double /* t */ )
{
dxdt[ 0 ] = -101.0 * x[ 0 ] - 100.0 * x[ 1 ];
dxdt[ 1 ] = x[ 0 ];
}
};
struct stiff_system_jacobi
{
void operator()( const vector_type & /* x */ , matrix_type &J , const double & /* t */ , vector_type &dfdt )
{
J( 0 , 0 ) = -101.0;
J( 0 , 1 ) = -100.0;
J( 1 , 0 ) = 1.0;
J( 1 , 1 ) = 0.0;
dfdt[0] = 0.0;
dfdt[1] = 0.0;
}
};
typedef implicit_euler< double > stepper_IE;
vector_type inout( 2 , 1.0 );
size_t steps = integrate_const( stepper_IE() ,
std::make_pair( stiff_system() , stiff_system_jacobi() ) ,
inout , 0.0 , 5.0 , 0.01, streaming_observer( std::cout, x_vec , times ));
错误如下:
C:\boost_1_55_0\boost\numeric\odeint\stepper\implicit_euler.hpp:94
: 错误: C2064: 术语不评估为采用 3 个参数的函数类未定义“operator()
”或用户定义的转换运算符到采用适当数量参数的函数指针或函数引用
我现在的问题是:有人知道如何使它工作,或者有人可以向我指出比这个更详细的文档:
或者这个:
谢谢