我一直在尝试为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};如何计算这样的表达式并将其转换为double?
发布于 2015-01-28 06:45:31
我意识到这是对一个几乎一年前的问题的回答。但是没有办法将字符串直接转换为数字。您需要计算您感兴趣的浮点值-与在计算器上计算浮点值的方法相同。https://code.google.com/p/exprtk/是一个非常容易使用的库的链接,它可以准确地完成您正在寻找的功能。您必须使用字符串流将符号对象放入字符串类
发布于 2014-08-19 12:18:40
尝试:
cout << "p" << i << " = {" << double(x_sol) << ", " << double(y_sol) << "};" << endl;https://stackoverflow.com/questions/25375289
复制相似问题