Кто-нибудь имеет опыт работы с 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, это слишком медленно для такой простой проблемы, как эта?
Кто-нибудь знает почему?
Спасибо
Символьные вычисления медленны, они нужны, если вы хотите работать с формулами.
Если вы просто хотите решить систему линейных уравнений, рассмотрите возможность использования специально созданного для этого инструмента, такого как Eigen (http://eigen.tuxfamily.org/index.php?title=Main_Page), BLAS (http://www.netlib.org/blas/).
Также прочитайте http://en.wikipedia.org/wiki/Symbolic_computation
Спасибо Кассак, только что сделал это с Эйгеном.
#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;
}