任何人都有使用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;
}
}
解决功能在i7 cpu上花费402ms(调试)/ 67ms(释放),这对于像这样的简单问题来说太慢了吗? 谁知道为什么?
由于
答案 0 :(得分:1)
符号计算很慢,如果你想处理公式,它们就需要。
如果您只想解决线性方程组,请考虑使用专门为此创建的工具,如Eigen(http://eigen.tuxfamily.org/index.php?title=Main_Page),BLAS(http://www.netlib.org/blas/)。
答案 1 :(得分:0)
感谢kassak,刚刚与Eigen完成了这项工作。
#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;
}