Есть ли способ оптимизировать замену параметров в уравнении для более быстрого вычисления на C++?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Есть ли способ оптимизировать замену параметров в уравнении для более быстрого вычисления на C++?

Сообщение Anonymous »

У меня есть набор уравнений, которые принимают векторные входные данные и возвращают решение для разных временных шагов. В уравнениях есть несколько параметров, которые принимаются во время выполнения и остаются постоянными в течение этого цикла. Я хочу заменить такой параметр его значениями, вычисленными во время выполнения, чтобы в дальнейших вычислениях использовались уравнения с подставленным значением параметра. Исходная задача имеет 4000 таких параметров, но я даю образец уравнения, чтобы проиллюстрировать, чего я пытаюсь достичь. br />Пример меньшего размера, иллюстрирующий проблему:

Код: Выделить всё

 rval[0]  = -p1*x + p2*y*z;
rval[1]  = -rval[0] - p3*y*y - dy;
rval[0] -=  dx;
rval[2]  =  x + y + z - 1;

{p1,p2,p3} — это фиксированный набор параметров, значения которых получаются онлайн, и новый набор уравнений по сути становится

Код: Выделить всё

  rval[0]  = (-0.04)*x + (1.0e4)*y*z;
rval[1]  = -rval[0] - (3.0e7)*y*y - dy;
rval[0] -=  dx;
rval[2]  =  x + y + z - 1;
Один из способов, который я пробовал, — использовать символическую библиотеку C++ symengine, но он увеличивает накладные расходы на подстановку и вычисления с использованием уравнений symengine.
Код, опробованный для приведенных выше уравнений, с библиотекой symengine
р>

Код: Выделить всё

// Create a map for substitution
SymEngine::map_basic_basic subs_map;
subs_map[x_sym] = real_double(x);
subs_map[y_sym] = real_double(y);
subs_map[z_sym] = real_double(z);
subs_map[dx_sym] = real_double(dx);
subs_map[dy_sym] = real_double(dy);
subs_map[dz_sym] = real_double(dz);

// Evaluate equations
rval[0] = SymEngine::eval_double(*resv1->subs(subs_map));
rval[1] = SymEngine::eval_double(*resv2->subs(subs_map));
rval[2] = SymEngine::eval_double(*resv3->subs(subs_map));
Уравнения resv1, resv2 и resv3 аналогичны упомянутым выше уравнениям с замененными параметрами
Есть ли альтернативный способ добиться высокой скорости вычисления уравнений путем замены параметров или существует ли другой способ добиться высокой скорости вычисления уравнений путем замены параметров? более быстрый способ сделать это и в symengine.
Примечание. Обратите внимание: я использую гораздо больший набор уравнений, чем этот, который выполняется несколько итераций за временной шаг, но я экспериментирую с меньшим набором уравнений. уравнения для проверки осуществимости решения.

Подробнее здесь: https://stackoverflow.com/questions/787 ... aster-comp
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»