1 Quadratic Forms

1.1 Quadratic Form 2D

(%i1) poly(x,y):= x^2 + 4*x*y + 4*y^2 +3*x + y - 3/4;
qmat : matrix([1,2],[2,4]);
xy : [x,y];
expand(xy.qmat.transpose(xy)) ;
expand(xy.qmat.transpose(xy)) +3*x + y - 3/4;

Result

Plot quadratic form

(%i6) load(draw)$
wxdraw2d(
         implicit(poly(x,y)=0,x,-3,3,y,-3,3)
        )$

Result

Find transformation matrix

(%i8) load(eigen)$
uev : uniteigenvectors(qmat)[2];
evec1 : flatten(uev[1]);
evec2 : flatten(uev[2]);
smat : transpose(matrix(evec1,evec2));
transpose(smat).qmat.smat;

Result

Transform quadratic form

(%i14) transpose(smat).qmat.smat;

Result

Find transformed coordinates

(%i15) xpyp : smat.[x,y];
xp : flatten(xpyp[1][1]);
yp : flatten(xpyp[2][1]);

Result

Find transformed quadratic form

(%i18) display(poly(x,y))$
expand(poly(xp,yp));
print("Find canonical quadratic form")$
expand(subst(ypp/sqrt(5)-sqrt(5)/(2*5),y,poly(xp,yp)));

Result

Quadratic Form (3D)

1.2 Quadratic form 3D

(%i22) poly3(x,y,z):= x^2 + y^2 + z^2 + + z*x + z*y + 3*x + y - 3/4;

Result

Plot quadratic form

(%i23) load(draw)$
wxdraw3d(enhanced3d = true,
         implicit(poly3(x,y,z)=0,x,-6,3,y,-6,3,z,-2,6)
         )$

Result

(%i25) qmat3 : matrix([1,0,1/2],[0,1,1/2],[1/2,1/2,1]);
xyz : [x,y,z]$
expand(transpose(xyz).qmat3.xyz);
expand(transpose(xyz).qmat3.xyz) +3*x + y - 3/4;

Result

Find transformation matrix

(%i29) load(eigen)$
eigenvectors(qmat3);
uev : uniteigenvectors(qmat3)[2];
evec1 : flatten(uev[1]);
evec2 : flatten(uev[2]);
evec3 : flatten(uev[3]);

smat : transpose(matrix(evec1,evec2,evec3));
transpose(smat).qmat3.smat;

Result

Transform quadratic form

(%i37) transpose(smat).qmat3.smat;
expand(transpose(smat).qmat3.smat);

Result

(%i39) xpypzp : smat.[x,y,z];
xp : flatten(xpypzp[1][1]);
yp : flatten(xpypzp[2][1]);
zp : flatten(xpypzp[3][1]);

Result

Find transformed quadratic form

(%i43) display(poly3(x,y,z))$
expand(poly3(xp,yp,zp));
load(format)$
format(format(expand(poly3(xp,yp,zp)),%poly(x)),%poly(y)) ;

Result

Excercise: Put it into form (using the subst command) that contains no terms linear in x,y,z (see example above).

Excercise: Write a little function that does the above job.


Created with wxMaxima.