// Creates the Companion matrix for a given polynomial
GiNaC::matrix CreateCompanion(const GiNaC::ex &poly, const GiNaC::ex &symbol)
{
if(poly.is_polynomial(symbol))
{
int rank = poly.degree(symbol);
GiNaC::matrix mat(rank, rank);
GiNaC::ex majorCoeff = poly.coeff(symbol, rank);
for(int i = 0; i < rank; ++i)
{
for(int j = 0; j < rank; ++j)
{
if(i - j == 1)
{
mat(i, j) = 1;
}
else if(j == rank - 1)
{
mat(i, j) = -1 * poly.coeff(symbol, i) / majorCoeff;
}
}
}
return mat;
}
else
{
return GiNaC::matrix();
}
}
Regards,
James.
On 18 Feb 2009, at 14:59, Jens Vollinga wrote:
Hi James,
James Jackson schrieb:
As far as I can see, there is no method available to compute the companion matrix of a polynomial. May I suggest the addition of a method along these lines?:
sure, we can include such a function.
I am just a bit confused about the conventions here:
mat(i, j) = -1 * poly.coeff(symbol, rank - j - 1) / majorCoeff;
Shouldn't coefficient c_j go in row j?
Regards,
Jens
_______________________________________________
GiNaC-list mailing list
GiNaC-list@ginac.dehttps://www.cebix.net/mailman/listinfo/ginac-list