PermutationMatrix[p_List]:=IdentityMatrix[Length[p]][[p]];

n=3; max = 5; (*jak chyba závisí na max. prvku matice*)

m=Table[Random[Integer,{0,max}],{n},{n}];{lucas,{lu,perm,c}}=Timing[Quiet[LUDecomposition[m]]];
l=lu SparseArray[{i_,j_}/;j<i->1,{n,n}]+IdentityMatrix[n];
u=lu SparseArray[{i_,j_}/;j≥i->1,{n,n}];p = Transpose[PermutationMatrix[perm]];
{qrcas,{q,r}} = Timing[QRDecomposition[m]];{svdcas,{w,diag,v} }= Timing[SingularValueDecomposition[m]];
styl[x_]:=Style[x, Bold];Print[styl["M="],styl[MatrixForm[m]], styl[", hodnost: "], styl[MatrixRank[m]]]
Print["Permutace --- L --- U --- chyba rozkladu,cas:"]
Print[MatrixForm/@{p,l,u, p.l.u - m}," cas: " , lucas]
Print["Q --- R --- chyba rozkladu,cas:"]
Print[MatrixForm/@{q,r, ConjugateTranspose[q].r - m}," cas: " , qrcas]
Print["W --- Diagonální --- V^T ----- numericky priblizna chyba rozkladu,cas:"]
Print[MatrixForm/@{w, diag ,v,N[w.diag.Transpose[v] - m]}," cas: " , svdcas]
(*někdy dopiš určení chyby pomocí nějaké normy*)