> 
> with(linalg):
> Q:=matrix(8,8,[[1,-1,-1,-1,1,1,1,-1],[1,1,-1,-1,-1,1,-1,1],
> [1,1,-1,1,-1,-1,1,-1],[1,-1,-1,1,1,-1,-1,1],
> [1,-1,1,-1,-1,-1,1,1],[1,1,1,-1,1,-1,-1,-1],
> [1,1,1,1,1,1,1,1],[1,-1,1,1,-1,1,-1,-1]]);

               [1    -1    -1    -1     1     1     1    -1]
               [                                           ]
               [1     1    -1    -1    -1     1    -1     1]
               [                                           ]
               [1     1    -1     1    -1    -1     1    -1]
               [                                           ]
               [1    -1    -1     1     1    -1    -1     1]
          Q := [                                           ]
               [1    -1     1    -1    -1    -1     1     1]
               [                                           ]
               [1     1     1    -1     1    -1    -1    -1]
               [                                           ]
               [1     1     1     1     1     1     1     1]
               [                                           ]
               [1    -1     1     1    -1     1    -1    -1]

> Inverse:=(1/8)*inverse(Q/8);

                    [ 1     1     1     1     1     1    1     1]
                    [                                           ]
                    [-1     1     1    -1    -1     1    1    -1]
                    [                                           ]
                    [-1    -1    -1    -1     1     1    1     1]
                    [                                           ]
                    [-1    -1     1     1    -1    -1    1     1]
     Inverse := 1/8 [                                           ]
                    [ 1    -1    -1     1    -1     1    1    -1]
                    [                                           ]
                    [ 1     1    -1    -1    -1    -1    1     1]
                    [                                           ]
                    [ 1    -1     1    -1     1    -1    1    -1]
                    [                                           ]
                    [-1     1    -1     1     1    -1    1    -1]

> q:=matrix(1,8,[x[1],x[2],x[3],x[4],x[5],x[6],x[7],x[8]]);

     q := [x[1] , x[2] , x[3] , x[4] , x[5] , x[6] , x[7] , x[8]]

> y:=matrix(1,8,[a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8]]);

     y := [a[1] , a[2] , a[3] , a[4] , a[5] , a[6] , a[7] , a[8]]

> Y:=(1/8)*transpose(linsolve(Q/8,transpose(q)));

  Y := 1/8

        [x[1] + x[2] + x[3] + x[4] + x[5] + x[6] + x[7] + x[8] ,

        -x[1] + x[2] + x[3] - x[4] - x[5] + x[6] + x[7] - x[8] ,

        -x[1] - x[2] - x[3] - x[4] + x[5] + x[6] + x[7] + x[8] ,

        -x[1] - x[2] + x[3] + x[4] - x[5] - x[6] + x[7] + x[8] ,

        x[7] - x[3] + x[4] - x[8] - x[5] + x[6] - x[2] + x[1] ,

        x[7] + x[2] - x[3] + x[8] - x[5] - x[6] - x[4] + x[1] ,

        x[3] - x[8] + x[5] - x[6] + x[7] - x[4] - x[2] + x[1] ,

        -x[3] - x[8] + x[5] - x[6] + x[7] + x[4] + x[2] - x[1]]

> X:=matrix(1,8,[1,xi,eta,zeta,xi*eta,eta*zeta,zeta*xi,xi*eta*zeta]);

  X :=

        [1 , xi , eta , zeta , xi eta , eta zeta , zeta xi ,

        xi eta zeta]

> N:=(1/8)*multiply(transpose(8*Inverse),transpose(X));

  N := 1/8

        [1 - xi - eta - zeta + xi eta + eta zeta + zeta xi

         - xi eta zeta]

        [1 + xi - eta - zeta - xi eta + eta zeta - zeta xi

         + xi eta zeta]

        [1 + xi - eta + zeta - xi eta - eta zeta + zeta xi

         - xi eta zeta]

        [1 - xi - eta + zeta + xi eta - eta zeta - zeta xi

         + xi eta zeta]

        [1 - xi + eta - zeta - xi eta - eta zeta + zeta xi

         + xi eta zeta]

        [1 + xi + eta - zeta + xi eta - eta zeta - zeta xi

         - xi eta zeta]

        [1 + xi + eta + zeta + xi eta + eta zeta + zeta xi

         + xi eta zeta]

        [1 - xi + eta + zeta - xi eta + eta zeta - zeta xi

         - xi eta zeta]

> N[i]:=(1+xi[i]*xi+eta[i]*eta+zeta[i]*zeta+xi[i]*xi*eta[i]*eta+
> eta[i]*eta*zeta[i]*zeta+zeta[i]*zeta*xi[i]*xi+xi[i]*xi*eta[i]*eta*zeta
> [i]*zeta)/8;

  N[i] := 1/8 + 1/8 xi[i] xi + 1/8 eta[i] eta + 1/8 zeta[i] zeta

         + 1/8 xi[i] xi eta[i] eta + 1/8 eta[i] eta zeta[i] zeta

         + 1/8 zeta[i] zeta xi[i] xi

         + 1/8 xi[i] xi eta[i] eta zeta[i] zeta

> N[i]:=factor(N[i]);

    N[i] := 1/8 (1 + eta[i] eta) (1 + zeta[i] zeta) (1 + xi[i] xi)

> 
> 
