Как оценить символическую переменную в SymbolicC++?

Я пробовал пару библиотек компьютерной алгебры для C++, чтобы использовать с курсом векторного исчисления, который я беру. У меня проблемы с нелинейными уравнениями в GiNaC, а в SymbolicC++ это действительно сработало.

Вот простой пример, но проблема в том, что я не могу понять, как вычислить число и, возможно, привести его к двойному или с плавающей точкой:

#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};

Как я могу оценить подобные выражения и привести их к doubles?

2 ответа

Я понимаю, что это ответ на почти годичный вопрос. Но нет способа напрямую привести строку к числу. Вам нужно будет вычислить интересующее вас значение с плавающей точкой - так же, как вы делаете это на калькуляторе. https://code.google.com/p/exprtk/ - это ссылка на очень простую в использовании библиотеку для достижения именно того, что вы ищете. Вам нужно будет поместить объект Symbolic в строковый класс, используя поток строк

Пытаться:

cout << "p" << i << " = {" << double(x_sol) << ", " << double(y_sol) << "};" << endl;
Другие вопросы по тегам