function [minimal V] = minpoly(A)
% Βρίσκει το ελάχιστο πολυώνυμο ενός πίνακα Α
% minimal είναι στην μορφή πολυωνύμου,
% V το ελάχιστο πολυώνυμο σε μορφή διανύσματος
[m,n] = size(A);
qu=[];
i=1;
mnm=reshape(eye(n).',1,[]);
[mqu,nqu] = size(qu);
while nqu==0
    mnm=[mnm;reshape((A^i).',1,[])];
    qu=null(sym(mnm)');
    i=i+1;
    [mqu,nqu] = size(qu);
end
i=i-1;
V=double(fliplr(qu.'));
vec=[1];
syms z
for k=1:i
vec=[z^k vec];
end
minimal=dot(V,vec);