私は、受講中のベクトル計算コースで使用する 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
ですか?