[GiNaC-list] Welcome to the "GiNaC-list" mailing list

Patrick Schulz pschulz at posteo.de
Thu Sep 6 08:47:59 CEST 2018

Hi all!

I'm working with polynomials in one variable, where i want to compare 
coefficients and remove some (simplification). For this, i need to 
iterate over the individual coefficients, but in order to compare them, 
i need them to be in a standard form. Since only terms with products and 
sums are involved, i expand the expressions to remove any nested 
expressions, e.g. R1 * (C1 + C2) -> R1 * C1 + R1 * C2.
This works well, but sometime terms of nth power also exist, which are 
not expanded:

GiNaC::symbol R1("R1");
GiNaC::symbol R2("R2");
GiNaC::symbol C1("C1");
GiNaC::symbol C2("C2");
GiNaC::ex e = (R1 + R2) * (C1 + C2 * (R1 * C1));
std::cout << e << '\n' << e.expand() << '\n';

Here we get a term R1^2 * C1 * C2, which does not comply with my 
"standard form".

In the end, ideally i would like to have only a sum of products, no 
deeper nesting:

R1 * C1 + R1 * R1 * C1 * C2 + R2 * C1 + R1 * R2 * C1 * C2

Is there a way to do this?

Maybe some information what i'm trying to acchieve:
I solve spice netlists and extract transfer functions in s-space. For 
the simplification (the removal of individual terms) i want to look at 
the coefficients of the numerator and the denominator polynoms. This is 
easy, since i use ex::coeff(). So now i have expressions for each power
of s. Then i want to store the individual elements in a vector, which 
makes up the individual products. These are again stored in another 
vector making up the sum of the polynoms. This works, kinda, but i have 
to parse the ginac expression, which does not always behave
in a way i can foresee. Also i have a strong feeling that there is a 
better way to do this, given that ginac has already many functions 
dealing with polynoms. I'm happy to get some pointers on this topic :)

Thank you for your help!


More information about the GiNaC-list mailing list