symbolicc ++的表现

时间:2013-03-28 10:24:19

标签: c++ linear

任何人都有使用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(释放),这对于像这样的简单问题来说太慢了吗? 谁知道为什么?

由于

2 个答案:

答案 0 :(得分: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 :(得分: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;
}