Я хочу использовать boost::odeint
для решения дифференциальных уравнений для разных наборов переменных, например, std::vector
. Разумеется, одним из решений было бы объединение всех переменных в большой вектор, который затем используется как переменная состояния.Тип типа boost: fusion in boost: odeint
Однако, я бы предпочел более элегантное решение, например, использование boost::fusion
в качестве типа состояния, которое затем содержит разные векторы. Насколько я понял из posting и реализации для related problem, в принципе нет препятствий. Я только пропустить несколько подсказок для конкретного реализации-, в частности, касающихся правильного спецификации
алгебры, операции и изменение размера
требуется для создания на пример шаговой ошибки. Какая из существующих реализаций - например, odeint::fusion_algebra
- можно использовать напрямую и что еще предстоит сделать в этом случае?
Благодарим вас за быстрый и подробный ответ и за предоставление такой большой библиотеки.Как вы правильно догадались, мне действительно нужен контроль размера шага, и поэтому самое легкое предложение не будет работать для меня. Учитывая объем работы, необходимой для выполнения этой работы с boost :: fusion, я, вероятно, придерживаюсь комбинированного вектора значений_значения. Альтернативно, может быть, есть простой способ использования valarray state_type? Valarray не предоставляет итератор и, следовательно, не может работать из коробки? – floyd85
Я никогда не пользовался ванариями. Было бы интересно узнать, работает ли с odeint. Но я бы не рекомендовал использовать валерьяны. Они редко используются. Для векторов или некоторых продвинутых векторных типов из MTL, ublas, Eigen, ... обычно является лучшей альтернативой. – headmyshoulder