gpt4 book ai didi

c++ - odeint 隐式欧拉简单示例

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:22:19 26 4
gpt4 key购买 nike

我对使用隐式方案使用 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: error: C2064: term does not evaluate to a function taking 3 arguments class does not define an 'operator()' or a user defined conversion operator to a pointer-to-function or reference-to-function that takes appropriate number of arguments

我现在的问题是:有人知道如何让它工作吗,或者有人可以指点我看比这个更详细的文档:

codeproject documentation

或者这个:

main odeint page

谢谢

最佳答案

不幸的是,隐式欧拉法和 Rosenbrock 求解器(另一个隐式求解器)没有相同的接口(interface)。详细而言,隐式欧拉期望具有此签名的雅可比行列式函数

void jacobian( const state_type &x , matrix_type &jacobi , const value_type t );

因此,您需要将 stiff_system_jacobi 的定义更改为

struct stiff_system_jacobi
{
void operator()( const vector_type & , matrix_type &J , const double & ) const
{
J( 0 , 0 ) = -101.0;
J( 0 , 1 ) = -100.0;
J( 1 , 0 ) = 1.0;
J( 1 , 1 ) = 0.0;
}
};

如果您的系统确实是非自治的,您需要通过一个额外的坐标来增强状态类型,该坐标代表时间并且具有平凡的动力学 dt/dt = 1。

关于c++ - odeint 隐式欧拉简单示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24207938/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com