Squeak.ru - шаблоны программирования

переданные параметры для повышения odeint в C++

Этот ответ полезен, но я хотел бы знать, как передать несколько параметры разных типов модели ODE, возможно, в структуре. Для моего непосредственного варианта использования мне нужно иметь возможность передавать один std::array<double, 6>, два std::vector<std::vector<double>> и два двух скаляра double, чтобы в общей сложности передать четыре параметра. В связанном примере, а также в harmonic_oscillator.cpp имеется только один переданный параметр double. Спасибо.

Вот пример структуры, которую мне нужно передать в силовую модель ODE и использовать в уравнениях скоростей.

struct T
{
    std::array<double, 6> IC;
    double S;
    double M;
    std::vector<std::vector<double>> C;
    std::vector<std::vector<double>> WT;
};

Ответы:


1

Я считаю, что придумал структурное решение, которое работает, но я не уверен, есть ли у него какая-либо переменная/область памяти нет-нет. Вот пример:

#include <vector>
#include <boost/numeric/odeint.hpp>

// define structure
struct T
{
    std::array<double, 6> IC;
    double                S;
};

// force model
class harm_osc
{
    struct T T1;

public:
    harm_osc(struct T G) : T1(G) {}

    void operator() ( const std::vector< double > &x , std::vector< double > &dxdt , const double /* t */ )
    {
        dxdt[0] = x[1];
        dxdt[1] = -x[0] - T1.IC[0]*x[1] + T1.S;
    }
};

// print integrated state solution
void write_solution( const std::vector< double > &x , const double t )
{
    printf("%-6.2f %-6.2f %-6.2f\n", t, x[0], x[1]);
}

// problem setup
int main()
{

    std::vector< double > x(2);
    x[0] = 1.0;
    x[1] = 0.0;

    struct T T2;

    T2.IC = {0.15, 0.15, 0.15, 0.15, 0.15, 0.15};
    T2.S  = 0.0;

    harm_osc ho(T2);
    boost::numeric::odeint::integrate(ho, x, 0.0, 10.0, 0.1, write_solution);

}
23.11.2016
Новые материалы

Угловая структура архитектуры
Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

«Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

Создайте API с помощью Python FastAPI
Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

Веселье с прокси-сервером JavaScript
Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...