[GiNaC-list] Polynomial companion matrix

James Jackson james.jackson at cern.ch
Wed Feb 18 16:26:14 CET 2009


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

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cebix.net/pipermail/ginac-list/attachments/20090218/9a73caaf/attachment.htm>


More information about the GiNaC-list mailing list