DiffEq - Modern C++ ODE Integration Library 1.0.0
High-performance C++ library for solving ODEs with async signal processing
|
Modern C++ ODE Integration Library with Real-time Signal Processing. More...
#include <core/concepts.hpp>
#include <core/abstract_integrator.hpp>
#include <core/adaptive_integrator.hpp>
#include <core/timeout_integrator.hpp>
#include <core/composable_integration.hpp>
#include <integrators/ode/euler.hpp>
#include <integrators/ode/improved_euler.hpp>
#include <integrators/ode/rk4.hpp>
#include <integrators/ode/rk23.hpp>
#include <integrators/ode/rk45.hpp>
#include <integrators/ode/dop853.hpp>
#include <integrators/ode/bdf.hpp>
#include <integrators/ode/lsoda.hpp>
#include <sde/sde_base.hpp>
#include <integrators/sde/euler_maruyama.hpp>
#include <integrators/sde/milstein.hpp>
#include <integrators/sde/sri1.hpp>
#include <integrators/sde/implicit_euler_maruyama.hpp>
#include <integrators/sde/sra.hpp>
#include <integrators/sde/sra1.hpp>
#include <integrators/sde/sra2.hpp>
#include <integrators/sde/sosra.hpp>
#include <integrators/sde/sri.hpp>
#include <integrators/sde/sriw1.hpp>
#include <integrators/sde/sosri.hpp>
#include <async/async_integrator.hpp>
#include <signal/signal_processor.hpp>
#include <interfaces/integration_interface.hpp>
Go to the source code of this file.
Typedefs | |
template<typename T > | |
using | diffeq::VectorState = std::vector< T > |
template<typename T , std::size_t N> | |
using | diffeq::ArrayState = std::array< T, N > |
using | diffeq::DefaultScalar = double |
using | diffeq::DefaultTime = double |
Modern C++ ODE Integration Library with Real-time Signal Processing.
This library provides a comprehensive C++20 implementation of ODE integrators with advanced real-time capabilities for financial and robotics applications. Features include real-time signal processing, inter-process communication, and async execution using modern C++ standards.
Fixed Step Methods:
Adaptive Step Methods (Non-stiff):
Stiff System Methods:
Automatic Methods:
Basic Methods:
Advanced High-Order Methods (Strong Order 1.5):
Pre-configured Methods:
Key Features:
Basic ODE Integration:
Real-time Signal-Aware Integration:
#include <diffeq.hpp> #include <interfaces/integration_interface.hpp>
// Create signal-aware interface auto interface = diffeq::interfaces::make_integration_interface<std::vector<double>>();
// Register signal influences interface->register_signal_influence<double>("price_update", diffeq::interfaces::IntegrationInterface<std::vector<double>>::InfluenceMode::CONTINUOUS_SHIFT, [](const double& price, auto& state, auto t) { // Modify portfolio dynamics based on price signal double momentum = (price > 100.0) ? 0.01 : -0.01; for (auto& asset : state) asset *= (1.0 + momentum); });
// Register real-time output interface->register_output_stream("monitor", [](const auto& state, auto t) { std::cout << "Portfolio value: " << std::accumulate(state.begin(), state.end(), 0.0) << std::endl; });
// Create signal-aware ODE auto signal_ode = interface->make_signal_aware_ode(my_portfolio_ode); auto integrator = diffeq::make_rk45<std::vector<double>>(signal_ode);
// Integration automatically handles signals and outputs integrator.integrate(state, dt, t_final);
Real-time Robot Control:
#include <diffeq.hpp> #include <interfaces/integration_interface.hpp>
constexpr size_t N_JOINTS = 6; std::array<double, N_JOINTS * 3> robot_state{}; // position, velocity, acceleration
// Create robotics interface auto interface = diffeq::interfaces::make_integration_interface<std::array<double, 18>>();
// Register control signal influence interface->register_signal_influence<std::vector<double>>("control_targets", diffeq::interfaces::IntegrationInterface<std::array<double, 18>>::InfluenceMode::DISCRETE_EVENT, [](const auto& targets, auto& state, auto t) { // Update target positions for each joint for (size_t i = 0; i < targets.size() && i < N_JOINTS; ++i) { // Apply control logic } });
// Emergency stop capability interface->register_signal_influence<bool>("emergency_stop", diffeq::interfaces::IntegrationInterface<std::array<double, 18>>::InfluenceMode::DISCRETE_EVENT, [](bool stop, auto& state, auto t) { if (stop) { // Set all velocities to zero for (size_t i = N_JOINTS; i < 2 * N_JOINTS; ++i) state[i] = 0.0; } });
// Create robotics interface and register signals for real-time control. // Example shows emergency stop and joint monitoring capabilities.
Available SDE methods:
All integrators and interfaces are templated on these concepts for maximum flexibility and type safety.
The library uses a unified interface design where all real-time signal processing capabilities are provided through a single IntegrationInterface class. This interface supports:
This design eliminates the need for domain-specific processors while remaining flexible enough to handle any application domain.
Definition in file diffeq.hpp.
using diffeq::ArrayState = typedef std::array<T, N> |
Definition at line 322 of file diffeq.hpp.
using diffeq::DefaultScalar = typedef double |
Definition at line 325 of file diffeq.hpp.
using diffeq::DefaultTime = typedef double |
Definition at line 326 of file diffeq.hpp.
using diffeq::VectorState = typedef std::vector<T> |
Definition at line 319 of file diffeq.hpp.