> with(linalg):

> #We want to do the whole process of diagonalization on Maple.

> A:=matrix([[1, 2, 0],[1, 0, 0], [0, 0, 2]]);

> #Characteristic polynomial, minimum polynomial and their factorization

> Delta:=charpoly(A,t);factor(Delta);m := minpoly(A, t);factor(m);

>

> #We may find the eigenvalues directly by

> eigenvalues(A);

> #And we find the eigenvectors by

> eigenvectors(A);

> #Notice that the first entry is the eigenvalue, the second is the multiplicity and in the curly brackets we have a basis.

> #We get a basis B from putting the bases for the eigenspaces together and a change of basis matrix M by

> M:= matrix([[-1, 2, 0], [1, 1, 0], [0, 0, 1]]);

> #The matrix M^(-1) A M is diagonal. We verify that

> multiply(M^(-1), A, M);

> # Now, there is a much more efficient way of doing this. In which, the information is more hidden from us. Use

> J := jordan(A, 'M');

> #What you got is the Jordan form of A, which would always be diagonal if A is diagonalizable. The matrix M is a matrix such that M^(-1) A M = J. Therefore, when A is diagonalizable, the columns of M are eigenvectors and give a basis of eigenvectors with respect to which A is represented by J. To obtain M use

> print(M);

> #And we check

> evalm(M^(-1)&*A&*M);

> #This is another way to do

> multiply(M^(-1), A, M);

>