2

誰でも 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 で 402 ミリ秒 (デバッグ)/67 ミリ秒 (リリース) かかりますが、このような単純な問題には遅すぎますか? 誰でも理由を知っていますか?

ありがとう

4

2 に答える 2

2

シンボリック計算は遅く、数式を処理する場合に必要です。

一次方程式系を解きたいだけなら、Eigen( http://eigen.tuxfamily.org/index.php?title=Main_Page )、BLAS( http://www. netlib.org/blas/ )。

http://en.wikipedia.org/wiki/Symbolic_computationもお読みください

于 2013-03-28T10:33:14.553 に答える
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;
}
于 2013-03-29T08:11:08.820 に答える