Linearization using polynomial coordinate changes

The main strategy for linearizing or simplifying a differential equation is to try to make coordinate changes which eliminate terms from the series expansion.  Near an equilbrium point we have a vectorfield of the form Ax+ f(x) where f(x) = f2(x) + f3(x) + ... is given by a vector valued power series in x = (x1, x2, ..., xn).  Thus fd(x) is a vector whose entries are homogeneous polynomials of degree d.

Here is a simple example in the plane.  The linear part is given by a diagonal matrix and there is only one nonlinear term.

A = {{l1,0},{0,l2}};
f2 = {x2^2,x1^2};
F = A.{x1,x2}+f2;
F//MatrixForm

We try to eliminate the f2 terms by making a coordinate change of the form x = y + k2(y) where y=(y1,y2) are new variables and k2 has degree 2 with undetermined coefficients.  To find the coefficients we have to solve the homological equation  Dk2(y) Ay - A k2(y) = f2(y)

k2 = {a1*y1^2+b1*y1*y2+c1*y2^2,a2*y1^2+b2*y1*y2+c2*y2^2}
Dk2= {D[k2,y1],D[k2,y2]}//Transpose;
Dk2//MatrixForm 
homologicalequation = Dk2.A.{y1,y2} - A.k2 -(f2/.{x1->y1,x2->y2})//Expand

We need to set all of the coefficients to zero.

Coefficient[homologicalequation,y1^2]//Factor
Coefficient[homologicalequation,y1*y2]//Factor
Coefficient[homologicalequation,y2^2]//Factor

If   2l1-l2 and 2 l2 - l1 are not zero then we can solve it to get a polynomial change of variables.  In this simple case, we can find the inverse explicitly

k = {y1 + y2^2/(2l2-l1), y2+y1^2/(2l1-l2)}
Dk={D[k,y1],D[k,y2]}//Transpose
Dkinv=Inverse[Dk]//Factor

The new vectorfield is G(y) = Dkinv(x).F(k(y)) and it has no quadratic terms.  In fact it’s exactly linear but this is not typical.

G= Dkinv.F/.{x1->k[[1]],x2->k[[2]]}//Simplify

Series[Series[G,{y1,0,3}],{y2,0,3}]