производительность SymbolicStack Overflow

Кто-нибудь имеет опыт работы с SymbolicC ++? Я пытаюсь решить некоторые линейные проблемы с этой библиотекой, но производительность кажется не приемлемой, вот мой тест

#pragma warning(disable: 4800 4801 4101 4390)
#include<iostream>
using namespace std;
#include "Symbolic/symbolicc++.h"
int main() {
// x==10  y==9  z==7
Symbolic x("x"), y("y"), z("z");
Equations rules = (
x + y + z == 26,
x - y == 1,
2*x - y + z == 18
);

list<Symbolic> s = (x, y, z);

list<Equations> result = solve(rules, s); // slow here

for(auto& x : result) {
cout << x << endl;
}
}

решать Функция занимает 402 мс (отладка) / 67 мс (выпуск) на процессоре i7, это слишком медленно для такой простой проблемы, как эта?
Кто-нибудь знает почему?

Спасибо

1

Решение

Символьные вычисления медленны, они нужны, если вы хотите работать с формулами.

Если вы просто хотите решить систему линейных уравнений, рассмотрите возможность использования специально созданного для этого инструмента, такого как Eigen (http://eigen.tuxfamily.org/index.php?title=Main_Page), BLAS (http://www.netlib.org/blas/).

Также прочитайте http://en.wikipedia.org/wiki/Symbolic_computation

1

Другие решения

Спасибо Кассак, только что сделал это с Эйгеном.

#include <iostream>
#include "Eigen/Dense"using namespace std;
using namespace Eigen;
int main()
{
Matrix3f A;
Vector3f b;
A <<    1, 1, 1,
1,-1, 0,
2,-1, 1;
b <<    26, 1,18;
cout << "Here is the matrix A:\n" << A << endl;
cout << "Here is the vector b:\n" << b << endl;
Vector3f x = A.colPivHouseholderQr().solve(b);
cout << "The solution is:\n" << x << endl;
}
0

По вопросам рекламы [email protected]