5

私は、受講中のベクトル計算コースで使用する C++ 用のコンピューター代数ライブラリをいくつか試しています。GiNaC とSymbolicC++で実際に機能した非線形方程式に問題があります。

これは簡単な例ですが、問題は、数値に評価する方法を理解できず、おそらくそれを double または float にキャストすることです。

#include <iostream>
#include "symbolicc++.h"

using namespace std;
int main(void)
{
    Symbolic x("x"), y("y");

    Equation e1 = (x^2) + (y^2) == 13;
    Equation e2 = (x^2) - y == 7;

    Equations eqs = {e1, e2};
    list<Symbolic> symbs = {x, y};
    list<Equations> sols = solve(eqs, symbs);

    Symbolic x_sol, y_sol;
    int i = 1;
    for( auto iter1 = sols.begin(); iter1 != sols.end(); iter1++)
    {
        x_sol = x.subst((*(*iter1).begin()));
        y_sol = y.subst((*(--(*iter1).end())));
        cout << "p" << i << " = {" << x_sol << ", " << y_sol << "};" << endl;
        i++;
    }
    return 0;
}

その出力をコピーしginshて貼り付けると、問題なく評価されますが、SymbolicC++ では展開された形式のままです。

私が得ている正確な出力は次のとおりです。

p1 = {1/2*(-2*(25)^(1/2)+26)^(1/2), -1/2*(25)^(1/2)-1/2};
p2 = {1/2*(2*(25)^(1/2)+26)^(1/2), 1/2*(25)^(1/2)-1/2};
p3 = {-1/2*(-2*(25)^(1/2)+26)^(1/2), -1/2*(25)^(1/2)-1/2};
p4 = {-1/2*(2*(25)^(1/2)+26)^(1/2), 1/2*(25)^(1/2)-1/2};

このような式を評価して s にキャストするにはどうすればよいdoubleですか?

4

2 に答える 2

7

これは、ほぼ 1 年前の質問に対する回答であることを認識しています。しかし、文字列を数値に直接キャストする方法はありません。関心のある浮動小数点値を計算する必要があります-電卓で行うのと同じ方法です。https://code.google.com/p/exprtk/は、探しているものを正確に達成するための非常に使いやすいライブラリへのリンクです。文字列ストリームを使用して、Symbolic オブジェクトを文字列クラスに取得する必要があります。

于 2015-01-27T22:45:30.590 に答える
0

試す:

cout << "p" << i << " = {" << double(x_sol) << ", " << double(y_sol) << "};" << endl;
于 2014-08-19T04:18:40.227 に答える