[GiNaC-list] collecting on similar series expansion

Sheplyakov Alexei varg at theor.jinr.ru
Thu Feb 1 19:26:41 CET 2007


On Tue, Jan 30, 2007 at 04:43:33PM -0300, Charlls Quarra wrote:

> The other problem i had with this program is that
> there wasnt a builtin way to get coefficients from
> multivariate polynomials
[snipped]

I use this function to convert a polynomial into an exmap 
(std::map<ex, ex, ex_is_less>):

exmap vargs_collect(const ex& e, const lst& l)
{
	ex x = e.expand();
	exmap cmap;
	cmap[_ex1] = _ex0;
	for (const_iterator xi=x.begin(); xi!=x.end(); ++xi) {
		ex key = _ex1;
		ex pre_coeff = *xi;
		for (lst::const_iterator li=l.begin(); li!=l.end(); ++li) {
			int cexp = pre_coeff.degree(*li);
			pre_coeff = pre_coeff.coeff(*li, cexp);
			key *= pow(*li, cexp);
		}
		exmap::iterator ci = cmap.find(key);
		if (ci != cmap.end())
			ci->second += pre_coeff;
		else
			cmap.insert(exmap::value_type(key, pre_coeff));
	}
	return cmap;
}

After such a conversion getting coefficients is trivial:

ex test = pow(x+y+z, 10);
exmap tm = vargs_collect(test, lst(x, y));
cout << tm[pow(x,7)*y] << endl; // 360*z^2

Best regards,
 Alexei


-- 
All science is either physics or stamp collecting.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 827 bytes
Desc: Digital signature
Url : http://www.cebix.net/pipermail/ginac-list/attachments/20070201/de3e8543/attachment.pgp


More information about the GiNaC-list mailing list