Hello, On Fri, Aug 06, 2010 at 12:03:11PM +0200, Kraus Philipp wrote:
I'm new at GiNaC and I use the lib for create a gradient descent algorithm (symbolic calculating). I have a formula "a*x^3+b*y^4" and I subsitute the formula in the error function "0.5*(t - <formula>)^2".
After the substitution GiNaC returns the expression "(0.5)*(a*x^3+b*y^4-t)^2".
I use this code: GiNaC::ex m_expression; GiNaC::symtab m_exprtable;
try { m_expression = l_parser( "a*x^3+b*y^4" ); m_exprtable = l_parser.get_syms(); } catch (...) {}
GiNaC::ex l_full; GiNaC::symtab l_table(m_exprtable);
l_table["formula"] = m_expression; GiNaC::parser l_parser(l_table);
try { l_full = l_parser( "0.5*(t - formula)^2" ); // (*) } catch (...) {}
std::cout << l_full << std::endl;
The code below does the same thing and is a bit simpler: symbol a("a"), b("b"), x("x"), y("y"), t("t"); ex e = a*pow(x, 3) + b*pow(y, 4); ex d = pow(t - e, 2)/2; Also, "0.5" is inexact number, I guess this is not what you want for a symbolic calculation. Best regards, Alexei