> restart; C:=m->piecewise(m=0, 1/sqrt(2), m <> 0, 1):
d:=(1/4)*C(u)*C(v)*sum( sum( z*cos((2*x+1)*u*Pi/16)*cos((2*y+1)*v*Pi/16) , y=0..7) , x=0..7):
DCT:=unapply(d,u,v,z):
 

> A:=Matrix([[ 64 , 60 , 58 , 60 , 60 , 59 , 72 , 77 ],
       [ 63 , 58 , 138 , 61 , 59 , 58 , 50 , 116 ],
       [ 148 , 134 , 138 , 106 , 116 , 81 , 54 , 131 ],
       [ 92 , 61 , 126 , 97 , 100 , 106 , 72 , 72 ],
       [ 61 , 59 , 116 , 61 , 81 , 59 , 61 , 130 ],
       [ 61 , 111 , 81 , 58 , 58 , 58 , 80 , 38 ],
       [ 63 , 59 , 59 , 58 , 59 , 58 , 113 , 111 ],
       [ 63 , 61 , 60 , 60 , 60 , 59 , 58 , 144 ]]);
 

Matrix(%id = 2609604) (1)
 

> Z:=LinearAlgebra:-RandomMatrix(8,8):
 

> for i from 1 by 1 to 8 do
   for j from 1 by 1 to 8 do
       Z[i,j] := DCT(i-1,j-1,A[i,j]):
   od:
od:
Z;
 

Matrix(%id = 3000392) (2)
 

>