Actually, it was just wrong... Must not write code at 2AM... Try the following!:

// 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.de
https://www.cebix.net/mailman/listinfo/ginac-list