使用OdeInt的僵硬系统,在变化中保持不变

时间:2014-01-17 09:49:25

标签: c++ odeint

我有一个僵硬的系统,我想与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.

另一个猜测是由不同大小的状态[0]和其他状态

引起的

我尝试给出一个结构性示例,完整的示例将是大的,所有因素都设置为1:

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;
    }
在某些情况下,{p> C可能比states

的贡献更大

雅各布派相应地成立。

0 个答案:

没有答案