首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SymbolicC++中计算符号变量?

如何在SymbolicC++中计算符号变量?
EN

Stack Overflow用户
提问于 2014-08-19 11:31:42
回答 2查看 1.3K关注 0票数 5

我一直在尝试为C++提供几个计算机代数库,以便与我正在学习的一门矢量微积分课程结合使用。我在GiNaC中的非线性方程遇到了问题,在SymbolicC++中它实际上起作用了。

这是一个简单的例子,但问题是我不知道如何计算一个数字,并可能将其转换为双精度或浮点数:

代码语言:javascript
复制
#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++中仍然是展开的形式。

我得到的确切输出如下:

代码语言:javascript
复制
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};

如何计算这样的表达式并将其转换为double

EN

回答 2

Stack Overflow用户

发布于 2015-01-28 06:45:31

我意识到这是对一个几乎一年前的问题的回答。但是没有办法将字符串直接转换为数字。您需要计算您感兴趣的浮点值-与在计算器上计算浮点值的方法相同。https://code.google.com/p/exprtk/是一个非常容易使用的库的链接,它可以准确地完成您正在寻找的功能。您必须使用字符串流将符号对象放入字符串类

票数 7
EN

Stack Overflow用户

发布于 2014-08-19 12:18:40

尝试:

代码语言:javascript
复制
cout << "p" << i << " = {" << double(x_sol) << ", " << double(y_sol) << "};" << endl;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25375289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档