c++ - 如何在 C++ 中使用 odeint 执行简单的数值积分

标签 c++ integration numeric odeint

你能给我提供一个用 odeint 进行数值积分的简单例子吗?在 C++ 中?

我想使用方便的集成功能,documented作为:

integrate( system , x0 , t0 , t1 , dt )

我也不确定,如果可能的话,如何传递它而不是函数或仿函数,类方法。

最佳答案

在 C++11 中,您可以使用一个简单的 lambda 函数包装对您的成员方法的调用

Class c;
auto f = [&c]( const state_type & x , state_type &dxdt , double t ) {
    c.system_func( x , dxdt , t ); };
integrate( f , x0 , t0 , t1 , dt );

std::bind 也可能有效,但是您必须注意值是按引用还是按值传递的。

在 C++03 中,您需要围绕您的类方法编写一个简单的包装器

struct wrapper
{
    Class &c;
    wrapper( Class &c_ ) : c( c_ )  { }
    template< typename State , typename Time >
    void operator()( State const &x , State &dxdt , Time t ) const
    {
        c.system_func( x , dxdt , t );
    }
};

// ...
integrate( wrapper( c ) , x0 , t0 , t1 , dt );

(Boost.Bind 将无法在超过两个参数的情况下正常工作)。

关于c++ - 如何在 C++ 中使用 odeint 执行简单的数值积分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18769254/

相关文章:

eclipse - 是否有任何 Gradle eclipse IDE 集成?

java - 数字赋值应该抛出错误

c++ - 如何使用 Windows 程序在 C++ 中获取控制台输出?

c++ - 从 std::继承类

mysql - 集成两个 Rails 应用程序数据库

使用 +、-、* 和/对表达式执行符号和数字运算的 LISP 函数

c# - 将 eval 传递给 javascript

c++ - 表达式 'ab' == "ab"在 C++ 中是否为真

c++ - 将表从一个 lua 状态传递到另一个

spring - 带有Spring Boot的ElasticsearchIntegrationTest