Как проще написать интерфейс для математических вычислений? При разработке программ для математических вычислений пришёл к следующей задаче. Нужно задать входные данные для программы – числа, элементы перечислимых типов, векторы, матрицы, а также функции, которые будут вычисляться несколько раз внутри основной программы. (В обычном конфигурационном файле можно ввести значения переменных, но нельзя, скажем, ввести вместо значения выражение, которое должно посчитаться.) Вычислительные программы пишу на C++.
Какие программные средства можно использовать для решения этой задачи? Есть вариант писать скрипты на Python или Lua (или, возможно, Octave), в которых задаются входные данные и/или вызывается функция основной программы, но я не в курсе, можно ли в таком случае передать функцию в свою программу на C++, чтобы она быстро считалась. Или думаю разработать свой интерпретатор с универсальным парсером, который может пригодиться для разных форматов представления данных (хотя есть Boost.Spirit).
Подскажите, пожалуйста, как лучше автоматизировать ввод выражений, матриц и функций в свою программу.
Если нужна более конкретная постановка задачи - есть, скажем, нелинейное дифференциальное уравнение эллиптического типа -Δu + f(u) = g, где f, g - заданные функции. При решении такого уравнения нужно несколько раз вычислять значение функции f, которую нужно подать на вход моей программе.
Один из вариантов - написать программу на любом языке, которая принимает в качестве параметров аргументы функции и выводит в стандартный вывод значение функции - потом передать путь к программе и аргументы в качестве параметров конфигурационного файла и вызвать эту программу из основной программы. Но хочется иметь под рукой более удобный и универсальный интерфейс.

21 Авг 2019 в 06:20
232 +1
0
Ответы
1

Если вы программирование на C++, то для удобства работы с математическими вычислениями вы можете воспользоваться библиотеками, такими как Eigen, Armadillo, или Blaze, которые предоставляют мощный и удобный интерфейс для работы с векторами, матрицами и другими математическими объектами.

Для передачи функций в вашу программу на C++ вы можете использовать функциональные объекты, такие как std::function или лямбда-функции. Это позволит вам передавать функции как аргументы, сохранять их в контейнерах и вызывать их при необходимости.

Если вы хотите автоматизировать ввод выражений, матриц и функций в вашу программу, можно использовать файлы с данными в удобном для вас формате (например, CSV, JSON, XML) и разработать парсер, который будет считывать эти данные и передавать их вашей программе для вычислений.

Если у вас есть необходимость в решении дифференциальных уравнений, вы можете воспользоваться библиотеками, такими как Boost.ODEint или GSL (GNU Scientific Library), которые предоставляют реализации различных методов численного решения дифференциальных уравнений.

Однако, если вам необходимо использовать скрипты на Python или Lua для автоматизации ввода данных, то вы также можете использовать библиотеки такие как Boost.Python (для Python) или LuaBridge (для Lua), которые позволяют взаимодействовать с вашей программой на C++ из скриптовых языков.

Выбор подхода зависит от ваших предпочтений, требований к производительности и удобства работы. Надеюсь, эти рекомендации помогут вам решить вашу задачу по автоматизации ввода данных для математических вычислений.

20 Апр в 13:20
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 654 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир