0

我有一个僵硬的系统,我想将它与Integrate_adaptive 和来自(boost::) odeint 的受控rosenbrock4 步进器集成。

在大多数情况下,我可以预测一个好的第一步,但对于某些情况,它“肯定”会失败

我认为问题在于一个变化确实取决于一个常数:

Change[0]=f(States,Changes) + C

对州的依赖确实出现在雅可比行列中,C 没有。但是C可以产生重大影响。我有办法让步进器知道 C 的影响吗?

为了澄清我得到的错误是:

Integrate adaptive : Maximal number of iterations reached. A step size could not be found.

另一种猜测是,这是由 States[0] 和其他状态的不同大小引起的

我试着举一个结构性的例子,完整的例子会很大,所有因素都设置为一个:

class system{
    void operator(const state_type &states, state_type &changes, const doulbe t){
        changes[0]=0.0;
        for( int i =1; i<states.size();++i){
            changes[i]=(states[0]-exp(-1/states[i])/states[i];
            changes[0]-=states[i]*states[i]*changes[i];
        }
        changes[0]+=C;
    }

C在某些情况下可能比来自states

雅可比行列式相应地设置。

4

0 回答 0