//SINGULAR Example 2.6.15 //================== we need here ======================= proc extendedDiagonalForm(matrix M) { int n=nrows(M); int m=ncols(M); intvec v=1..n; intvec w=n+1..n+m; intvec u=1..m; intvec x=m+1..n+m; matrix E=unitmat(n); matrix B=unitmat(m); matrix N=M; //to keep M for the test matrix D,K; while(D!=N) { D=N; K=transpose(interred(transpose(concat(E,D)))); E=submat(K,v,v); N=submat(K,v,w); K=interred(transpose(concat(transpose(B),transpose(N)))); K=simplify(K,1); B=submat(K,u,u); N=submat(K,x,u); } matrix T1[n][n]; matrix T2[m][m]; int s=size(module(D)); T1[1..s,n-s+1..n]=unitmat(s); if(s