% corners2r                                                 Steve Mann, 1992
% converts 4 corners to rechirp parameters
% rechirp puts the 4 corners at the specified points
%
% the coordinates are normalized on [0,1)
%
% user supplies [u1,v1, u2,v2, u3,v3, u4,v4];
% this function returns [a_inv,b_inv,c_inv,d_inv,e_inv,f_inv,g_inv,h_inv]
%
% or user supplies a vector containing the 8 point parameters,
% this function returns a vector containing the 8 inverse p-chirp parameters

% adapted from rechirp2.c:
% ** Used primarily to rechirp images which have been dechirped
% ** Thus an image of a brick wall at an oblique angle may be remapped so
% ** that all the bricks appear the same size, and thus the ``chirping''
% ** phenomenon associated with perspective projection is eliminated,
% ** and then a different chirpiness may be applied.
% ** Chirping means that the spatial frequency changes with position in the
% ** image (one raster to a digital to analog converter, listened to by on
% ** a loudspeaker gives the bird-like or bat-like ``chirping'' sound).
%
% ** Rechirping may be thought of as moving all the vanishing points off to
% ** infinity (via dechirp) and then moving them back to some _different_
% ** position. This program may be used directly to re-position the perspective,
% ** or may follow chirplet_est.c; parameters being estimated from peaks in the
% ** kurtosis of the Pan-Zoom (PZ) plane of the chirplet transform of the image.
% ** (Note, in this context the ``camera metaphor'' may be useful: for example
% ** the wavelet transform is a Translation, Zoom (TZ) plane.)
% ** Author: Steve Mann, 1992 July 9
% ** Based on a dechirp2.c
% ** See also /u/sbeck/src/datstretch/datstretch.c
% **     and  /u/steve/src/dechirp/chirplet_est.c
% **     and  /u/steve/src/dechirp/dechirp2.c

function [a_inv,b_inv,c_inv,d_inv,e_inv,f_inv,g_inv,h_inv] = ...
	 dechirp_mapping(u1,v1,u2,v2,u3,v3,u4,v4);

input_isvector = 0;
if nargin == 1
  input_isvector = 1;
  if length(x1) ~= 8  %  !=, thinks ! is a shell escape.
    disp('***** dechirp input parameter vector is not 8 units long *****')
  end%if
  v1=u1(2);
  u2=u1(3);
  v2=u1(4);
  u3=u1(5);
  v3=u1(6);
  u4=u1(7);
  v4=u1(8);
  u1=u1(1); % destroy vector x1 last
end%if


      a_inv = -(((u3*u3)*(v1*v1)*v2 - u3*u4*(v1*v1)*v2 - ...
           (u3*u3)*v1*(v2*v2) + u3*u4*v1*(v2*v2) - ...
           u2*u3*(v1*v1)*v3 + u3*u4*(v1*v1)*v3 - u1*u3*v1*v2*v3 + ...
           u2*u3*v1*v2*v3 + u1*u4*v1*v2*v3 - u3*u4*v1*v2*v3 + ...
           u1*u3*(v2*v2)*v3 - u1*u4*(v2*v2)*v3 + ...
           u1*u2*v1*(v3*v3) - u1*u4*v1*(v3*v3) - ...
           u1*u2*v2*(v3*v3) + u1*u4*v2*(v3*v3) + ...
           u2*u3*(v1*v1)*v4 - (u3*u3)*(v1*v1)*v4 - ...
           u2*u3*v1*v2*v4 + (u3*u3)*v1*v2*v4 - u1*u2*v1*v3*v4 + ...
           u1*u3*v1*v3*v4 + u1*u2*v2*v3*v4 - u1*u3*v2*v3*v4)/...
         (u2*(u3*u3)*(v1*v1)*v2 - 2*u2*u3*u4*(v1*v1)*v2 + ...
           u2*(u4*u4)*(v1*v1)*v2 - u1*(u3*u3)*v1*(v2*v2) + ...
           2*u1*u3*u4*v1*(v2*v2) - u1*(u4*u4)*v1*(v2*v2) - ...
           (u2*u2)*u3*(v1*v1)*v3 + 2*u2*u3*u4*(v1*v1)*v3 - ...
           u3*(u4*u4)*(v1*v1)*v3 + 2*u1*u2*u4*v1*v2*v3 - ...
           2*u1*u3*u4*v1*v2*v3 - 2*u2*(u4*u4)*v1*v2*v3 + ...
           2*u3*(u4*u4)*v1*v2*v3 + (u1*u1)*u3*(v2*v2)*v3 - ...
           2*(u1*u1)*u4*(v2*v2)*v3 + ...
           2*u1*(u4*u4)*(v2*v2)*v3 - u3*(u4*u4)*(v2*v2)*v3 + ...
           u1*(u2*u2)*v1*(v3*v3) - 2*u1*u2*u4*v1*(v3*v3) + ...
           u1*(u4*u4)*v1*(v3*v3) - (u1*u1)*u2*v2*(v3*v3) + ...
           2*(u1*u1)*u4*v2*(v3*v3) - ...
           2*u1*(u4*u4)*v2*(v3*v3) + u2*(u4*u4)*v2*(v3*v3) + ...
           2*(u2*u2)*u3*(v1*v1)*v4 - ...
           2*u2*(u3*u3)*(v1*v1)*v4 - (u2*u2)*u4*(v1*v1)*v4 + ...
           (u3*u3)*u4*(v1*v1)*v4 - 2*u1*u2*u3*v1*v2*v4 + ...
           2*u1*(u3*u3)*v1*v2*v4 + 2*u2*u3*u4*v1*v2*v4 - ...
           2*(u3*u3)*u4*v1*v2*v4 + (u1*u1)*u4*(v2*v2)*v4 - ...
           2*u1*u3*u4*(v2*v2)*v4 + (u3*u3)*u4*(v2*v2)*v4 - ...
           2*u1*(u2*u2)*v1*v3*v4 + 2*u1*u2*u3*v1*v3*v4 + ...
           2*(u2*u2)*u4*v1*v3*v4 - 2*u2*u3*u4*v1*v3*v4 + ...
           2*(u1*u1)*u2*v2*v3*v4 - 2*(u1*u1)*u3*v2*v3*v4 - ...
           2*u1*u2*u4*v2*v3*v4 + 2*u1*u3*u4*v2*v3*v4 - ...
           (u1*u1)*u4*(v3*v3)*v4 + 2*u1*u2*u4*(v3*v3)*v4 - ...
           (u2*u2)*u4*(v3*v3)*v4 + u1*(u2*u2)*v1*(v4*v4) - ...
           2*(u2*u2)*u3*v1*(v4*v4) - u1*(u3*u3)*v1*(v4*v4) + ...
           2*u2*(u3*u3)*v1*(v4*v4) - (u1*u1)*u2*v2*(v4*v4) + ...
           2*u1*u2*u3*v2*(v4*v4) - u2*(u3*u3)*v2*(v4*v4) + ...
           (u1*u1)*u3*v3*(v4*v4) - 2*u1*u2*u3*v3*(v4*v4) + ...
           (u2*u2)*u3*v3*(v4*v4))) - ...
      (u2*u4*(v1*v1)*v3 - u3*u4*(v1*v1)*v3 - u1*u4*v1*v2*v3 - ...
         u2*u4*v1*v2*v3 + 2*u3*u4*v1*v2*v3 + u1*u4*(v2*v2)*v3 - ...
         u3*u4*(v2*v2)*v3 + u1*u4*v1*(v3*v3) - u2*u4*v1*(v3*v3) - ...
         u1*u4*v2*(v3*v3) + u2*u4*v2*(v3*v3) - u2*u3*(v1*v1)*v4 + ...
         (u3*u3)*(v1*v1)*v4 + u1*u3*v1*v2*v4 + u2*u3*v1*v2*v4 - ...
         2*(u3*u3)*v1*v2*v4 - u1*u3*(v2*v2)*v4 + ...
         (u3*u3)*(v2*v2)*v4 - u1*u3*v1*v3*v4 + u2*u3*v1*v3*v4 + ...
         u1*u3*v2*v3*v4 - u2*u3*v2*v3*v4)/...
       (u2*(u3*u3)*(v1*v1)*v2 - 2*u2*u3*u4*(v1*v1)*v2 + ...
         u2*(u4*u4)*(v1*v1)*v2 - u1*(u3*u3)*v1*(v2*v2) + ...
         2*u1*u3*u4*v1*(v2*v2) - u1*(u4*u4)*v1*(v2*v2) - ...
         (u2*u2)*u3*(v1*v1)*v3 + 2*u2*u3*u4*(v1*v1)*v3 - ...
         u3*(u4*u4)*(v1*v1)*v3 + 2*u1*u2*u4*v1*v2*v3 - ...
         2*u1*u3*u4*v1*v2*v3 - 2*u2*(u4*u4)*v1*v2*v3 + ...
         2*u3*(u4*u4)*v1*v2*v3 + (u1*u1)*u3*(v2*v2)*v3 - ...
         2*(u1*u1)*u4*(v2*v2)*v3 + 2*u1*(u4*u4)*(v2*v2)*v3 - ...
         u3*(u4*u4)*(v2*v2)*v3 + u1*(u2*u2)*v1*(v3*v3) - ...
         2*u1*u2*u4*v1*(v3*v3) + u1*(u4*u4)*v1*(v3*v3) - ...
         (u1*u1)*u2*v2*(v3*v3) + 2*(u1*u1)*u4*v2*(v3*v3) - ...
         2*u1*(u4*u4)*v2*(v3*v3) + u2*(u4*u4)*v2*(v3*v3) + ...
         2*(u2*u2)*u3*(v1*v1)*v4 - 2*u2*(u3*u3)*(v1*v1)*v4 - ...
         (u2*u2)*u4*(v1*v1)*v4 + (u3*u3)*u4*(v1*v1)*v4 - ...
         2*u1*u2*u3*v1*v2*v4 + 2*u1*(u3*u3)*v1*v2*v4 + ...
         2*u2*u3*u4*v1*v2*v4 - 2*(u3*u3)*u4*v1*v2*v4 + ...
         (u1*u1)*u4*(v2*v2)*v4 - 2*u1*u3*u4*(v2*v2)*v4 + ...
         (u3*u3)*u4*(v2*v2)*v4 - 2*u1*(u2*u2)*v1*v3*v4 + ...
         2*u1*u2*u3*v1*v3*v4 + 2*(u2*u2)*u4*v1*v3*v4 - ...
         2*u2*u3*u4*v1*v3*v4 + 2*(u1*u1)*u2*v2*v3*v4 - ...
         2*(u1*u1)*u3*v2*v3*v4 - 2*u1*u2*u4*v2*v3*v4 + ...
         2*u1*u3*u4*v2*v3*v4 - (u1*u1)*u4*(v3*v3)*v4 + ...
         2*u1*u2*u4*(v3*v3)*v4 - (u2*u2)*u4*(v3*v3)*v4 + ...
         u1*(u2*u2)*v1*(v4*v4) - 2*(u2*u2)*u3*v1*(v4*v4) - ...
         u1*(u3*u3)*v1*(v4*v4) + 2*u2*(u3*u3)*v1*(v4*v4) - ...
         (u1*u1)*u2*v2*(v4*v4) + 2*u1*u2*u3*v2*(v4*v4) - ...
         u2*(u3*u3)*v2*(v4*v4) + (u1*u1)*u3*v3*(v4*v4) - ...
         2*u1*u2*u3*v3*(v4*v4) + (u2*u2)*u3*v3*(v4*v4)) - ...
      (-(u3*u4*(v1*v1)*v2) + (u4*u4)*(v1*v1)*v2 + ...
         u3*u4*v1*(v2*v2) - (u4*u4)*v1*(v2*v2) + u1*u4*v1*v2*v3 - ...
         (u4*u4)*v1*v2*v3 - u1*u4*(v2*v2)*v3 + ...
         (u4*u4)*(v2*v2)*v3 + u2*u3*(v1*v1)*v4 - ...
         u2*u4*(v1*v1)*v4 - u2*u3*v1*v2*v4 - u1*u4*v1*v2*v4 + ...
         u2*u4*v1*v2*v4 + u3*u4*v1*v2*v4 + u1*u4*(v2*v2)*v4 - ...
         u3*u4*(v2*v2)*v4 - u1*u2*v1*v3*v4 + u2*u4*v1*v3*v4 + ...
         u1*u2*v2*v3*v4 - u2*u4*v2*v3*v4 + u1*u2*v1*(v4*v4) - ...
         u2*u3*v1*(v4*v4) - u1*u2*v2*(v4*v4) + u2*u3*v2*(v4*v4))/...
       (u2*(u3*u3)*(v1*v1)*v2 - 2*u2*u3*u4*(v1*v1)*v2 + ...
         u2*(u4*u4)*(v1*v1)*v2 - u1*(u3*u3)*v1*(v2*v2) + ...
         2*u1*u3*u4*v1*(v2*v2) - u1*(u4*u4)*v1*(v2*v2) - ...
         (u2*u2)*u3*(v1*v1)*v3 + 2*u2*u3*u4*(v1*v1)*v3 - ...
         u3*(u4*u4)*(v1*v1)*v3 + 2*u1*u2*u4*v1*v2*v3 - ...
         2*u1*u3*u4*v1*v2*v3 - 2*u2*(u4*u4)*v1*v2*v3 + ...
         2*u3*(u4*u4)*v1*v2*v3 + (u1*u1)*u3*(v2*v2)*v3 - ...
         2*(u1*u1)*u4*(v2*v2)*v3 + 2*u1*(u4*u4)*(v2*v2)*v3 - ...
         u3*(u4*u4)*(v2*v2)*v3 + u1*(u2*u2)*v1*(v3*v3) - ...
         2*u1*u2*u4*v1*(v3*v3) + u1*(u4*u4)*v1*(v3*v3) - ...
         (u1*u1)*u2*v2*(v3*v3) + 2*(u1*u1)*u4*v2*(v3*v3) - ...
         2*u1*(u4*u4)*v2*(v3*v3) + u2*(u4*u4)*v2*(v3*v3) + ...
         2*(u2*u2)*u3*(v1*v1)*v4 - 2*u2*(u3*u3)*(v1*v1)*v4 - ...
         (u2*u2)*u4*(v1*v1)*v4 + (u3*u3)*u4*(v1*v1)*v4 - ...
         2*u1*u2*u3*v1*v2*v4 + 2*u1*(u3*u3)*v1*v2*v4 + ...
         2*u2*u3*u4*v1*v2*v4 - 2*(u3*u3)*u4*v1*v2*v4 + ...
         (u1*u1)*u4*(v2*v2)*v4 - 2*u1*u3*u4*(v2*v2)*v4 + ...
         (u3*u3)*u4*(v2*v2)*v4 - 2*u1*(u2*u2)*v1*v3*v4 + ...
         2*u1*u2*u3*v1*v3*v4 + 2*(u2*u2)*u4*v1*v3*v4 - ...
         2*u2*u3*u4*v1*v3*v4 + 2*(u1*u1)*u2*v2*v3*v4 - ...
         2*(u1*u1)*u3*v2*v3*v4 - 2*u1*u2*u4*v2*v3*v4 + ...
         2*u1*u3*u4*v2*v3*v4 - (u1*u1)*u4*(v3*v3)*v4 + ...
         2*u1*u2*u4*(v3*v3)*v4 - (u2*u2)*u4*(v3*v3)*v4 + ...
         u1*(u2*u2)*v1*(v4*v4) - 2*(u2*u2)*u3*v1*(v4*v4) - ...
         u1*(u3*u3)*v1*(v4*v4) + 2*u2*(u3*u3)*v1*(v4*v4) - ...
         (u1*u1)*u2*v2*(v4*v4) + 2*u1*u2*u3*v2*(v4*v4) - ...
         u2*(u3*u3)*v2*(v4*v4) + (u1*u1)*u3*v3*(v4*v4) - ...
         2*u1*u2*u3*v3*(v4*v4) + (u2*u2)*u3*v3*(v4*v4)) - ...
      (u3*u4*(v1*v1)*v3 - (u4*u4)*(v1*v1)*v3 - u3*u4*v1*v2*v3 + ...
         (u4*u4)*v1*v2*v3 - u1*u4*v1*(v3*v3) + ...
         (u4*u4)*v1*(v3*v3) + u1*u4*v2*(v3*v3) - ...
         (u4*u4)*v2*(v3*v3) - (u3*u3)*(v1*v1)*v4 + ...
         u3*u4*(v1*v1)*v4 + (u3*u3)*v1*v2*v4 - u3*u4*v1*v2*v4 + ...
         u1*u3*v1*v3*v4 + u1*u4*v1*v3*v4 - 2*u3*u4*v1*v3*v4 - ...
         u1*u3*v2*v3*v4 - u1*u4*v2*v3*v4 + 2*u3*u4*v2*v3*v4 - ...
         u1*u3*v1*(v4*v4) + (u3*u3)*v1*(v4*v4) + ...
         u1*u3*v2*(v4*v4) - (u3*u3)*v2*(v4*v4))/...
       (u2*(u3*u3)*(v1*v1)*v2 - 2*u2*u3*u4*(v1*v1)*v2 + ...
         u2*(u4*u4)*(v1*v1)*v2 - u1*(u3*u3)*v1*(v2*v2) + ...
         2*u1*u3*u4*v1*(v2*v2) - u1*(u4*u4)*v1*(v2*v2) - ...
         (u2*u2)*u3*(v1*v1)*v3 + 2*u2*u3*u4*(v1*v1)*v3 - ...
         u3*(u4*u4)*(v1*v1)*v3 + 2*u1*u2*u4*v1*v2*v3 - ...
         2*u1*u3*u4*v1*v2*v3 - 2*u2*(u4*u4)*v1*v2*v3 + ...
         2*u3*(u4*u4)*v1*v2*v3 + (u1*u1)*u3*(v2*v2)*v3 - ...
         2*(u1*u1)*u4*(v2*v2)*v3 + 2*u1*(u4*u4)*(v2*v2)*v3 - ...
         u3*(u4*u4)*(v2*v2)*v3 + u1*(u2*u2)*v1*(v3*v3) - ...
         2*u1*u2*u4*v1*(v3*v3) + u1*(u4*u4)*v1*(v3*v3) - ...
         (u1*u1)*u2*v2*(v3*v3) + 2*(u1*u1)*u4*v2*(v3*v3) - ...
         2*u1*(u4*u4)*v2*(v3*v3) + u2*(u4*u4)*v2*(v3*v3) + ...
         2*(u2*u2)*u3*(v1*v1)*v4 - 2*u2*(u3*u3)*(v1*v1)*v4 - ...
         (u2*u2)*u4*(v1*v1)*v4 + (u3*u3)*u4*(v1*v1)*v4 - ...
         2*u1*u2*u3*v1*v2*v4 + 2*u1*(u3*u3)*v1*v2*v4 + ...
         2*u2*u3*u4*v1*v2*v4 - 2*(u3*u3)*u4*v1*v2*v4 + ...
         (u1*u1)*u4*(v2*v2)*v4 - 2*u1*u3*u4*(v2*v2)*v4 + ...
         (u3*u3)*u4*(v2*v2)*v4 - 2*u1*(u2*u2)*v1*v3*v4 + ...
         2*u1*u2*u3*v1*v3*v4 + 2*(u2*u2)*u4*v1*v3*v4 - ...
         2*u2*u3*u4*v1*v3*v4 + 2*(u1*u1)*u2*v2*v3*v4 - ...
         2*(u1*u1)*u3*v2*v3*v4 - 2*u1*u2*u4*v2*v3*v4 + ...
         2*u1*u3*u4*v2*v3*v4 - (u1*u1)*u4*(v3*v3)*v4 + ...
         2*u1*u2*u4*(v3*v3)*v4 - (u2*u2)*u4*(v3*v3)*v4 + ...
         u1*(u2*u2)*v1*(v4*v4) - 2*(u2*u2)*u3*v1*(v4*v4) - ...
         u1*(u3*u3)*v1*(v4*v4) + 2*u2*(u3*u3)*v1*(v4*v4) - ...
         (u1*u1)*u2*v2*(v4*v4) + 2*u1*u2*u3*v2*(v4*v4) - ...
         u2*(u3*u3)*v2*(v4*v4) + (u1*u1)*u3*v3*(v4*v4) - ...
         2*u1*u2*u3*v3*(v4*v4) + (u2*u2)*u3*v3*(v4*v4));

      b_inv = -((-(u1*(u3*u3)*v1*v2) + u2*(u3*u3)*v1*v2 + ...
           u1*u3*u4*v1*v2 - u2*u3*u4*v1*v2 + u1*u2*u3*v1*v3 - ...
           (u2*u2)*u3*v1*v3 - u1*u3*u4*v1*v3 + u2*u3*u4*v1*v3 + ...
           (u1*u1)*u3*v2*v3 - u1*u2*u3*v2*v3 - (u1*u1)*u4*v2*v3 + ...
           u1*u2*u4*v2*v3 - (u1*u1)*u2*(v3*v3) + ...
           u1*(u2*u2)*(v3*v3) + (u1*u1)*u4*(v3*v3) - ...
           u1*u2*u4*(v3*v3) - u1*u2*u3*v1*v4 + (u2*u2)*u3*v1*v4 + ...
           u1*(u3*u3)*v1*v4 - u2*(u3*u3)*v1*v4 + ...
           (u1*u1)*u2*v3*v4 - u1*(u2*u2)*v3*v4 - ...
           (u1*u1)*u3*v3*v4 + u1*u2*u3*v3*v4)/...
         (u2*(u3*u3)*(v1*v1)*v2 - 2*u2*u3*u4*(v1*v1)*v2 + ...
           u2*(u4*u4)*(v1*v1)*v2 - u1*(u3*u3)*v1*(v2*v2) + ...
           2*u1*u3*u4*v1*(v2*v2) - u1*(u4*u4)*v1*(v2*v2) - ...
           (u2*u2)*u3*(v1*v1)*v3 + 2*u2*u3*u4*(v1*v1)*v3 - ...
           u3*(u4*u4)*(v1*v1)*v3 + 2*u1*u2*u4*v1*v2*v3 - ...
           2*u1*u3*u4*v1*v2*v3 - 2*u2*(u4*u4)*v1*v2*v3 + ...
           2*u3*(u4*u4)*v1*v2*v3 + (u1*u1)*u3*(v2*v2)*v3 - ...
           2*(u1*u1)*u4*(v2*v2)*v3 + ...
           2*u1*(u4*u4)*(v2*v2)*v3 - u3*(u4*u4)*(v2*v2)*v3 + ...
           u1*(u2*u2)*v1*(v3*v3) - 2*u1*u2*u4*v1*(v3*v3) + ...
           u1*(u4*u4)*v1*(v3*v3) - (u1*u1)*u2*v2*(v3*v3) + ...
           2*(u1*u1)*u4*v2*(v3*v3) - ...
           2*u1*(u4*u4)*v2*(v3*v3) + u2*(u4*u4)*v2*(v3*v3) + ...
           2*(u2*u2)*u3*(v1*v1)*v4 - ...
           2*u2*(u3*u3)*(v1*v1)*v4 - (u2*u2)*u4*(v1*v1)*v4 + ...
           (u3*u3)*u4*(v1*v1)*v4 - 2*u1*u2*u3*v1*v2*v4 + ...
           2*u1*(u3*u3)*v1*v2*v4 + 2*u2*u3*u4*v1*v2*v4 - ...
           2*(u3*u3)*u4*v1*v2*v4 + (u1*u1)*u4*(v2*v2)*v4 - ...
           2*u1*u3*u4*(v2*v2)*v4 + (u3*u3)*u4*(v2*v2)*v4 - ...
           2*u1*(u2*u2)*v1*v3*v4 + 2*u1*u2*u3*v1*v3*v4 + ...
           2*(u2*u2)*u4*v1*v3*v4 - 2*u2*u3*u4*v1*v3*v4 + ...
           2*(u1*u1)*u2*v2*v3*v4 - 2*(u1*u1)*u3*v2*v3*v4 - ...
           2*u1*u2*u4*v2*v3*v4 + 2*u1*u3*u4*v2*v3*v4 - ...
           (u1*u1)*u4*(v3*v3)*v4 + 2*u1*u2*u4*(v3*v3)*v4 - ...
           (u2*u2)*u4*(v3*v3)*v4 + u1*(u2*u2)*v1*(v4*v4) - ...
           2*(u2*u2)*u3*v1*(v4*v4) - u1*(u3*u3)*v1*(v4*v4) + ...
           2*u2*(u3*u3)*v1*(v4*v4) - (u1*u1)*u2*v2*(v4*v4) + ...
           2*u1*u2*u3*v2*(v4*v4) - u2*(u3*u3)*v2*(v4*v4) + ...
           (u1*u1)*u3*v3*(v4*v4) - 2*u1*u2*u3*v3*(v4*v4) + ...
           (u2*u2)*u3*v3*(v4*v4))) - ...
      (-(u1*u2*u4*v1*v3) + (u2*u2)*u4*v1*v3 + u1*u3*u4*v1*v3 - ...
         u2*u3*u4*v1*v3 + (u1*u1)*u4*v2*v3 - u1*u2*u4*v2*v3 - ...
         u1*u3*u4*v2*v3 + u2*u3*u4*v2*v3 - (u1*u1)*u4*(v3*v3) + ...
         2*u1*u2*u4*(v3*v3) - (u2*u2)*u4*(v3*v3) + ...
         u1*u2*u3*v1*v4 - (u2*u2)*u3*v1*v4 - u1*(u3*u3)*v1*v4 + ...
         u2*(u3*u3)*v1*v4 - (u1*u1)*u3*v2*v4 + u1*u2*u3*v2*v4 + ...
         u1*(u3*u3)*v2*v4 - u2*(u3*u3)*v2*v4 + (u1*u1)*u3*v3*v4 - ...
         2*u1*u2*u3*v3*v4 + (u2*u2)*u3*v3*v4)/...
       (u2*(u3*u3)*(v1*v1)*v2 - 2*u2*u3*u4*(v1*v1)*v2 + ...
         u2*(u4*u4)*(v1*v1)*v2 - u1*(u3*u3)*v1*(v2*v2) + ...
         2*u1*u3*u4*v1*(v2*v2) - u1*(u4*u4)*v1*(v2*v2) - ...
         (u2*u2)*u3*(v1*v1)*v3 + 2*u2*u3*u4*(v1*v1)*v3 - ...
         u3*(u4*u4)*(v1*v1)*v3 + 2*u1*u2*u4*v1*v2*v3 - ...
         2*u1*u3*u4*v1*v2*v3 - 2*u2*(u4*u4)*v1*v2*v3 + ...
         2*u3*(u4*u4)*v1*v2*v3 + (u1*u1)*u3*(v2*v2)*v3 - ...
         2*(u1*u1)*u4*(v2*v2)*v3 + 2*u1*(u4*u4)*(v2*v2)*v3 - ...
         u3*(u4*u4)*(v2*v2)*v3 + u1*(u2*u2)*v1*(v3*v3) - ...
         2*u1*u2*u4*v1*(v3*v3) + u1*(u4*u4)*v1*(v3*v3) - ...
         (u1*u1)*u2*v2*(v3*v3) + 2*(u1*u1)*u4*v2*(v3*v3) - ...
         2*u1*(u4*u4)*v2*(v3*v3) + u2*(u4*u4)*v2*(v3*v3) + ...
         2*(u2*u2)*u3*(v1*v1)*v4 - 2*u2*(u3*u3)*(v1*v1)*v4 - ...
         (u2*u2)*u4*(v1*v1)*v4 + (u3*u3)*u4*(v1*v1)*v4 - ...
         2*u1*u2*u3*v1*v2*v4 + 2*u1*(u3*u3)*v1*v2*v4 + ...
         2*u2*u3*u4*v1*v2*v4 - 2*(u3*u3)*u4*v1*v2*v4 + ...
         (u1*u1)*u4*(v2*v2)*v4 - 2*u1*u3*u4*(v2*v2)*v4 + ...
         (u3*u3)*u4*(v2*v2)*v4 - 2*u1*(u2*u2)*v1*v3*v4 + ...
         2*u1*u2*u3*v1*v3*v4 + 2*(u2*u2)*u4*v1*v3*v4 - ...
         2*u2*u3*u4*v1*v3*v4 + 2*(u1*u1)*u2*v2*v3*v4 - ...
         2*(u1*u1)*u3*v2*v3*v4 - 2*u1*u2*u4*v2*v3*v4 + ...
         2*u1*u3*u4*v2*v3*v4 - (u1*u1)*u4*(v3*v3)*v4 + ...
         2*u1*u2*u4*(v3*v3)*v4 - (u2*u2)*u4*(v3*v3)*v4 + ...
         u1*(u2*u2)*v1*(v4*v4) - 2*(u2*u2)*u3*v1*(v4*v4) - ...
         u1*(u3*u3)*v1*(v4*v4) + 2*u2*(u3*u3)*v1*(v4*v4) - ...
         (u1*u1)*u2*v2*(v4*v4) + 2*u1*u2*u3*v2*(v4*v4) - ...
         u2*(u3*u3)*v2*(v4*v4) + (u1*u1)*u3*v3*(v4*v4) - ...
         2*u1*u2*u3*v3*(v4*v4) + (u2*u2)*u3*v3*(v4*v4)) - ...
      (u1*u3*u4*v1*v2 - u2*u3*u4*v1*v2 - u1*(u4*u4)*v1*v2 + ...
         u2*(u4*u4)*v1*v2 - (u1*u1)*u4*v2*v3 + u1*u2*u4*v2*v3 + ...
         u1*(u4*u4)*v2*v3 - u2*(u4*u4)*v2*v3 - u1*u2*u3*v1*v4 + ...
         (u2*u2)*u3*v1*v4 + u1*u2*u4*v1*v4 - (u2*u2)*u4*v1*v4 + ...
         (u1*u1)*u4*v2*v4 - u1*u2*u4*v2*v4 - u1*u3*u4*v2*v4 + ...
         u2*u3*u4*v2*v4 + (u1*u1)*u2*v3*v4 - u1*(u2*u2)*v3*v4 - ...
         u1*u2*u4*v3*v4 + (u2*u2)*u4*v3*v4 - (u1*u1)*u2*(v4*v4) + ...
         u1*(u2*u2)*(v4*v4) + u1*u2*u3*(v4*v4) - ...
         (u2*u2)*u3*(v4*v4))/...
       (u2*(u3*u3)*(v1*v1)*v2 - 2*u2*u3*u4*(v1*v1)*v2 + ...
         u2*(u4*u4)*(v1*v1)*v2 - u1*(u3*u3)*v1*(v2*v2) + ...
         2*u1*u3*u4*v1*(v2*v2) - u1*(u4*u4)*v1*(v2*v2) - ...
         (u2*u2)*u3*(v1*v1)*v3 + 2*u2*u3*u4*(v1*v1)*v3 - ...
         u3*(u4*u4)*(v1*v1)*v3 + 2*u1*u2*u4*v1*v2*v3 - ...
         2*u1*u3*u4*v1*v2*v3 - 2*u2*(u4*u4)*v1*v2*v3 + ...
         2*u3*(u4*u4)*v1*v2*v3 + (u1*u1)*u3*(v2*v2)*v3 - ...
         2*(u1*u1)*u4*(v2*v2)*v3 + 2*u1*(u4*u4)*(v2*v2)*v3 - ...
         u3*(u4*u4)*(v2*v2)*v3 + u1*(u2*u2)*v1*(v3*v3) - ...
         2*u1*u2*u4*v1*(v3*v3) + u1*(u4*u4)*v1*(v3*v3) - ...
         (u1*u1)*u2*v2*(v3*v3) + 2*(u1*u1)*u4*v2*(v3*v3) - ...
         2*u1*(u4*u4)*v2*(v3*v3) + u2*(u4*u4)*v2*(v3*v3) + ...
         2*(u2*u2)*u3*(v1*v1)*v4 - 2*u2*(u3*u3)*(v1*v1)*v4 - ...
         (u2*u2)*u4*(v1*v1)*v4 + (u3*u3)*u4*(v1*v1)*v4 - ...
         2*u1*u2*u3*v1*v2*v4 + 2*u1*(u3*u3)*v1*v2*v4 + ...
         2*u2*u3*u4*v1*v2*v4 - 2*(u3*u3)*u4*v1*v2*v4 + ...
         (u1*u1)*u4*(v2*v2)*v4 - 2*u1*u3*u4*(v2*v2)*v4 + ...
         (u3*u3)*u4*(v2*v2)*v4 - 2*u1*(u2*u2)*v1*v3*v4 + ...
         2*u1*u2*u3*v1*v3*v4 + 2*(u2*u2)*u4*v1*v3*v4 - ...
         2*u2*u3*u4*v1*v3*v4 + 2*(u1*u1)*u2*v2*v3*v4 - ...
         2*(u1*u1)*u3*v2*v3*v4 - 2*u1*u2*u4*v2*v3*v4 + ...
         2*u1*u3*u4*v2*v3*v4 - (u1*u1)*u4*(v3*v3)*v4 + ...
         2*u1*u2*u4*(v3*v3)*v4 - (u2*u2)*u4*(v3*v3)*v4 + ...
         u1*(u2*u2)*v1*(v4*v4) - 2*(u2*u2)*u3*v1*(v4*v4) - ...
         u1*(u3*u3)*v1*(v4*v4) + 2*u2*(u3*u3)*v1*(v4*v4) - ...
         (u1*u1)*u2*v2*(v4*v4) + 2*u1*u2*u3*v2*(v4*v4) - ...
         u2*(u3*u3)*v2*(v4*v4) + (u1*u1)*u3*v3*(v4*v4) - ...
         2*u1*u2*u3*v3*(v4*v4) + (u2*u2)*u3*v3*(v4*v4)) - ...
      (-(u1*u3*u4*v1*v3) + u2*u3*u4*v1*v3 + u1*(u4*u4)*v1*v3 - ...
         u2*(u4*u4)*v1*v3 + (u1*u1)*u4*(v3*v3) - ...
         u1*u2*u4*(v3*v3) - u1*(u4*u4)*(v3*v3) + ...
         u2*(u4*u4)*(v3*v3) + u1*(u3*u3)*v1*v4 - ...
         u2*(u3*u3)*v1*v4 - u1*u3*u4*v1*v4 + u2*u3*u4*v1*v4 - ...
         (u1*u1)*u3*v3*v4 + u1*u2*u3*v3*v4 - (u1*u1)*u4*v3*v4 + ...
         u1*u2*u4*v3*v4 + 2*u1*u3*u4*v3*v4 - 2*u2*u3*u4*v3*v4 + ...
         (u1*u1)*u3*(v4*v4) - u1*u2*u3*(v4*v4) - ...
         u1*(u3*u3)*(v4*v4) + u2*(u3*u3)*(v4*v4))/...
       (u2*(u3*u3)*(v1*v1)*v2 - 2*u2*u3*u4*(v1*v1)*v2 + ...
         u2*(u4*u4)*(v1*v1)*v2 - u1*(u3*u3)*v1*(v2*v2) + ...
         2*u1*u3*u4*v1*(v2*v2) - u1*(u4*u4)*v1*(v2*v2) - ...
         (u2*u2)*u3*(v1*v1)*v3 + 2*u2*u3*u4*(v1*v1)*v3 - ...
         u3*(u4*u4)*(v1*v1)*v3 + 2*u1*u2*u4*v1*v2*v3 - ...
         2*u1*u3*u4*v1*v2*v3 - 2*u2*(u4*u4)*v1*v2*v3 + ...
         2*u3*(u4*u4)*v1*v2*v3 + (u1*u1)*u3*(v2*v2)*v3 - ...
         2*(u1*u1)*u4*(v2*v2)*v3 + 2*u1*(u4*u4)*(v2*v2)*v3 - ...
         u3*(u4*u4)*(v2*v2)*v3 + u1*(u2*u2)*v1*(v3*v3) - ...
         2*u1*u2*u4*v1*(v3*v3) + u1*(u4*u4)*v1*(v3*v3) - ...
         (u1*u1)*u2*v2*(v3*v3) + 2*(u1*u1)*u4*v2*(v3*v3) - ...
         2*u1*(u4*u4)*v2*(v3*v3) + u2*(u4*u4)*v2*(v3*v3) + ...
         2*(u2*u2)*u3*(v1*v1)*v4 - 2*u2*(u3*u3)*(v1*v1)*v4 - ...
         (u2*u2)*u4*(v1*v1)*v4 + (u3*u3)*u4*(v1*v1)*v4 - ...
         2*u1*u2*u3*v1*v2*v4 + 2*u1*(u3*u3)*v1*v2*v4 + ...
         2*u2*u3*u4*v1*v2*v4 - 2*(u3*u3)*u4*v1*v2*v4 + ...
         (u1*u1)*u4*(v2*v2)*v4 - 2*u1*u3*u4*(v2*v2)*v4 + ...
         (u3*u3)*u4*(v2*v2)*v4 - 2*u1*(u2*u2)*v1*v3*v4 + ...
         2*u1*u2*u3*v1*v3*v4 + 2*(u2*u2)*u4*v1*v3*v4 - ...
         2*u2*u3*u4*v1*v3*v4 + 2*(u1*u1)*u2*v2*v3*v4 - ...
         2*(u1*u1)*u3*v2*v3*v4 - 2*u1*u2*u4*v2*v3*v4 + ...
         2*u1*u3*u4*v2*v3*v4 - (u1*u1)*u4*(v3*v3)*v4 + ...
         2*u1*u2*u4*(v3*v3)*v4 - (u2*u2)*u4*(v3*v3)*v4 + ...
         u1*(u2*u2)*v1*(v4*v4) - 2*(u2*u2)*u3*v1*(v4*v4) - ...
         u1*(u3*u3)*v1*(v4*v4) + 2*u2*(u3*u3)*v1*(v4*v4) - ...
         (u1*u1)*u2*v2*(v4*v4) + 2*u1*u2*u3*v2*(v4*v4) - ...
         u2*(u3*u3)*v2*(v4*v4) + (u1*u1)*u3*v3*(v4*v4) - ...
         2*u1*u2*u3*v3*(v4*v4) + (u2*u2)*u3*v3*(v4*v4));

      c_inv = -((-(u2*(u3*u3)*(v1*v1)*v2) + u2*u3*u4*(v1*v1)*v2 + ...
           u1*(u3*u3)*v1*(v2*v2) - u1*u3*u4*v1*(v2*v2) + ...
           (u2*u2)*u3*(v1*v1)*v3 - u2*u3*u4*(v1*v1)*v3 - ...
           u1*u2*u4*v1*v2*v3 + u1*u3*u4*v1*v2*v3 - ...
           (u1*u1)*u3*(v2*v2)*v3 + (u1*u1)*u4*(v2*v2)*v3 - ...
           u1*(u2*u2)*v1*(v3*v3) + u1*u2*u4*v1*(v3*v3) + ...
           (u1*u1)*u2*v2*(v3*v3) - (u1*u1)*u4*v2*(v3*v3) - ...
           (u2*u2)*u3*(v1*v1)*v4 + u2*(u3*u3)*(v1*v1)*v4 + ...
           u1*u2*u3*v1*v2*v4 - u1*(u3*u3)*v1*v2*v4 + ...
           u1*(u2*u2)*v1*v3*v4 - u1*u2*u3*v1*v3*v4 - ...
           (u1*u1)*u2*v2*v3*v4 + (u1*u1)*u3*v2*v3*v4)/...
         (u2*(u3*u3)*(v1*v1)*v2 - 2*u2*u3*u4*(v1*v1)*v2 + ...
           u2*(u4*u4)*(v1*v1)*v2 - u1*(u3*u3)*v1*(v2*v2) + ...
           2*u1*u3*u4*v1*(v2*v2) - u1*(u4*u4)*v1*(v2*v2) - ...
           (u2*u2)*u3*(v1*v1)*v3 + 2*u2*u3*u4*(v1*v1)*v3 - ...
           u3*(u4*u4)*(v1*v1)*v3 + 2*u1*u2*u4*v1*v2*v3 - ...
           2*u1*u3*u4*v1*v2*v3 - 2*u2*(u4*u4)*v1*v2*v3 + ...
           2*u3*(u4*u4)*v1*v2*v3 + (u1*u1)*u3*(v2*v2)*v3 - ...
           2*(u1*u1)*u4*(v2*v2)*v3 + ...
           2*u1*(u4*u4)*(v2*v2)*v3 - u3*(u4*u4)*(v2*v2)*v3 + ...
           u1*(u2*u2)*v1*(v3*v3) - 2*u1*u2*u4*v1*(v3*v3) + ...
           u1*(u4*u4)*v1*(v3*v3) - (u1*u1)*u2*v2*(v3*v3) + ...
           2*(u1*u1)*u4*v2*(v3*v3) - ...
           2*u1*(u4*u4)*v2*(v3*v3) + u2*(u4*u4)*v2*(v3*v3) + ...
           2*(u2*u2)*u3*(v1*v1)*v4 - ...
           2*u2*(u3*u3)*(v1*v1)*v4 - (u2*u2)*u4*(v1*v1)*v4 + ...
           (u3*u3)*u4*(v1*v1)*v4 - 2*u1*u2*u3*v1*v2*v4 + ...
           2*u1*(u3*u3)*v1*v2*v4 + 2*u2*u3*u4*v1*v2*v4 - ...
           2*(u3*u3)*u4*v1*v2*v4 + (u1*u1)*u4*(v2*v2)*v4 - ...
           2*u1*u3*u4*(v2*v2)*v4 + (u3*u3)*u4*(v2*v2)*v4 - ...
           2*u1*(u2*u2)*v1*v3*v4 + 2*u1*u2*u3*v1*v3*v4 + ...
           2*(u2*u2)*u4*v1*v3*v4 - 2*u2*u3*u4*v1*v3*v4 + ...
           2*(u1*u1)*u2*v2*v3*v4 - 2*(u1*u1)*u3*v2*v3*v4 - ...
           2*u1*u2*u4*v2*v3*v4 + 2*u1*u3*u4*v2*v3*v4 - ...
           (u1*u1)*u4*(v3*v3)*v4 + 2*u1*u2*u4*(v3*v3)*v4 - ...
           (u2*u2)*u4*(v3*v3)*v4 + u1*(u2*u2)*v1*(v4*v4) - ...
           2*(u2*u2)*u3*v1*(v4*v4) - u1*(u3*u3)*v1*(v4*v4) + ...
           2*u2*(u3*u3)*v1*(v4*v4) - (u1*u1)*u2*v2*(v4*v4) + ...
           2*u1*u2*u3*v2*(v4*v4) - u2*(u3*u3)*v2*(v4*v4) + ...
           (u1*u1)*u3*v3*(v4*v4) - 2*u1*u2*u3*v3*(v4*v4) + ...
           (u2*u2)*u3*v3*(v4*v4))) - ...
      (-((u2*u2)*u4*(v1*v1)*v3) + u2*u3*u4*(v1*v1)*v3 + ...
         2*u1*u2*u4*v1*v2*v3 - u1*u3*u4*v1*v2*v3 - u2*u3*u4*v1*v2*v3 - ...
         (u1*u1)*u4*(v2*v2)*v3 + u1*u3*u4*(v2*v2)*v3 - ...
         u1*u2*u4*v1*(v3*v3) + (u2*u2)*u4*v1*(v3*v3) + ...
         (u1*u1)*u4*v2*(v3*v3) - u1*u2*u4*v2*(v3*v3) + ...
         (u2*u2)*u3*(v1*v1)*v4 - u2*(u3*u3)*(v1*v1)*v4 - ...
         2*u1*u2*u3*v1*v2*v4 + u1*(u3*u3)*v1*v2*v4 + ...
         u2*(u3*u3)*v1*v2*v4 + (u1*u1)*u3*(v2*v2)*v4 - ...
         u1*(u3*u3)*(v2*v2)*v4 + u1*u2*u3*v1*v3*v4 - ...
         (u2*u2)*u3*v1*v3*v4 - (u1*u1)*u3*v2*v3*v4 + u1*u2*u3*v2*v3*v4...
         )/(u2*(u3*u3)*(v1*v1)*v2 - 2*u2*u3*u4*(v1*v1)*v2 + ...
         u2*(u4*u4)*(v1*v1)*v2 - u1*(u3*u3)*v1*(v2*v2) + ...
         2*u1*u3*u4*v1*(v2*v2) - u1*(u4*u4)*v1*(v2*v2) - ...
         (u2*u2)*u3*(v1*v1)*v3 + 2*u2*u3*u4*(v1*v1)*v3 - ...
         u3*(u4*u4)*(v1*v1)*v3 + 2*u1*u2*u4*v1*v2*v3 - ...
         2*u1*u3*u4*v1*v2*v3 - 2*u2*(u4*u4)*v1*v2*v3 + ...
         2*u3*(u4*u4)*v1*v2*v3 + (u1*u1)*u3*(v2*v2)*v3 - ...
         2*(u1*u1)*u4*(v2*v2)*v3 + 2*u1*(u4*u4)*(v2*v2)*v3 - ...
         u3*(u4*u4)*(v2*v2)*v3 + u1*(u2*u2)*v1*(v3*v3) - ...
         2*u1*u2*u4*v1*(v3*v3) + u1*(u4*u4)*v1*(v3*v3) - ...
         (u1*u1)*u2*v2*(v3*v3) + 2*(u1*u1)*u4*v2*(v3*v3) - ...
         2*u1*(u4*u4)*v2*(v3*v3) + u2*(u4*u4)*v2*(v3*v3) + ...
         2*(u2*u2)*u3*(v1*v1)*v4 - 2*u2*(u3*u3)*(v1*v1)*v4 - ...
         (u2*u2)*u4*(v1*v1)*v4 + (u3*u3)*u4*(v1*v1)*v4 - ...
         2*u1*u2*u3*v1*v2*v4 + 2*u1*(u3*u3)*v1*v2*v4 + ...
         2*u2*u3*u4*v1*v2*v4 - 2*(u3*u3)*u4*v1*v2*v4 + ...
         (u1*u1)*u4*(v2*v2)*v4 - 2*u1*u3*u4*(v2*v2)*v4 + ...
         (u3*u3)*u4*(v2*v2)*v4 - 2*u1*(u2*u2)*v1*v3*v4 + ...
         2*u1*u2*u3*v1*v3*v4 + 2*(u2*u2)*u4*v1*v3*v4 - ...
         2*u2*u3*u4*v1*v3*v4 + 2*(u1*u1)*u2*v2*v3*v4 - ...
         2*(u1*u1)*u3*v2*v3*v4 - 2*u1*u2*u4*v2*v3*v4 + ...
         2*u1*u3*u4*v2*v3*v4 - (u1*u1)*u4*(v3*v3)*v4 + ...
         2*u1*u2*u4*(v3*v3)*v4 - (u2*u2)*u4*(v3*v3)*v4 + ...
         u1*(u2*u2)*v1*(v4*v4) - 2*(u2*u2)*u3*v1*(v4*v4) - ...
         u1*(u3*u3)*v1*(v4*v4) + 2*u2*(u3*u3)*v1*(v4*v4) - ...
         (u1*u1)*u2*v2*(v4*v4) + 2*u1*u2*u3*v2*(v4*v4) - ...
         u2*(u3*u3)*v2*(v4*v4) + (u1*u1)*u3*v3*(v4*v4) - ...
         2*u1*u2*u3*v3*(v4*v4) + (u2*u2)*u3*v3*(v4*v4)) - ...
      (u2*u3*u4*(v1*v1)*v2 - u2*(u4*u4)*(v1*v1)*v2 - ...
         u1*u3*u4*v1*(v2*v2) + u1*(u4*u4)*v1*(v2*v2) - ...
         u1*u2*u4*v1*v2*v3 + u2*(u4*u4)*v1*v2*v3 + ...
         (u1*u1)*u4*(v2*v2)*v3 - u1*(u4*u4)*(v2*v2)*v3 - ...
         (u2*u2)*u3*(v1*v1)*v4 + (u2*u2)*u4*(v1*v1)*v4 + ...
         u1*u2*u3*v1*v2*v4 - u2*u3*u4*v1*v2*v4 - ...
         (u1*u1)*u4*(v2*v2)*v4 + u1*u3*u4*(v2*v2)*v4 + ...
         u1*(u2*u2)*v1*v3*v4 - (u2*u2)*u4*v1*v3*v4 - ...
         (u1*u1)*u2*v2*v3*v4 + u1*u2*u4*v2*v3*v4 - ...
         u1*(u2*u2)*v1*(v4*v4) + (u2*u2)*u3*v1*(v4*v4) + ...
         (u1*u1)*u2*v2*(v4*v4) - u1*u2*u3*v2*(v4*v4))/...
       (u2*(u3*u3)*(v1*v1)*v2 - 2*u2*u3*u4*(v1*v1)*v2 + ...
         u2*(u4*u4)*(v1*v1)*v2 - u1*(u3*u3)*v1*(v2*v2) + ...
         2*u1*u3*u4*v1*(v2*v2) - u1*(u4*u4)*v1*(v2*v2) - ...
         (u2*u2)*u3*(v1*v1)*v3 + 2*u2*u3*u4*(v1*v1)*v3 - ...
         u3*(u4*u4)*(v1*v1)*v3 + 2*u1*u2*u4*v1*v2*v3 - ...
         2*u1*u3*u4*v1*v2*v3 - 2*u2*(u4*u4)*v1*v2*v3 + ...
         2*u3*(u4*u4)*v1*v2*v3 + (u1*u1)*u3*(v2*v2)*v3 - ...
         2*(u1*u1)*u4*(v2*v2)*v3 + 2*u1*(u4*u4)*(v2*v2)*v3 - ...
         u3*(u4*u4)*(v2*v2)*v3 + u1*(u2*u2)*v1*(v3*v3) - ...
         2*u1*u2*u4*v1*(v3*v3) + u1*(u4*u4)*v1*(v3*v3) - ...
         (u1*u1)*u2*v2*(v3*v3) + 2*(u1*u1)*u4*v2*(v3*v3) - ...
         2*u1*(u4*u4)*v2*(v3*v3) + u2*(u4*u4)*v2*(v3*v3) + ...
         2*(u2*u2)*u3*(v1*v1)*v4 - 2*u2*(u3*u3)*(v1*v1)*v4 - ...
         (u2*u2)*u4*(v1*v1)*v4 + (u3*u3)*u4*(v1*v1)*v4 - ...
         2*u1*u2*u3*v1*v2*v4 + 2*u1*(u3*u3)*v1*v2*v4 + ...
         2*u2*u3*u4*v1*v2*v4 - 2*(u3*u3)*u4*v1*v2*v4 + ...
         (u1*u1)*u4*(v2*v2)*v4 - 2*u1*u3*u4*(v2*v2)*v4 + ...
         (u3*u3)*u4*(v2*v2)*v4 - 2*u1*(u2*u2)*v1*v3*v4 + ...
         2*u1*u2*u3*v1*v3*v4 + 2*(u2*u2)*u4*v1*v3*v4 - ...
         2*u2*u3*u4*v1*v3*v4 + 2*(u1*u1)*u2*v2*v3*v4 - ...
         2*(u1*u1)*u3*v2*v3*v4 - 2*u1*u2*u4*v2*v3*v4 + ...
         2*u1*u3*u4*v2*v3*v4 - (u1*u1)*u4*(v3*v3)*v4 + ...
         2*u1*u2*u4*(v3*v3)*v4 - (u2*u2)*u4*(v3*v3)*v4 + ...
         u1*(u2*u2)*v1*(v4*v4) - 2*(u2*u2)*u3*v1*(v4*v4) - ...
         u1*(u3*u3)*v1*(v4*v4) + 2*u2*(u3*u3)*v1*(v4*v4) - ...
         (u1*u1)*u2*v2*(v4*v4) + 2*u1*u2*u3*v2*(v4*v4) - ...
         u2*(u3*u3)*v2*(v4*v4) + (u1*u1)*u3*v3*(v4*v4) - ...
         2*u1*u2*u3*v3*(v4*v4) + (u2*u2)*u3*v3*(v4*v4)) - ...
      (-(u2*u3*u4*(v1*v1)*v3) + u2*(u4*u4)*(v1*v1)*v3 + ...
         u1*u3*u4*v1*v2*v3 - u1*(u4*u4)*v1*v2*v3 + ...
         u1*u2*u4*v1*(v3*v3) - u2*(u4*u4)*v1*(v3*v3) - ...
         (u1*u1)*u4*v2*(v3*v3) + u1*(u4*u4)*v2*(v3*v3) + ...
         u2*(u3*u3)*(v1*v1)*v4 - u2*u3*u4*(v1*v1)*v4 - ...
         u1*(u3*u3)*v1*v2*v4 + u1*u3*u4*v1*v2*v4 - u1*u2*u3*v1*v3*v4 - ...
         u1*u2*u4*v1*v3*v4 + 2*u2*u3*u4*v1*v3*v4 + (u1*u1)*u3*v2*v3*v4 + ...
         (u1*u1)*u4*v2*v3*v4 - 2*u1*u3*u4*v2*v3*v4 + ...
         u1*u2*u3*v1*(v4*v4) - u2*(u3*u3)*v1*(v4*v4) - ...
         (u1*u1)*u3*v2*(v4*v4) + u1*(u3*u3)*v2*(v4*v4))/...
       (u2*(u3*u3)*(v1*v1)*v2 - 2*u2*u3*u4*(v1*v1)*v2 + ...
         u2*(u4*u4)*(v1*v1)*v2 - u1*(u3*u3)*v1*(v2*v2) + ...
         2*u1*u3*u4*v1*(v2*v2) - u1*(u4*u4)*v1*(v2*v2) - ...
         (u2*u2)*u3*(v1*v1)*v3 + 2*u2*u3*u4*(v1*v1)*v3 - ...
         u3*(u4*u4)*(v1*v1)*v3 + 2*u1*u2*u4*v1*v2*v3 - ...
         2*u1*u3*u4*v1*v2*v3 - 2*u2*(u4*u4)*v1*v2*v3 + ...
         2*u3*(u4*u4)*v1*v2*v3 + (u1*u1)*u3*(v2*v2)*v3 - ...
         2*(u1*u1)*u4*(v2*v2)*v3 + 2*u1*(u4*u4)*(v2*v2)*v3 - ...
         u3*(u4*u4)*(v2*v2)*v3 + u1*(u2*u2)*v1*(v3*v3) - ...
         2*u1*u2*u4*v1*(v3*v3) + u1*(u4*u4)*v1*(v3*v3) - ...
         (u1*u1)*u2*v2*(v3*v3) + 2*(u1*u1)*u4*v2*(v3*v3) - ...
         2*u1*(u4*u4)*v2*(v3*v3) + u2*(u4*u4)*v2*(v3*v3) + ...
         2*(u2*u2)*u3*(v1*v1)*v4 - 2*u2*(u3*u3)*(v1*v1)*v4 - ...
         (u2*u2)*u4*(v1*v1)*v4 + (u3*u3)*u4*(v1*v1)*v4 - ...
         2*u1*u2*u3*v1*v2*v4 + 2*u1*(u3*u3)*v1*v2*v4 + ...
         2*u2*u3*u4*v1*v2*v4 - 2*(u3*u3)*u4*v1*v2*v4 + ...
         (u1*u1)*u4*(v2*v2)*v4 - 2*u1*u3*u4*(v2*v2)*v4 + ...
         (u3*u3)*u4*(v2*v2)*v4 - 2*u1*(u2*u2)*v1*v3*v4 + ...
         2*u1*u2*u3*v1*v3*v4 + 2*(u2*u2)*u4*v1*v3*v4 - ...
         2*u2*u3*u4*v1*v3*v4 + 2*(u1*u1)*u2*v2*v3*v4 - ...
         2*(u1*u1)*u3*v2*v3*v4 - 2*u1*u2*u4*v2*v3*v4 + ...
         2*u1*u3*u4*v2*v3*v4 - (u1*u1)*u4*(v3*v3)*v4 + ...
         2*u1*u2*u4*(v3*v3)*v4 - (u2*u2)*u4*(v3*v3)*v4 + ...
         u1*(u2*u2)*v1*(v4*v4) - 2*(u2*u2)*u3*v1*(v4*v4) - ...
         u1*(u3*u3)*v1*(v4*v4) + 2*u2*(u3*u3)*v1*(v4*v4) - ...
         (u1*u1)*u2*v2*(v4*v4) + 2*u1*u2*u3*v2*(v4*v4) - ...
         u2*(u3*u3)*v2*(v4*v4) + (u1*u1)*u3*v3*(v4*v4) - ...
         2*u1*u2*u3*v3*(v4*v4) + (u2*u2)*u3*v3*(v4*v4));

      d_inv = -((u2*u3*(v1*v1)*v2 - u2*u4*(v1*v1)*v2 - ...
           u1*u3*v1*(v2*v2) + u1*u4*v1*(v2*v2) - ...
           (u2*u2)*(v1*v1)*v3 + u2*u4*(v1*v1)*v3 + ...
           u1*u2*v1*v2*v3 - u2*u3*v1*v2*v3 - u1*u4*v1*v2*v3 + ...
           u2*u4*v1*v2*v3 + u1*u3*(v2*v2)*v3 - u1*u4*(v2*v2)*v3 + ...
           (u2*u2)*v1*(v3*v3) - u2*u4*v1*(v3*v3) - ...
           u1*u2*v2*(v3*v3) + u1*u4*v2*(v3*v3) + ...
           (u2*u2)*(v1*v1)*v4 - u2*u3*(v1*v1)*v4 - ...
           u1*u2*v1*v2*v4 + u1*u3*v1*v2*v4 - (u2*u2)*v1*v3*v4 + ...
           u2*u3*v1*v3*v4 + u1*u2*v2*v3*v4 - u1*u3*v2*v3*v4)/...
         (u2*(u3*u3)*(v1*v1)*v2 - 2*u2*u3*u4*(v1*v1)*v2 + ...
           u2*(u4*u4)*(v1*v1)*v2 - u1*(u3*u3)*v1*(v2*v2) + ...
           2*u1*u3*u4*v1*(v2*v2) - u1*(u4*u4)*v1*(v2*v2) - ...
           (u2*u2)*u3*(v1*v1)*v3 + 2*u2*u3*u4*(v1*v1)*v3 - ...
           u3*(u4*u4)*(v1*v1)*v3 + 2*u1*u2*u4*v1*v2*v3 - ...
           2*u1*u3*u4*v1*v2*v3 - 2*u2*(u4*u4)*v1*v2*v3 + ...
           2*u3*(u4*u4)*v1*v2*v3 + (u1*u1)*u3*(v2*v2)*v3 - ...
           2*(u1*u1)*u4*(v2*v2)*v3 + ...
           2*u1*(u4*u4)*(v2*v2)*v3 - u3*(u4*u4)*(v2*v2)*v3 + ...
           u1*(u2*u2)*v1*(v3*v3) - 2*u1*u2*u4*v1*(v3*v3) + ...
           u1*(u4*u4)*v1*(v3*v3) - (u1*u1)*u2*v2*(v3*v3) + ...
           2*(u1*u1)*u4*v2*(v3*v3) - ...
           2*u1*(u4*u4)*v2*(v3*v3) + u2*(u4*u4)*v2*(v3*v3) + ...
           2*(u2*u2)*u3*(v1*v1)*v4 - ...
           2*u2*(u3*u3)*(v1*v1)*v4 - (u2*u2)*u4*(v1*v1)*v4 + ...
           (u3*u3)*u4*(v1*v1)*v4 - 2*u1*u2*u3*v1*v2*v4 + ...
           2*u1*(u3*u3)*v1*v2*v4 + 2*u2*u3*u4*v1*v2*v4 - ...
           2*(u3*u3)*u4*v1*v2*v4 + (u1*u1)*u4*(v2*v2)*v4 - ...
           2*u1*u3*u4*(v2*v2)*v4 + (u3*u3)*u4*(v2*v2)*v4 - ...
           2*u1*(u2*u2)*v1*v3*v4 + 2*u1*u2*u3*v1*v3*v4 + ...
           2*(u2*u2)*u4*v1*v3*v4 - 2*u2*u3*u4*v1*v3*v4 + ...
           2*(u1*u1)*u2*v2*v3*v4 - 2*(u1*u1)*u3*v2*v3*v4 - ...
           2*u1*u2*u4*v2*v3*v4 + 2*u1*u3*u4*v2*v3*v4 - ...
           (u1*u1)*u4*(v3*v3)*v4 + 2*u1*u2*u4*(v3*v3)*v4 - ...
           (u2*u2)*u4*(v3*v3)*v4 + u1*(u2*u2)*v1*(v4*v4) - ...
           2*(u2*u2)*u3*v1*(v4*v4) - u1*(u3*u3)*v1*(v4*v4) + ...
           2*u2*(u3*u3)*v1*(v4*v4) - (u1*u1)*u2*v2*(v4*v4) + ...
           2*u1*u2*u3*v2*(v4*v4) - u2*(u3*u3)*v2*(v4*v4) + ...
           (u1*u1)*u3*v3*(v4*v4) - 2*u1*u2*u3*v3*(v4*v4) + ...
           (u2*u2)*u3*v3*(v4*v4))) - ...
      (u2*u4*(v1*v1)*v2 - u3*u4*(v1*v1)*v2 - u1*u4*v1*(v2*v2) + ...
         u3*u4*v1*(v2*v2) + u1*u4*v1*v2*v3 - 2*u2*u4*v1*v2*v3 + ...
         u3*u4*v1*v2*v3 + u1*u4*(v2*v2)*v3 - u3*u4*(v2*v2)*v3 - ...
         u1*u4*v2*(v3*v3) + u2*u4*v2*(v3*v3) - ...
         (u2*u2)*(v1*v1)*v4 + u2*u3*(v1*v1)*v4 + u1*u2*v1*v2*v4 - ...
         u2*u3*v1*v2*v4 - u1*u2*v1*v3*v4 + 2*(u2*u2)*v1*v3*v4 - ...
         u2*u3*v1*v3*v4 - u1*u2*v2*v3*v4 + u2*u3*v2*v3*v4 + ...
         u1*u2*(v3*v3)*v4 - (u2*u2)*(v3*v3)*v4)/...
       (u2*(u3*u3)*(v1*v1)*v2 - 2*u2*u3*u4*(v1*v1)*v2 + ...
         u2*(u4*u4)*(v1*v1)*v2 - u1*(u3*u3)*v1*(v2*v2) + ...
         2*u1*u3*u4*v1*(v2*v2) - u1*(u4*u4)*v1*(v2*v2) - ...
         (u2*u2)*u3*(v1*v1)*v3 + 2*u2*u3*u4*(v1*v1)*v3 - ...
         u3*(u4*u4)*(v1*v1)*v3 + 2*u1*u2*u4*v1*v2*v3 - ...
         2*u1*u3*u4*v1*v2*v3 - 2*u2*(u4*u4)*v1*v2*v3 + ...
         2*u3*(u4*u4)*v1*v2*v3 + (u1*u1)*u3*(v2*v2)*v3 - ...
         2*(u1*u1)*u4*(v2*v2)*v3 + 2*u1*(u4*u4)*(v2*v2)*v3 - ...
         u3*(u4*u4)*(v2*v2)*v3 + u1*(u2*u2)*v1*(v3*v3) - ...
         2*u1*u2*u4*v1*(v3*v3) + u1*(u4*u4)*v1*(v3*v3) - ...
         (u1*u1)*u2*v2*(v3*v3) + 2*(u1*u1)*u4*v2*(v3*v3) - ...
         2*u1*(u4*u4)*v2*(v3*v3) + u2*(u4*u4)*v2*(v3*v3) + ...
         2*(u2*u2)*u3*(v1*v1)*v4 - 2*u2*(u3*u3)*(v1*v1)*v4 - ...
         (u2*u2)*u4*(v1*v1)*v4 + (u3*u3)*u4*(v1*v1)*v4 - ...
         2*u1*u2*u3*v1*v2*v4 + 2*u1*(u3*u3)*v1*v2*v4 + ...
         2*u2*u3*u4*v1*v2*v4 - 2*(u3*u3)*u4*v1*v2*v4 + ...
         (u1*u1)*u4*(v2*v2)*v4 - 2*u1*u3*u4*(v2*v2)*v4 + ...
         (u3*u3)*u4*(v2*v2)*v4 - 2*u1*(u2*u2)*v1*v3*v4 + ...
         2*u1*u2*u3*v1*v3*v4 + 2*(u2*u2)*u4*v1*v3*v4 - ...
         2*u2*u3*u4*v1*v3*v4 + 2*(u1*u1)*u2*v2*v3*v4 - ...
         2*(u1*u1)*u3*v2*v3*v4 - 2*u1*u2*u4*v2*v3*v4 + ...
         2*u1*u3*u4*v2*v3*v4 - (u1*u1)*u4*(v3*v3)*v4 + ...
         2*u1*u2*u4*(v3*v3)*v4 - (u2*u2)*u4*(v3*v3)*v4 + ...
         u1*(u2*u2)*v1*(v4*v4) - 2*(u2*u2)*u3*v1*(v4*v4) - ...
         u1*(u3*u3)*v1*(v4*v4) + 2*u2*(u3*u3)*v1*(v4*v4) - ...
         (u1*u1)*u2*v2*(v4*v4) + 2*u1*u2*u3*v2*(v4*v4) - ...
         u2*(u3*u3)*v2*(v4*v4) + (u1*u1)*u3*v3*(v4*v4) - ...
         2*u1*u2*u3*v3*(v4*v4) + (u2*u2)*u3*v3*(v4*v4)) - ...
      (-(u2*u4*(v1*v1)*v2) + (u4*u4)*(v1*v1)*v2 + ...
         u1*u4*v1*(v2*v2) - (u4*u4)*v1*(v2*v2) + u2*u4*v1*v2*v3 - ...
         (u4*u4)*v1*v2*v3 - u1*u4*(v2*v2)*v3 + ...
         (u4*u4)*(v2*v2)*v3 + (u2*u2)*(v1*v1)*v4 - ...
         u2*u4*(v1*v1)*v4 - u1*u2*v1*v2*v4 - u1*u4*v1*v2*v4 + ...
         2*u2*u4*v1*v2*v4 - (u2*u2)*v1*v3*v4 + u2*u4*v1*v3*v4 + ...
         u1*u2*v2*v3*v4 + u1*u4*v2*v3*v4 - 2*u2*u4*v2*v3*v4 + ...
         u1*u2*v1*(v4*v4) - (u2*u2)*v1*(v4*v4) - ...
         u1*u2*v3*(v4*v4) + (u2*u2)*v3*(v4*v4))/...
       (u2*(u3*u3)*(v1*v1)*v2 - 2*u2*u3*u4*(v1*v1)*v2 + ...
         u2*(u4*u4)*(v1*v1)*v2 - u1*(u3*u3)*v1*(v2*v2) + ...
         2*u1*u3*u4*v1*(v2*v2) - u1*(u4*u4)*v1*(v2*v2) - ...
         (u2*u2)*u3*(v1*v1)*v3 + 2*u2*u3*u4*(v1*v1)*v3 - ...
         u3*(u4*u4)*(v1*v1)*v3 + 2*u1*u2*u4*v1*v2*v3 - ...
         2*u1*u3*u4*v1*v2*v3 - 2*u2*(u4*u4)*v1*v2*v3 + ...
         2*u3*(u4*u4)*v1*v2*v3 + (u1*u1)*u3*(v2*v2)*v3 - ...
         2*(u1*u1)*u4*(v2*v2)*v3 + 2*u1*(u4*u4)*(v2*v2)*v3 - ...
         u3*(u4*u4)*(v2*v2)*v3 + u1*(u2*u2)*v1*(v3*v3) - ...
         2*u1*u2*u4*v1*(v3*v3) + u1*(u4*u4)*v1*(v3*v3) - ...
         (u1*u1)*u2*v2*(v3*v3) + 2*(u1*u1)*u4*v2*(v3*v3) - ...
         2*u1*(u4*u4)*v2*(v3*v3) + u2*(u4*u4)*v2*(v3*v3) + ...
         2*(u2*u2)*u3*(v1*v1)*v4 - 2*u2*(u3*u3)*(v1*v1)*v4 - ...
         (u2*u2)*u4*(v1*v1)*v4 + (u3*u3)*u4*(v1*v1)*v4 - ...
         2*u1*u2*u3*v1*v2*v4 + 2*u1*(u3*u3)*v1*v2*v4 + ...
         2*u2*u3*u4*v1*v2*v4 - 2*(u3*u3)*u4*v1*v2*v4 + ...
         (u1*u1)*u4*(v2*v2)*v4 - 2*u1*u3*u4*(v2*v2)*v4 + ...
         (u3*u3)*u4*(v2*v2)*v4 - 2*u1*(u2*u2)*v1*v3*v4 + ...
         2*u1*u2*u3*v1*v3*v4 + 2*(u2*u2)*u4*v1*v3*v4 - ...
         2*u2*u3*u4*v1*v3*v4 + 2*(u1*u1)*u2*v2*v3*v4 - ...
         2*(u1*u1)*u3*v2*v3*v4 - 2*u1*u2*u4*v2*v3*v4 + ...
         2*u1*u3*u4*v2*v3*v4 - (u1*u1)*u4*(v3*v3)*v4 + ...
         2*u1*u2*u4*(v3*v3)*v4 - (u2*u2)*u4*(v3*v3)*v4 + ...
         u1*(u2*u2)*v1*(v4*v4) - 2*(u2*u2)*u3*v1*(v4*v4) - ...
         u1*(u3*u3)*v1*(v4*v4) + 2*u2*(u3*u3)*v1*(v4*v4) - ...
         (u1*u1)*u2*v2*(v4*v4) + 2*u1*u2*u3*v2*(v4*v4) - ...
         u2*(u3*u3)*v2*(v4*v4) + (u1*u1)*u3*v3*(v4*v4) - ...
         2*u1*u2*u3*v3*(v4*v4) + (u2*u2)*u3*v3*(v4*v4)) - ...
      (u2*u4*(v1*v1)*v3 - (u4*u4)*(v1*v1)*v3 - u1*u4*v1*v2*v3 + ...
         (u4*u4)*v1*v2*v3 - u2*u4*v1*(v3*v3) + ...
         (u4*u4)*v1*(v3*v3) + u1*u4*v2*(v3*v3) - ...
         (u4*u4)*v2*(v3*v3) - u2*u3*(v1*v1)*v4 + ...
         u3*u4*(v1*v1)*v4 + u1*u3*v1*v2*v4 - u3*u4*v1*v2*v4 + ...
         u2*u3*v1*v3*v4 + u1*u4*v1*v3*v4 - u2*u4*v1*v3*v4 - u3*u4*v1*v3*v4 - ...
         u1*u3*v2*v3*v4 + u3*u4*v2*v3*v4 - u1*u4*(v3*v3)*v4 + ...
         u2*u4*(v3*v3)*v4 - u1*u3*v1*(v4*v4) + u2*u3*v1*(v4*v4) + ...
         u1*u3*v3*(v4*v4) - u2*u3*v3*(v4*v4))/...
       (u2*(u3*u3)*(v1*v1)*v2 - 2*u2*u3*u4*(v1*v1)*v2 + ...
         u2*(u4*u4)*(v1*v1)*v2 - u1*(u3*u3)*v1*(v2*v2) + ...
         2*u1*u3*u4*v1*(v2*v2) - u1*(u4*u4)*v1*(v2*v2) - ...
         (u2*u2)*u3*(v1*v1)*v3 + 2*u2*u3*u4*(v1*v1)*v3 - ...
         u3*(u4*u4)*(v1*v1)*v3 + 2*u1*u2*u4*v1*v2*v3 - ...
         2*u1*u3*u4*v1*v2*v3 - 2*u2*(u4*u4)*v1*v2*v3 + ...
         2*u3*(u4*u4)*v1*v2*v3 + (u1*u1)*u3*(v2*v2)*v3 - ...
         2*(u1*u1)*u4*(v2*v2)*v3 + 2*u1*(u4*u4)*(v2*v2)*v3 - ...
         u3*(u4*u4)*(v2*v2)*v3 + u1*(u2*u2)*v1*(v3*v3) - ...
         2*u1*u2*u4*v1*(v3*v3) + u1*(u4*u4)*v1*(v3*v3) - ...
         (u1*u1)*u2*v2*(v3*v3) + 2*(u1*u1)*u4*v2*(v3*v3) - ...
         2*u1*(u4*u4)*v2*(v3*v3) + u2*(u4*u4)*v2*(v3*v3) + ...
         2*(u2*u2)*u3*(v1*v1)*v4 - 2*u2*(u3*u3)*(v1*v1)*v4 - ...
         (u2*u2)*u4*(v1*v1)*v4 + (u3*u3)*u4*(v1*v1)*v4 - ...
         2*u1*u2*u3*v1*v2*v4 + 2*u1*(u3*u3)*v1*v2*v4 + ...
         2*u2*u3*u4*v1*v2*v4 - 2*(u3*u3)*u4*v1*v2*v4 + ...
         (u1*u1)*u4*(v2*v2)*v4 - 2*u1*u3*u4*(v2*v2)*v4 + ...
         (u3*u3)*u4*(v2*v2)*v4 - 2*u1*(u2*u2)*v1*v3*v4 + ...
         2*u1*u2*u3*v1*v3*v4 + 2*(u2*u2)*u4*v1*v3*v4 - ...
         2*u2*u3*u4*v1*v3*v4 + 2*(u1*u1)*u2*v2*v3*v4 - ...
         2*(u1*u1)*u3*v2*v3*v4 - 2*u1*u2*u4*v2*v3*v4 + ...
         2*u1*u3*u4*v2*v3*v4 - (u1*u1)*u4*(v3*v3)*v4 + ...
         2*u1*u2*u4*(v3*v3)*v4 - (u2*u2)*u4*(v3*v3)*v4 + ...
         u1*(u2*u2)*v1*(v4*v4) - 2*(u2*u2)*u3*v1*(v4*v4) - ...
         u1*(u3*u3)*v1*(v4*v4) + 2*u2*(u3*u3)*v1*(v4*v4) - ...
         (u1*u1)*u2*v2*(v4*v4) + 2*u1*u2*u3*v2*(v4*v4) - ...
         u2*(u3*u3)*v2*(v4*v4) + (u1*u1)*u3*v3*(v4*v4) - ...
         2*u1*u2*u3*v3*(v4*v4) + (u2*u2)*u3*v3*(v4*v4));

      e_inv = -((-(u1*u2*u3*v1*v2) + u2*(u3*u3)*v1*v2 + u1*u2*u4*v1*v2 - ...
           u2*u3*u4*v1*v2 + (u1*u1)*u3*(v2*v2) - ...
           u1*(u3*u3)*(v2*v2) - (u1*u1)*u4*(v2*v2) + ...
           u1*u3*u4*(v2*v2) + u1*(u2*u2)*v1*v3 - ...
           (u2*u2)*u3*v1*v3 - u1*u2*u4*v1*v3 + u2*u3*u4*v1*v3 - ...
           (u1*u1)*u2*v2*v3 + u1*u2*u3*v2*v3 + (u1*u1)*u4*v2*v3 - ...
           u1*u3*u4*v2*v3 - u1*(u2*u2)*v1*v4 + u1*u2*u3*v1*v4 + ...
           (u2*u2)*u3*v1*v4 - u2*(u3*u3)*v1*v4 + ...
           (u1*u1)*u2*v2*v4 - (u1*u1)*u3*v2*v4 - u1*u2*u3*v2*v4 + ...
           u1*(u3*u3)*v2*v4)/...
         (u2*(u3*u3)*(v1*v1)*v2 - 2*u2*u3*u4*(v1*v1)*v2 + ...
           u2*(u4*u4)*(v1*v1)*v2 - u1*(u3*u3)*v1*(v2*v2) + ...
           2*u1*u3*u4*v1*(v2*v2) - u1*(u4*u4)*v1*(v2*v2) - ...
           (u2*u2)*u3*(v1*v1)*v3 + 2*u2*u3*u4*(v1*v1)*v3 - ...
           u3*(u4*u4)*(v1*v1)*v3 + 2*u1*u2*u4*v1*v2*v3 - ...
           2*u1*u3*u4*v1*v2*v3 - 2*u2*(u4*u4)*v1*v2*v3 + ...
           2*u3*(u4*u4)*v1*v2*v3 + (u1*u1)*u3*(v2*v2)*v3 - ...
           2*(u1*u1)*u4*(v2*v2)*v3 + ...
           2*u1*(u4*u4)*(v2*v2)*v3 - u3*(u4*u4)*(v2*v2)*v3 + ...
           u1*(u2*u2)*v1*(v3*v3) - 2*u1*u2*u4*v1*(v3*v3) + ...
           u1*(u4*u4)*v1*(v3*v3) - (u1*u1)*u2*v2*(v3*v3) + ...
           2*(u1*u1)*u4*v2*(v3*v3) - ...
           2*u1*(u4*u4)*v2*(v3*v3) + u2*(u4*u4)*v2*(v3*v3) + ...
           2*(u2*u2)*u3*(v1*v1)*v4 - ...
           2*u2*(u3*u3)*(v1*v1)*v4 - (u2*u2)*u4*(v1*v1)*v4 + ...
           (u3*u3)*u4*(v1*v1)*v4 - 2*u1*u2*u3*v1*v2*v4 + ...
           2*u1*(u3*u3)*v1*v2*v4 + 2*u2*u3*u4*v1*v2*v4 - ...
           2*(u3*u3)*u4*v1*v2*v4 + (u1*u1)*u4*(v2*v2)*v4 - ...
           2*u1*u3*u4*(v2*v2)*v4 + (u3*u3)*u4*(v2*v2)*v4 - ...
           2*u1*(u2*u2)*v1*v3*v4 + 2*u1*u2*u3*v1*v3*v4 + ...
           2*(u2*u2)*u4*v1*v3*v4 - 2*u2*u3*u4*v1*v3*v4 + ...
           2*(u1*u1)*u2*v2*v3*v4 - 2*(u1*u1)*u3*v2*v3*v4 - ...
           2*u1*u2*u4*v2*v3*v4 + 2*u1*u3*u4*v2*v3*v4 - ...
           (u1*u1)*u4*(v3*v3)*v4 + 2*u1*u2*u4*(v3*v3)*v4 - ...
           (u2*u2)*u4*(v3*v3)*v4 + u1*(u2*u2)*v1*(v4*v4) - ...
           2*(u2*u2)*u3*v1*(v4*v4) - u1*(u3*u3)*v1*(v4*v4) + ...
           2*u2*(u3*u3)*v1*(v4*v4) - (u1*u1)*u2*v2*(v4*v4) + ...
           2*u1*u2*u3*v2*(v4*v4) - u2*(u3*u3)*v2*(v4*v4) + ...
           (u1*u1)*u3*v3*(v4*v4) - 2*u1*u2*u3*v3*(v4*v4) + ...
           (u2*u2)*u3*v3*(v4*v4))) - ...
      (-(u1*u2*u4*v1*v2) + u1*u3*u4*v1*v2 + u2*u3*u4*v1*v2 - ...
         (u3*u3)*u4*v1*v2 + (u1*u1)*u4*(v2*v2) - ...
         2*u1*u3*u4*(v2*v2) + (u3*u3)*u4*(v2*v2) - ...
         (u1*u1)*u4*v2*v3 + u1*u2*u4*v2*v3 + u1*u3*u4*v2*v3 - ...
         u2*u3*u4*v2*v3 + u1*(u2*u2)*v1*v4 - u1*u2*u3*v1*v4 - ...
         (u2*u2)*u3*v1*v4 + u2*(u3*u3)*v1*v4 - (u1*u1)*u2*v2*v4 + ...
         2*u1*u2*u3*v2*v4 - u2*(u3*u3)*v2*v4 + (u1*u1)*u2*v3*v4 - ...
         u1*(u2*u2)*v3*v4 - u1*u2*u3*v3*v4 + (u2*u2)*u3*v3*v4)/...
       (u2*(u3*u3)*(v1*v1)*v2 - 2*u2*u3*u4*(v1*v1)*v2 + ...
         u2*(u4*u4)*(v1*v1)*v2 - u1*(u3*u3)*v1*(v2*v2) + ...
         2*u1*u3*u4*v1*(v2*v2) - u1*(u4*u4)*v1*(v2*v2) - ...
         (u2*u2)*u3*(v1*v1)*v3 + 2*u2*u3*u4*(v1*v1)*v3 - ...
         u3*(u4*u4)*(v1*v1)*v3 + 2*u1*u2*u4*v1*v2*v3 - ...
         2*u1*u3*u4*v1*v2*v3 - 2*u2*(u4*u4)*v1*v2*v3 + ...
         2*u3*(u4*u4)*v1*v2*v3 + (u1*u1)*u3*(v2*v2)*v3 - ...
         2*(u1*u1)*u4*(v2*v2)*v3 + 2*u1*(u4*u4)*(v2*v2)*v3 - ...
         u3*(u4*u4)*(v2*v2)*v3 + u1*(u2*u2)*v1*(v3*v3) - ...
         2*u1*u2*u4*v1*(v3*v3) + u1*(u4*u4)*v1*(v3*v3) - ...
         (u1*u1)*u2*v2*(v3*v3) + 2*(u1*u1)*u4*v2*(v3*v3) - ...
         2*u1*(u4*u4)*v2*(v3*v3) + u2*(u4*u4)*v2*(v3*v3) + ...
         2*(u2*u2)*u3*(v1*v1)*v4 - 2*u2*(u3*u3)*(v1*v1)*v4 - ...
         (u2*u2)*u4*(v1*v1)*v4 + (u3*u3)*u4*(v1*v1)*v4 - ...
         2*u1*u2*u3*v1*v2*v4 + 2*u1*(u3*u3)*v1*v2*v4 + ...
         2*u2*u3*u4*v1*v2*v4 - 2*(u3*u3)*u4*v1*v2*v4 + ...
         (u1*u1)*u4*(v2*v2)*v4 - 2*u1*u3*u4*(v2*v2)*v4 + ...
         (u3*u3)*u4*(v2*v2)*v4 - 2*u1*(u2*u2)*v1*v3*v4 + ...
         2*u1*u2*u3*v1*v3*v4 + 2*(u2*u2)*u4*v1*v3*v4 - ...
         2*u2*u3*u4*v1*v3*v4 + 2*(u1*u1)*u2*v2*v3*v4 - ...
         2*(u1*u1)*u3*v2*v3*v4 - 2*u1*u2*u4*v2*v3*v4 + ...
         2*u1*u3*u4*v2*v3*v4 - (u1*u1)*u4*(v3*v3)*v4 + ...
         2*u1*u2*u4*(v3*v3)*v4 - (u2*u2)*u4*(v3*v3)*v4 + ...
         u1*(u2*u2)*v1*(v4*v4) - 2*(u2*u2)*u3*v1*(v4*v4) - ...
         u1*(u3*u3)*v1*(v4*v4) + 2*u2*(u3*u3)*v1*(v4*v4) - ...
         (u1*u1)*u2*v2*(v4*v4) + 2*u1*u2*u3*v2*(v4*v4) - ...
         u2*(u3*u3)*v2*(v4*v4) + (u1*u1)*u3*v3*(v4*v4) - ...
         2*u1*u2*u3*v3*(v4*v4) + (u2*u2)*u3*v3*(v4*v4)) - ...
      (u1*u2*u4*v1*v2 - u2*u3*u4*v1*v2 - u1*(u4*u4)*v1*v2 + ...
         u3*(u4*u4)*v1*v2 - (u1*u1)*u4*(v2*v2) + ...
         u1*u3*u4*(v2*v2) + u1*(u4*u4)*(v2*v2) - ...
         u3*(u4*u4)*(v2*v2) - u1*(u2*u2)*v1*v4 + ...
         (u2*u2)*u3*v1*v4 + u1*u2*u4*v1*v4 - u2*u3*u4*v1*v4 + ...
         (u1*u1)*u2*v2*v4 - u1*u2*u3*v2*v4 + (u1*u1)*u4*v2*v4 - ...
         2*u1*u2*u4*v2*v4 - u1*u3*u4*v2*v4 + 2*u2*u3*u4*v2*v4 - ...
         (u1*u1)*u2*(v4*v4) + u1*(u2*u2)*(v4*v4) + ...
         u1*u2*u3*(v4*v4) - (u2*u2)*u3*(v4*v4))/...
       (u2*(u3*u3)*(v1*v1)*v2 - 2*u2*u3*u4*(v1*v1)*v2 + ...
         u2*(u4*u4)*(v1*v1)*v2 - u1*(u3*u3)*v1*(v2*v2) + ...
         2*u1*u3*u4*v1*(v2*v2) - u1*(u4*u4)*v1*(v2*v2) - ...
         (u2*u2)*u3*(v1*v1)*v3 + 2*u2*u3*u4*(v1*v1)*v3 - ...
         u3*(u4*u4)*(v1*v1)*v3 + 2*u1*u2*u4*v1*v2*v3 - ...
         2*u1*u3*u4*v1*v2*v3 - 2*u2*(u4*u4)*v1*v2*v3 + ...
         2*u3*(u4*u4)*v1*v2*v3 + (u1*u1)*u3*(v2*v2)*v3 - ...
         2*(u1*u1)*u4*(v2*v2)*v3 + 2*u1*(u4*u4)*(v2*v2)*v3 - ...
         u3*(u4*u4)*(v2*v2)*v3 + u1*(u2*u2)*v1*(v3*v3) - ...
         2*u1*u2*u4*v1*(v3*v3) + u1*(u4*u4)*v1*(v3*v3) - ...
         (u1*u1)*u2*v2*(v3*v3) + 2*(u1*u1)*u4*v2*(v3*v3) - ...
         2*u1*(u4*u4)*v2*(v3*v3) + u2*(u4*u4)*v2*(v3*v3) + ...
         2*(u2*u2)*u3*(v1*v1)*v4 - 2*u2*(u3*u3)*(v1*v1)*v4 - ...
         (u2*u2)*u4*(v1*v1)*v4 + (u3*u3)*u4*(v1*v1)*v4 - ...
         2*u1*u2*u3*v1*v2*v4 + 2*u1*(u3*u3)*v1*v2*v4 + ...
         2*u2*u3*u4*v1*v2*v4 - 2*(u3*u3)*u4*v1*v2*v4 + ...
         (u1*u1)*u4*(v2*v2)*v4 - 2*u1*u3*u4*(v2*v2)*v4 + ...
         (u3*u3)*u4*(v2*v2)*v4 - 2*u1*(u2*u2)*v1*v3*v4 + ...
         2*u1*u2*u3*v1*v3*v4 + 2*(u2*u2)*u4*v1*v3*v4 - ...
         2*u2*u3*u4*v1*v3*v4 + 2*(u1*u1)*u2*v2*v3*v4 - ...
         2*(u1*u1)*u3*v2*v3*v4 - 2*u1*u2*u4*v2*v3*v4 + ...
         2*u1*u3*u4*v2*v3*v4 - (u1*u1)*u4*(v3*v3)*v4 + ...
         2*u1*u2*u4*(v3*v3)*v4 - (u2*u2)*u4*(v3*v3)*v4 + ...
         u1*(u2*u2)*v1*(v4*v4) - 2*(u2*u2)*u3*v1*(v4*v4) - ...
         u1*(u3*u3)*v1*(v4*v4) + 2*u2*(u3*u3)*v1*(v4*v4) - ...
         (u1*u1)*u2*v2*(v4*v4) + 2*u1*u2*u3*v2*(v4*v4) - ...
         u2*(u3*u3)*v2*(v4*v4) + (u1*u1)*u3*v3*(v4*v4) - ...
         2*u1*u2*u3*v3*(v4*v4) + (u2*u2)*u3*v3*(v4*v4)) - ...
      (-(u1*u2*u4*v1*v3) + u2*u3*u4*v1*v3 + u1*(u4*u4)*v1*v3 - ...
         u3*(u4*u4)*v1*v3 + (u1*u1)*u4*v2*v3 - u1*u3*u4*v2*v3 - ...
         u1*(u4*u4)*v2*v3 + u3*(u4*u4)*v2*v3 + u1*u2*u3*v1*v4 - ...
         u2*(u3*u3)*v1*v4 - u1*u3*u4*v1*v4 + (u3*u3)*u4*v1*v4 - ...
         (u1*u1)*u3*v2*v4 + u1*(u3*u3)*v2*v4 + u1*u3*u4*v2*v4 - ...
         (u3*u3)*u4*v2*v4 - (u1*u1)*u4*v3*v4 + u1*u2*u4*v3*v4 + ...
         u1*u3*u4*v3*v4 - u2*u3*u4*v3*v4 + (u1*u1)*u3*(v4*v4) - ...
         u1*u2*u3*(v4*v4) - u1*(u3*u3)*(v4*v4) + ...
         u2*(u3*u3)*(v4*v4))/...
       (u2*(u3*u3)*(v1*v1)*v2 - 2*u2*u3*u4*(v1*v1)*v2 + ...
         u2*(u4*u4)*(v1*v1)*v2 - u1*(u3*u3)*v1*(v2*v2) + ...
         2*u1*u3*u4*v1*(v2*v2) - u1*(u4*u4)*v1*(v2*v2) - ...
         (u2*u2)*u3*(v1*v1)*v3 + 2*u2*u3*u4*(v1*v1)*v3 - ...
         u3*(u4*u4)*(v1*v1)*v3 + 2*u1*u2*u4*v1*v2*v3 - ...
         2*u1*u3*u4*v1*v2*v3 - 2*u2*(u4*u4)*v1*v2*v3 + ...
         2*u3*(u4*u4)*v1*v2*v3 + (u1*u1)*u3*(v2*v2)*v3 - ...
         2*(u1*u1)*u4*(v2*v2)*v3 + 2*u1*(u4*u4)*(v2*v2)*v3 - ...
         u3*(u4*u4)*(v2*v2)*v3 + u1*(u2*u2)*v1*(v3*v3) - ...
         2*u1*u2*u4*v1*(v3*v3) + u1*(u4*u4)*v1*(v3*v3) - ...
         (u1*u1)*u2*v2*(v3*v3) + 2*(u1*u1)*u4*v2*(v3*v3) - ...
         2*u1*(u4*u4)*v2*(v3*v3) + u2*(u4*u4)*v2*(v3*v3) + ...
         2*(u2*u2)*u3*(v1*v1)*v4 - 2*u2*(u3*u3)*(v1*v1)*v4 - ...
         (u2*u2)*u4*(v1*v1)*v4 + (u3*u3)*u4*(v1*v1)*v4 - ...
         2*u1*u2*u3*v1*v2*v4 + 2*u1*(u3*u3)*v1*v2*v4 + ...
         2*u2*u3*u4*v1*v2*v4 - 2*(u3*u3)*u4*v1*v2*v4 + ...
         (u1*u1)*u4*(v2*v2)*v4 - 2*u1*u3*u4*(v2*v2)*v4 + ...
         (u3*u3)*u4*(v2*v2)*v4 - 2*u1*(u2*u2)*v1*v3*v4 + ...
         2*u1*u2*u3*v1*v3*v4 + 2*(u2*u2)*u4*v1*v3*v4 - ...
         2*u2*u3*u4*v1*v3*v4 + 2*(u1*u1)*u2*v2*v3*v4 - ...
         2*(u1*u1)*u3*v2*v3*v4 - 2*u1*u2*u4*v2*v3*v4 + ...
         2*u1*u3*u4*v2*v3*v4 - (u1*u1)*u4*(v3*v3)*v4 + ...
         2*u1*u2*u4*(v3*v3)*v4 - (u2*u2)*u4*(v3*v3)*v4 + ...
         u1*(u2*u2)*v1*(v4*v4) - 2*(u2*u2)*u3*v1*(v4*v4) - ...
         u1*(u3*u3)*v1*(v4*v4) + 2*u2*(u3*u3)*v1*(v4*v4) - ...
         (u1*u1)*u2*v2*(v4*v4) + 2*u1*u2*u3*v2*(v4*v4) - ...
         u2*(u3*u3)*v2*(v4*v4) + (u1*u1)*u3*v3*(v4*v4) - ...
         2*u1*u2*u3*v3*(v4*v4) + (u2*u2)*u3*v3*(v4*v4));

     f_inv = -((-(u2*(u3*u3)*(v1*v1)*v2) + u2*u3*u4*(v1*v1)*v2 + ...
           u1*(u3*u3)*v1*(v2*v2) - u1*u3*u4*v1*(v2*v2) + ...
           (u2*u2)*u3*(v1*v1)*v3 - u2*u3*u4*(v1*v1)*v3 - ...
           u1*u2*u4*v1*v2*v3 + u1*u3*u4*v1*v2*v3 - ...
           (u1*u1)*u3*(v2*v2)*v3 + (u1*u1)*u4*(v2*v2)*v3 - ...
           u1*(u2*u2)*v1*(v3*v3) + u1*u2*u4*v1*(v3*v3) + ...
           (u1*u1)*u2*v2*(v3*v3) - (u1*u1)*u4*v2*(v3*v3) - ...
           (u2*u2)*u3*(v1*v1)*v4 + u2*(u3*u3)*(v1*v1)*v4 + ...
           u1*u2*u3*v1*v2*v4 - u1*(u3*u3)*v1*v2*v4 + ...
           u1*(u2*u2)*v1*v3*v4 - u1*u2*u3*v1*v3*v4 - ...
           (u1*u1)*u2*v2*v3*v4 + (u1*u1)*u3*v2*v3*v4)/...
         (u2*(u3*u3)*(v1*v1)*v2 - 2*u2*u3*u4*(v1*v1)*v2 + ...
           u2*(u4*u4)*(v1*v1)*v2 - u1*(u3*u3)*v1*(v2*v2) + ...
           2*u1*u3*u4*v1*(v2*v2) - u1*(u4*u4)*v1*(v2*v2) - ...
           (u2*u2)*u3*(v1*v1)*v3 + 2*u2*u3*u4*(v1*v1)*v3 - ...
           u3*(u4*u4)*(v1*v1)*v3 + 2*u1*u2*u4*v1*v2*v3 - ...
           2*u1*u3*u4*v1*v2*v3 - 2*u2*(u4*u4)*v1*v2*v3 + ...
           2*u3*(u4*u4)*v1*v2*v3 + (u1*u1)*u3*(v2*v2)*v3 - ...
           2*(u1*u1)*u4*(v2*v2)*v3 + ...
           2*u1*(u4*u4)*(v2*v2)*v3 - u3*(u4*u4)*(v2*v2)*v3 + ...
           u1*(u2*u2)*v1*(v3*v3) - 2*u1*u2*u4*v1*(v3*v3) + ...
           u1*(u4*u4)*v1*(v3*v3) - (u1*u1)*u2*v2*(v3*v3) + ...
           2*(u1*u1)*u4*v2*(v3*v3) - ...
           2*u1*(u4*u4)*v2*(v3*v3) + u2*(u4*u4)*v2*(v3*v3) + ...
           2*(u2*u2)*u3*(v1*v1)*v4 - ...
           2*u2*(u3*u3)*(v1*v1)*v4 - (u2*u2)*u4*(v1*v1)*v4 + ...
           (u3*u3)*u4*(v1*v1)*v4 - 2*u1*u2*u3*v1*v2*v4 + ...
           2*u1*(u3*u3)*v1*v2*v4 + 2*u2*u3*u4*v1*v2*v4 - ...
           2*(u3*u3)*u4*v1*v2*v4 + (u1*u1)*u4*(v2*v2)*v4 - ...
           2*u1*u3*u4*(v2*v2)*v4 + (u3*u3)*u4*(v2*v2)*v4 - ...
           2*u1*(u2*u2)*v1*v3*v4 + 2*u1*u2*u3*v1*v3*v4 + ...
           2*(u2*u2)*u4*v1*v3*v4 - 2*u2*u3*u4*v1*v3*v4 + ...
           2*(u1*u1)*u2*v2*v3*v4 - 2*(u1*u1)*u3*v2*v3*v4 - ...
           2*u1*u2*u4*v2*v3*v4 + 2*u1*u3*u4*v2*v3*v4 - ...
           (u1*u1)*u4*(v3*v3)*v4 + 2*u1*u2*u4*(v3*v3)*v4 - ...
           (u2*u2)*u4*(v3*v3)*v4 + u1*(u2*u2)*v1*(v4*v4) - ...
           2*(u2*u2)*u3*v1*(v4*v4) - u1*(u3*u3)*v1*(v4*v4) + ...
           2*u2*(u3*u3)*v1*(v4*v4) - (u1*u1)*u2*v2*(v4*v4) + ...
           2*u1*u2*u3*v2*(v4*v4) - u2*(u3*u3)*v2*(v4*v4) + ...
           (u1*u1)*u3*v3*(v4*v4) - 2*u1*u2*u3*v3*(v4*v4) + ...
           (u2*u2)*u3*v3*(v4*v4))) - ...
      (-(u2*u3*u4*(v1*v1)*v2) + (u3*u3)*u4*(v1*v1)*v2 + ...
         u1*u3*u4*v1*(v2*v2) - (u3*u3)*u4*v1*(v2*v2) + ...
         u1*u2*u4*v1*v2*v3 - 2*u1*u3*u4*v1*v2*v3 + u2*u3*u4*v1*v2*v3 - ...
         (u1*u1)*u4*(v2*v2)*v3 + u1*u3*u4*(v2*v2)*v3 + ...
         (u1*u1)*u4*v2*(v3*v3) - u1*u2*u4*v2*(v3*v3) + ...
         (u2*u2)*u3*(v1*v1)*v4 - u2*(u3*u3)*(v1*v1)*v4 - ...
         u1*u2*u3*v1*v2*v4 + u2*(u3*u3)*v1*v2*v4 - ...
         u1*(u2*u2)*v1*v3*v4 + 2*u1*u2*u3*v1*v3*v4 - ...
         (u2*u2)*u3*v1*v3*v4 + (u1*u1)*u2*v2*v3*v4 - ...
         u1*u2*u3*v2*v3*v4 - (u1*u1)*u2*(v3*v3)*v4 + ...
         u1*(u2*u2)*(v3*v3)*v4)/...
       (u2*(u3*u3)*(v1*v1)*v2 - 2*u2*u3*u4*(v1*v1)*v2 + ...
         u2*(u4*u4)*(v1*v1)*v2 - u1*(u3*u3)*v1*(v2*v2) + ...
         2*u1*u3*u4*v1*(v2*v2) - u1*(u4*u4)*v1*(v2*v2) - ...
         (u2*u2)*u3*(v1*v1)*v3 + 2*u2*u3*u4*(v1*v1)*v3 - ...
         u3*(u4*u4)*(v1*v1)*v3 + 2*u1*u2*u4*v1*v2*v3 - ...
         2*u1*u3*u4*v1*v2*v3 - 2*u2*(u4*u4)*v1*v2*v3 + ...
         2*u3*(u4*u4)*v1*v2*v3 + (u1*u1)*u3*(v2*v2)*v3 - ...
         2*(u1*u1)*u4*(v2*v2)*v3 + 2*u1*(u4*u4)*(v2*v2)*v3 - ...
         u3*(u4*u4)*(v2*v2)*v3 + u1*(u2*u2)*v1*(v3*v3) - ...
         2*u1*u2*u4*v1*(v3*v3) + u1*(u4*u4)*v1*(v3*v3) - ...
         (u1*u1)*u2*v2*(v3*v3) + 2*(u1*u1)*u4*v2*(v3*v3) - ...
         2*u1*(u4*u4)*v2*(v3*v3) + u2*(u4*u4)*v2*(v3*v3) + ...
         2*(u2*u2)*u3*(v1*v1)*v4 - 2*u2*(u3*u3)*(v1*v1)*v4 - ...
         (u2*u2)*u4*(v1*v1)*v4 + (u3*u3)*u4*(v1*v1)*v4 - ...
         2*u1*u2*u3*v1*v2*v4 + 2*u1*(u3*u3)*v1*v2*v4 + ...
         2*u2*u3*u4*v1*v2*v4 - 2*(u3*u3)*u4*v1*v2*v4 + ...
         (u1*u1)*u4*(v2*v2)*v4 - 2*u1*u3*u4*(v2*v2)*v4 + ...
         (u3*u3)*u4*(v2*v2)*v4 - 2*u1*(u2*u2)*v1*v3*v4 + ...
         2*u1*u2*u3*v1*v3*v4 + 2*(u2*u2)*u4*v1*v3*v4 - ...
         2*u2*u3*u4*v1*v3*v4 + 2*(u1*u1)*u2*v2*v3*v4 - ...
         2*(u1*u1)*u3*v2*v3*v4 - 2*u1*u2*u4*v2*v3*v4 + ...
         2*u1*u3*u4*v2*v3*v4 - (u1*u1)*u4*(v3*v3)*v4 + ...
         2*u1*u2*u4*(v3*v3)*v4 - (u2*u2)*u4*(v3*v3)*v4 + ...
         u1*(u2*u2)*v1*(v4*v4) - 2*(u2*u2)*u3*v1*(v4*v4) - ...
         u1*(u3*u3)*v1*(v4*v4) + 2*u2*(u3*u3)*v1*(v4*v4) - ...
         (u1*u1)*u2*v2*(v4*v4) + 2*u1*u2*u3*v2*(v4*v4) - ...
         u2*(u3*u3)*v2*(v4*v4) + (u1*u1)*u3*v3*(v4*v4) - ...
         2*u1*u2*u3*v3*(v4*v4) + (u2*u2)*u3*v3*(v4*v4)) - ...
      (u2*u3*u4*(v1*v1)*v2 - u3*(u4*u4)*(v1*v1)*v2 - ...
         u1*u3*u4*v1*(v2*v2) + u3*(u4*u4)*v1*(v2*v2) - ...
         u1*u2*u4*v1*v2*v3 + u1*(u4*u4)*v1*v2*v3 + ...
         (u1*u1)*u4*(v2*v2)*v3 - u1*(u4*u4)*(v2*v2)*v3 - ...
         (u2*u2)*u3*(v1*v1)*v4 + u2*u3*u4*(v1*v1)*v4 + ...
         u1*u2*u3*v1*v2*v4 + u1*u3*u4*v1*v2*v4 - 2*u2*u3*u4*v1*v2*v4 + ...
         u1*(u2*u2)*v1*v3*v4 - u1*u2*u4*v1*v3*v4 - ...
         (u1*u1)*u2*v2*v3*v4 - (u1*u1)*u4*v2*v3*v4 + ...
         2*u1*u2*u4*v2*v3*v4 - u1*u2*u3*v1*(v4*v4) + ...
         (u2*u2)*u3*v1*(v4*v4) + (u1*u1)*u2*v3*(v4*v4) - ...
         u1*(u2*u2)*v3*(v4*v4))/...
       (u2*(u3*u3)*(v1*v1)*v2 - 2*u2*u3*u4*(v1*v1)*v2 + ...
         u2*(u4*u4)*(v1*v1)*v2 - u1*(u3*u3)*v1*(v2*v2) + ...
         2*u1*u3*u4*v1*(v2*v2) - u1*(u4*u4)*v1*(v2*v2) - ...
         (u2*u2)*u3*(v1*v1)*v3 + 2*u2*u3*u4*(v1*v1)*v3 - ...
         u3*(u4*u4)*(v1*v1)*v3 + 2*u1*u2*u4*v1*v2*v3 - ...
         2*u1*u3*u4*v1*v2*v3 - 2*u2*(u4*u4)*v1*v2*v3 + ...
         2*u3*(u4*u4)*v1*v2*v3 + (u1*u1)*u3*(v2*v2)*v3 - ...
         2*(u1*u1)*u4*(v2*v2)*v3 + 2*u1*(u4*u4)*(v2*v2)*v3 - ...
         u3*(u4*u4)*(v2*v2)*v3 + u1*(u2*u2)*v1*(v3*v3) - ...
         2*u1*u2*u4*v1*(v3*v3) + u1*(u4*u4)*v1*(v3*v3) - ...
         (u1*u1)*u2*v2*(v3*v3) + 2*(u1*u1)*u4*v2*(v3*v3) - ...
         2*u1*(u4*u4)*v2*(v3*v3) + u2*(u4*u4)*v2*(v3*v3) + ...
         2*(u2*u2)*u3*(v1*v1)*v4 - 2*u2*(u3*u3)*(v1*v1)*v4 - ...
         (u2*u2)*u4*(v1*v1)*v4 + (u3*u3)*u4*(v1*v1)*v4 - ...
         2*u1*u2*u3*v1*v2*v4 + 2*u1*(u3*u3)*v1*v2*v4 + ...
         2*u2*u3*u4*v1*v2*v4 - 2*(u3*u3)*u4*v1*v2*v4 + ...
         (u1*u1)*u4*(v2*v2)*v4 - 2*u1*u3*u4*(v2*v2)*v4 + ...
         (u3*u3)*u4*(v2*v2)*v4 - 2*u1*(u2*u2)*v1*v3*v4 + ...
         2*u1*u2*u3*v1*v3*v4 + 2*(u2*u2)*u4*v1*v3*v4 - ...
         2*u2*u3*u4*v1*v3*v4 + 2*(u1*u1)*u2*v2*v3*v4 - ...
         2*(u1*u1)*u3*v2*v3*v4 - 2*u1*u2*u4*v2*v3*v4 + ...
         2*u1*u3*u4*v2*v3*v4 - (u1*u1)*u4*(v3*v3)*v4 + ...
         2*u1*u2*u4*(v3*v3)*v4 - (u2*u2)*u4*(v3*v3)*v4 + ...
         u1*(u2*u2)*v1*(v4*v4) - 2*(u2*u2)*u3*v1*(v4*v4) - ...
         u1*(u3*u3)*v1*(v4*v4) + 2*u2*(u3*u3)*v1*(v4*v4) - ...
         (u1*u1)*u2*v2*(v4*v4) + 2*u1*u2*u3*v2*(v4*v4) - ...
         u2*(u3*u3)*v2*(v4*v4) + (u1*u1)*u3*v3*(v4*v4) - ...
         2*u1*u2*u3*v3*(v4*v4) + (u2*u2)*u3*v3*(v4*v4)) - ...
      (-(u2*u3*u4*(v1*v1)*v3) + u3*(u4*u4)*(v1*v1)*v3 + ...
         u1*u3*u4*v1*v2*v3 - u3*(u4*u4)*v1*v2*v3 + ...
         u1*u2*u4*v1*(v3*v3) - u1*(u4*u4)*v1*(v3*v3) - ...
         (u1*u1)*u4*v2*(v3*v3) + u1*(u4*u4)*v2*(v3*v3) + ...
         u2*(u3*u3)*(v1*v1)*v4 - (u3*u3)*u4*(v1*v1)*v4 - ...
         u1*(u3*u3)*v1*v2*v4 + (u3*u3)*u4*v1*v2*v4 - ...
         u1*u2*u3*v1*v3*v4 + u2*u3*u4*v1*v3*v4 + (u1*u1)*u3*v2*v3*v4 - ...
         u1*u3*u4*v2*v3*v4 + (u1*u1)*u4*(v3*v3)*v4 - ...
         u1*u2*u4*(v3*v3)*v4 + u1*(u3*u3)*v1*(v4*v4) - ...
         u2*(u3*u3)*v1*(v4*v4) - (u1*u1)*u3*v3*(v4*v4) + ...
         u1*u2*u3*v3*(v4*v4))/...
       (u2*(u3*u3)*(v1*v1)*v2 - 2*u2*u3*u4*(v1*v1)*v2 + ...
         u2*(u4*u4)*(v1*v1)*v2 - u1*(u3*u3)*v1*(v2*v2) + ...
         2*u1*u3*u4*v1*(v2*v2) - u1*(u4*u4)*v1*(v2*v2) - ...
         (u2*u2)*u3*(v1*v1)*v3 + 2*u2*u3*u4*(v1*v1)*v3 - ...
         u3*(u4*u4)*(v1*v1)*v3 + 2*u1*u2*u4*v1*v2*v3 - ...
         2*u1*u3*u4*v1*v2*v3 - 2*u2*(u4*u4)*v1*v2*v3 + ...
         2*u3*(u4*u4)*v1*v2*v3 + (u1*u1)*u3*(v2*v2)*v3 - ...
         2*(u1*u1)*u4*(v2*v2)*v3 + 2*u1*(u4*u4)*(v2*v2)*v3 - ...
         u3*(u4*u4)*(v2*v2)*v3 + u1*(u2*u2)*v1*(v3*v3) - ...
         2*u1*u2*u4*v1*(v3*v3) + u1*(u4*u4)*v1*(v3*v3) - ...
         (u1*u1)*u2*v2*(v3*v3) + 2*(u1*u1)*u4*v2*(v3*v3) - ...
         2*u1*(u4*u4)*v2*(v3*v3) + u2*(u4*u4)*v2*(v3*v3) + ...
         2*(u2*u2)*u3*(v1*v1)*v4 - 2*u2*(u3*u3)*(v1*v1)*v4 - ...
         (u2*u2)*u4*(v1*v1)*v4 + (u3*u3)*u4*(v1*v1)*v4 - ...
         2*u1*u2*u3*v1*v2*v4 + 2*u1*(u3*u3)*v1*v2*v4 + ...
         2*u2*u3*u4*v1*v2*v4 - 2*(u3*u3)*u4*v1*v2*v4 + ...
         (u1*u1)*u4*(v2*v2)*v4 - 2*u1*u3*u4*(v2*v2)*v4 + ...
         (u3*u3)*u4*(v2*v2)*v4 - 2*u1*(u2*u2)*v1*v3*v4 + ...
         2*u1*u2*u3*v1*v3*v4 + 2*(u2*u2)*u4*v1*v3*v4 - ...
         2*u2*u3*u4*v1*v3*v4 + 2*(u1*u1)*u2*v2*v3*v4 - ...
         2*(u1*u1)*u3*v2*v3*v4 - 2*u1*u2*u4*v2*v3*v4 + ...
         2*u1*u3*u4*v2*v3*v4 - (u1*u1)*u4*(v3*v3)*v4 + ...
         2*u1*u2*u4*(v3*v3)*v4 - (u2*u2)*u4*(v3*v3)*v4 + ...
         u1*(u2*u2)*v1*(v4*v4) - 2*(u2*u2)*u3*v1*(v4*v4) - ...
         u1*(u3*u3)*v1*(v4*v4) + 2*u2*(u3*u3)*v1*(v4*v4) - ...
         (u1*u1)*u2*v2*(v4*v4) + 2*u1*u2*u3*v2*(v4*v4) - ...
         u2*(u3*u3)*v2*(v4*v4) + (u1*u1)*u3*v3*(v4*v4) - ...
         2*u1*u2*u3*v3*(v4*v4) + (u2*u2)*u3*v3*(v4*v4));

     g_inv = -((-((u2*u2)*(v1*v1)*v3) + u2*u3*(v1*v1)*v3 + ...
           u2*u4*(v1*v1)*v3 - u3*u4*(v1*v1)*v3 + 2*u1*u2*v1*v2*v3 - ...
           u1*u3*v1*v2*v3 - u2*u3*v1*v2*v3 - u1*u4*v1*v2*v3 - ...
           u2*u4*v1*v2*v3 + 2*u3*u4*v1*v2*v3 - (u1*u1)*(v2*v2)*v3 + ...
           u1*u3*(v2*v2)*v3 + u1*u4*(v2*v2)*v3 - ...
           u3*u4*(v2*v2)*v3 - u1*u2*v1*(v3*v3) + ...
           (u2*u2)*v1*(v3*v3) + u1*u4*v1*(v3*v3) - ...
           u2*u4*v1*(v3*v3) + (u1*u1)*v2*(v3*v3) - ...
           u1*u2*v2*(v3*v3) - u1*u4*v2*(v3*v3) + ...
           u2*u4*v2*(v3*v3) + (u2*u2)*(v1*v1)*v4 - ...
           2*u2*u3*(v1*v1)*v4 + (u3*u3)*(v1*v1)*v4 - ...
           2*u1*u2*v1*v2*v4 + 2*u1*u3*v1*v2*v4 + 2*u2*u3*v1*v2*v4 - ...
           2*(u3*u3)*v1*v2*v4 + (u1*u1)*(v2*v2)*v4 - ...
           2*u1*u3*(v2*v2)*v4 + (u3*u3)*(v2*v2)*v4 + ...
           u1*u2*v1*v3*v4 - (u2*u2)*v1*v3*v4 - u1*u3*v1*v3*v4 + ...
           u2*u3*v1*v3*v4 - (u1*u1)*v2*v3*v4 + u1*u2*v2*v3*v4 + ...
           u1*u3*v2*v3*v4 - u2*u3*v2*v3*v4)/...
         (u2*(u3*u3)*(v1*v1)*v2 - 2*u2*u3*u4*(v1*v1)*v2 + ...
           u2*(u4*u4)*(v1*v1)*v2 - u1*(u3*u3)*v1*(v2*v2) + ...
           2*u1*u3*u4*v1*(v2*v2) - u1*(u4*u4)*v1*(v2*v2) - ...
           (u2*u2)*u3*(v1*v1)*v3 + 2*u2*u3*u4*(v1*v1)*v3 - ...
           u3*(u4*u4)*(v1*v1)*v3 + 2*u1*u2*u4*v1*v2*v3 - ...
           2*u1*u3*u4*v1*v2*v3 - 2*u2*(u4*u4)*v1*v2*v3 + ...
           2*u3*(u4*u4)*v1*v2*v3 + (u1*u1)*u3*(v2*v2)*v3 - ...
           2*(u1*u1)*u4*(v2*v2)*v3 + ...
           2*u1*(u4*u4)*(v2*v2)*v3 - u3*(u4*u4)*(v2*v2)*v3 + ...
           u1*(u2*u2)*v1*(v3*v3) - 2*u1*u2*u4*v1*(v3*v3) + ...
           u1*(u4*u4)*v1*(v3*v3) - (u1*u1)*u2*v2*(v3*v3) + ...
           2*(u1*u1)*u4*v2*(v3*v3) - ...
           2*u1*(u4*u4)*v2*(v3*v3) + u2*(u4*u4)*v2*(v3*v3) + ...
           2*(u2*u2)*u3*(v1*v1)*v4 - ...
           2*u2*(u3*u3)*(v1*v1)*v4 - (u2*u2)*u4*(v1*v1)*v4 + ...
           (u3*u3)*u4*(v1*v1)*v4 - 2*u1*u2*u3*v1*v2*v4 + ...
           2*u1*(u3*u3)*v1*v2*v4 + 2*u2*u3*u4*v1*v2*v4 - ...
           2*(u3*u3)*u4*v1*v2*v4 + (u1*u1)*u4*(v2*v2)*v4 - ...
           2*u1*u3*u4*(v2*v2)*v4 + (u3*u3)*u4*(v2*v2)*v4 - ...
           2*u1*(u2*u2)*v1*v3*v4 + 2*u1*u2*u3*v1*v3*v4 + ...
           2*(u2*u2)*u4*v1*v3*v4 - 2*u2*u3*u4*v1*v3*v4 + ...
           2*(u1*u1)*u2*v2*v3*v4 - 2*(u1*u1)*u3*v2*v3*v4 - ...
           2*u1*u2*u4*v2*v3*v4 + 2*u1*u3*u4*v2*v3*v4 - ...
           (u1*u1)*u4*(v3*v3)*v4 + 2*u1*u2*u4*(v3*v3)*v4 - ...
           (u2*u2)*u4*(v3*v3)*v4 + u1*(u2*u2)*v1*(v4*v4) - ...
           2*(u2*u2)*u3*v1*(v4*v4) - u1*(u3*u3)*v1*(v4*v4) + ...
           2*u2*(u3*u3)*v1*(v4*v4) - (u1*u1)*u2*v2*(v4*v4) + ...
           2*u1*u2*u3*v2*(v4*v4) - u2*(u3*u3)*v2*(v4*v4) + ...
           (u1*u1)*u3*v3*(v4*v4) - 2*u1*u2*u3*v3*(v4*v4) + ...
           (u2*u2)*u3*v3*(v4*v4))) - ...
      (-(u2*u3*(v1*v1)*v2) + (u3*u3)*(v1*v1)*v2 + ...
         u2*u4*(v1*v1)*v2 - u3*u4*(v1*v1)*v2 + u1*u3*v1*(v2*v2) - ...
         (u3*u3)*v1*(v2*v2) - u1*u4*v1*(v2*v2) + ...
         u3*u4*v1*(v2*v2) + u1*u2*v1*v2*v3 - 2*u1*u3*v1*v2*v3 + ...
         u2*u3*v1*v2*v3 + u1*u4*v1*v2*v3 - 2*u2*u4*v1*v2*v3 + ...
         u3*u4*v1*v2*v3 - (u1*u1)*(v2*v2)*v3 + u1*u3*(v2*v2)*v3 + ...
         u1*u4*(v2*v2)*v3 - u3*u4*(v2*v2)*v3 + ...
         (u1*u1)*v2*(v3*v3) - u1*u2*v2*(v3*v3) - ...
         u1*u4*v2*(v3*v3) + u2*u4*v2*(v3*v3) - ...
         (u2*u2)*(v1*v1)*v4 + 2*u2*u3*(v1*v1)*v4 - ...
         (u3*u3)*(v1*v1)*v4 + u1*u2*v1*v2*v4 - u1*u3*v1*v2*v4 - ...
         u2*u3*v1*v2*v4 + (u3*u3)*v1*v2*v4 - 2*u1*u2*v1*v3*v4 + ...
         2*(u2*u2)*v1*v3*v4 + 2*u1*u3*v1*v3*v4 - 2*u2*u3*v1*v3*v4 + ...
         (u1*u1)*v2*v3*v4 - u1*u2*v2*v3*v4 - u1*u3*v2*v3*v4 + ...
         u2*u3*v2*v3*v4 - (u1*u1)*(v3*v3)*v4 + ...
         2*u1*u2*(v3*v3)*v4 - (u2*u2)*(v3*v3)*v4)/...
       (u2*(u3*u3)*(v1*v1)*v2 - 2*u2*u3*u4*(v1*v1)*v2 + ...
         u2*(u4*u4)*(v1*v1)*v2 - u1*(u3*u3)*v1*(v2*v2) + ...
         2*u1*u3*u4*v1*(v2*v2) - u1*(u4*u4)*v1*(v2*v2) - ...
         (u2*u2)*u3*(v1*v1)*v3 + 2*u2*u3*u4*(v1*v1)*v3 - ...
         u3*(u4*u4)*(v1*v1)*v3 + 2*u1*u2*u4*v1*v2*v3 - ...
         2*u1*u3*u4*v1*v2*v3 - 2*u2*(u4*u4)*v1*v2*v3 + ...
         2*u3*(u4*u4)*v1*v2*v3 + (u1*u1)*u3*(v2*v2)*v3 - ...
         2*(u1*u1)*u4*(v2*v2)*v3 + 2*u1*(u4*u4)*(v2*v2)*v3 - ...
         u3*(u4*u4)*(v2*v2)*v3 + u1*(u2*u2)*v1*(v3*v3) - ...
         2*u1*u2*u4*v1*(v3*v3) + u1*(u4*u4)*v1*(v3*v3) - ...
         (u1*u1)*u2*v2*(v3*v3) + 2*(u1*u1)*u4*v2*(v3*v3) - ...
         2*u1*(u4*u4)*v2*(v3*v3) + u2*(u4*u4)*v2*(v3*v3) + ...
         2*(u2*u2)*u3*(v1*v1)*v4 - 2*u2*(u3*u3)*(v1*v1)*v4 - ...
         (u2*u2)*u4*(v1*v1)*v4 + (u3*u3)*u4*(v1*v1)*v4 - ...
         2*u1*u2*u3*v1*v2*v4 + 2*u1*(u3*u3)*v1*v2*v4 + ...
         2*u2*u3*u4*v1*v2*v4 - 2*(u3*u3)*u4*v1*v2*v4 + ...
         (u1*u1)*u4*(v2*v2)*v4 - 2*u1*u3*u4*(v2*v2)*v4 + ...
         (u3*u3)*u4*(v2*v2)*v4 - 2*u1*(u2*u2)*v1*v3*v4 + ...
         2*u1*u2*u3*v1*v3*v4 + 2*(u2*u2)*u4*v1*v3*v4 - ...
         2*u2*u3*u4*v1*v3*v4 + 2*(u1*u1)*u2*v2*v3*v4 - ...
         2*(u1*u1)*u3*v2*v3*v4 - 2*u1*u2*u4*v2*v3*v4 + ...
         2*u1*u3*u4*v2*v3*v4 - (u1*u1)*u4*(v3*v3)*v4 + ...
         2*u1*u2*u4*(v3*v3)*v4 - (u2*u2)*u4*(v3*v3)*v4 + ...
         u1*(u2*u2)*v1*(v4*v4) - 2*(u2*u2)*u3*v1*(v4*v4) - ...
         u1*(u3*u3)*v1*(v4*v4) + 2*u2*(u3*u3)*v1*(v4*v4) - ...
         (u1*u1)*u2*v2*(v4*v4) + 2*u1*u2*u3*v2*(v4*v4) - ...
         u2*(u3*u3)*v2*(v4*v4) + (u1*u1)*u3*v3*(v4*v4) - ...
         2*u1*u2*u3*v3*(v4*v4) + (u2*u2)*u3*v3*(v4*v4)) - ...
      (-(u2*u3*(v1*v1)*v3) + u2*u4*(v1*v1)*v3 + ...
         u3*u4*(v1*v1)*v3 - (u4*u4)*(v1*v1)*v3 + u1*u3*v1*v2*v3 - ...
         u1*u4*v1*v2*v3 - u3*u4*v1*v2*v3 + (u4*u4)*v1*v2*v3 + ...
         u1*u2*v1*(v3*v3) - u1*u4*v1*(v3*v3) - u2*u4*v1*(v3*v3) + ...
         (u4*u4)*v1*(v3*v3) - (u1*u1)*v2*(v3*v3) + ...
         2*u1*u4*v2*(v3*v3) - (u4*u4)*v2*(v3*v3) + ...
         u2*u3*(v1*v1)*v4 - (u3*u3)*(v1*v1)*v4 - ...
         u2*u4*(v1*v1)*v4 + u3*u4*(v1*v1)*v4 - u1*u3*v1*v2*v4 + ...
         (u3*u3)*v1*v2*v4 + u1*u4*v1*v2*v4 - u3*u4*v1*v2*v4 - ...
         2*u1*u2*v1*v3*v4 + u1*u3*v1*v3*v4 + u2*u3*v1*v3*v4 + ...
         u1*u4*v1*v3*v4 + u2*u4*v1*v3*v4 - 2*u3*u4*v1*v3*v4 + ...
         2*(u1*u1)*v2*v3*v4 - 2*u1*u3*v2*v3*v4 - 2*u1*u4*v2*v3*v4 + ...
         2*u3*u4*v2*v3*v4 + u1*u2*v1*(v4*v4) - u1*u3*v1*(v4*v4) - ...
         u2*u3*v1*(v4*v4) + (u3*u3)*v1*(v4*v4) - ...
         (u1*u1)*v2*(v4*v4) + 2*u1*u3*v2*(v4*v4) - ...
         (u3*u3)*v2*(v4*v4))/...
       (u2*(u3*u3)*(v1*v1)*v2 - 2*u2*u3*u4*(v1*v1)*v2 + ...
         u2*(u4*u4)*(v1*v1)*v2 - u1*(u3*u3)*v1*(v2*v2) + ...
         2*u1*u3*u4*v1*(v2*v2) - u1*(u4*u4)*v1*(v2*v2) - ...
         (u2*u2)*u3*(v1*v1)*v3 + 2*u2*u3*u4*(v1*v1)*v3 - ...
         u3*(u4*u4)*(v1*v1)*v3 + 2*u1*u2*u4*v1*v2*v3 - ...
         2*u1*u3*u4*v1*v2*v3 - 2*u2*(u4*u4)*v1*v2*v3 + ...
         2*u3*(u4*u4)*v1*v2*v3 + (u1*u1)*u3*(v2*v2)*v3 - ...
         2*(u1*u1)*u4*(v2*v2)*v3 + 2*u1*(u4*u4)*(v2*v2)*v3 - ...
         u3*(u4*u4)*(v2*v2)*v3 + u1*(u2*u2)*v1*(v3*v3) - ...
         2*u1*u2*u4*v1*(v3*v3) + u1*(u4*u4)*v1*(v3*v3) - ...
         (u1*u1)*u2*v2*(v3*v3) + 2*(u1*u1)*u4*v2*(v3*v3) - ...
         2*u1*(u4*u4)*v2*(v3*v3) + u2*(u4*u4)*v2*(v3*v3) + ...
         2*(u2*u2)*u3*(v1*v1)*v4 - 2*u2*(u3*u3)*(v1*v1)*v4 - ...
         (u2*u2)*u4*(v1*v1)*v4 + (u3*u3)*u4*(v1*v1)*v4 - ...
         2*u1*u2*u3*v1*v2*v4 + 2*u1*(u3*u3)*v1*v2*v4 + ...
         2*u2*u3*u4*v1*v2*v4 - 2*(u3*u3)*u4*v1*v2*v4 + ...
         (u1*u1)*u4*(v2*v2)*v4 - 2*u1*u3*u4*(v2*v2)*v4 + ...
         (u3*u3)*u4*(v2*v2)*v4 - 2*u1*(u2*u2)*v1*v3*v4 + ...
         2*u1*u2*u3*v1*v3*v4 + 2*(u2*u2)*u4*v1*v3*v4 - ...
         2*u2*u3*u4*v1*v3*v4 + 2*(u1*u1)*u2*v2*v3*v4 - ...
         2*(u1*u1)*u3*v2*v3*v4 - 2*u1*u2*u4*v2*v3*v4 + ...
         2*u1*u3*u4*v2*v3*v4 - (u1*u1)*u4*(v3*v3)*v4 + ...
         2*u1*u2*u4*(v3*v3)*v4 - (u2*u2)*u4*(v3*v3)*v4 + ...
         u1*(u2*u2)*v1*(v4*v4) - 2*(u2*u2)*u3*v1*(v4*v4) - ...
         u1*(u3*u3)*v1*(v4*v4) + 2*u2*(u3*u3)*v1*(v4*v4) - ...
         (u1*u1)*u2*v2*(v4*v4) + 2*u1*u2*u3*v2*(v4*v4) - ...
         u2*(u3*u3)*v2*(v4*v4) + (u1*u1)*u3*v3*(v4*v4) - ...
         2*u1*u2*u3*v3*(v4*v4) + (u2*u2)*u3*v3*(v4*v4)) - ...
      (u2*u3*(v1*v1)*v2 - u2*u4*(v1*v1)*v2 - u3*u4*(v1*v1)*v2 + ...
         (u4*u4)*(v1*v1)*v2 - u1*u3*v1*(v2*v2) + ...
         u1*u4*v1*(v2*v2) + u3*u4*v1*(v2*v2) - ...
         (u4*u4)*v1*(v2*v2) - u1*u2*v1*v2*v3 + u1*u4*v1*v2*v3 + ...
         u2*u4*v1*v2*v3 - (u4*u4)*v1*v2*v3 + (u1*u1)*(v2*v2)*v3 - ...
         2*u1*u4*(v2*v2)*v3 + (u4*u4)*(v2*v2)*v3 + ...
         (u2*u2)*(v1*v1)*v4 - u2*u3*(v1*v1)*v4 - ...
         u2*u4*(v1*v1)*v4 + u3*u4*(v1*v1)*v4 - u1*u2*v1*v2*v4 + ...
         2*u1*u3*v1*v2*v4 - u2*u3*v1*v2*v4 - u1*u4*v1*v2*v4 + ...
         2*u2*u4*v1*v2*v4 - u3*u4*v1*v2*v4 + u1*u2*v1*v3*v4 - ...
         (u2*u2)*v1*v3*v4 - u1*u4*v1*v3*v4 + u2*u4*v1*v3*v4 - ...
         2*(u1*u1)*v2*v3*v4 + 2*u1*u2*v2*v3*v4 + 2*u1*u4*v2*v3*v4 - ...
         2*u2*u4*v2*v3*v4 + u1*u2*v1*(v4*v4) - ...
         (u2*u2)*v1*(v4*v4) - u1*u3*v1*(v4*v4) + ...
         u2*u3*v1*(v4*v4) + (u1*u1)*v3*(v4*v4) - ...
         2*u1*u2*v3*(v4*v4) + (u2*u2)*v3*(v4*v4))/...
       (u2*(u3*u3)*(v1*v1)*v2 - 2*u2*u3*u4*(v1*v1)*v2 + ...
         u2*(u4*u4)*(v1*v1)*v2 - u1*(u3*u3)*v1*(v2*v2) + ...
         2*u1*u3*u4*v1*(v2*v2) - u1*(u4*u4)*v1*(v2*v2) - ...
         (u2*u2)*u3*(v1*v1)*v3 + 2*u2*u3*u4*(v1*v1)*v3 - ...
         u3*(u4*u4)*(v1*v1)*v3 + 2*u1*u2*u4*v1*v2*v3 - ...
         2*u1*u3*u4*v1*v2*v3 - 2*u2*(u4*u4)*v1*v2*v3 + ...
         2*u3*(u4*u4)*v1*v2*v3 + (u1*u1)*u3*(v2*v2)*v3 - ...
         2*(u1*u1)*u4*(v2*v2)*v3 + 2*u1*(u4*u4)*(v2*v2)*v3 - ...
         u3*(u4*u4)*(v2*v2)*v3 + u1*(u2*u2)*v1*(v3*v3) - ...
         2*u1*u2*u4*v1*(v3*v3) + u1*(u4*u4)*v1*(v3*v3) - ...
         (u1*u1)*u2*v2*(v3*v3) + 2*(u1*u1)*u4*v2*(v3*v3) - ...
         2*u1*(u4*u4)*v2*(v3*v3) + u2*(u4*u4)*v2*(v3*v3) + ...
         2*(u2*u2)*u3*(v1*v1)*v4 - 2*u2*(u3*u3)*(v1*v1)*v4 - ...
         (u2*u2)*u4*(v1*v1)*v4 + (u3*u3)*u4*(v1*v1)*v4 - ...
         2*u1*u2*u3*v1*v2*v4 + 2*u1*(u3*u3)*v1*v2*v4 + ...
         2*u2*u3*u4*v1*v2*v4 - 2*(u3*u3)*u4*v1*v2*v4 + ...
         (u1*u1)*u4*(v2*v2)*v4 - 2*u1*u3*u4*(v2*v2)*v4 + ...
         (u3*u3)*u4*(v2*v2)*v4 - 2*u1*(u2*u2)*v1*v3*v4 + ...
         2*u1*u2*u3*v1*v3*v4 + 2*(u2*u2)*u4*v1*v3*v4 - ...
         2*u2*u3*u4*v1*v3*v4 + 2*(u1*u1)*u2*v2*v3*v4 - ...
         2*(u1*u1)*u3*v2*v3*v4 - 2*u1*u2*u4*v2*v3*v4 + ...
         2*u1*u3*u4*v2*v3*v4 - (u1*u1)*u4*(v3*v3)*v4 + ...
         2*u1*u2*u4*(v3*v3)*v4 - (u2*u2)*u4*(v3*v3)*v4 + ...
         u1*(u2*u2)*v1*(v4*v4) - 2*(u2*u2)*u3*v1*(v4*v4) - ...
         u1*(u3*u3)*v1*(v4*v4) + 2*u2*(u3*u3)*v1*(v4*v4) - ...
         (u1*u1)*u2*v2*(v4*v4) + 2*u1*u2*u3*v2*(v4*v4) - ...
         u2*(u3*u3)*v2*(v4*v4) + (u1*u1)*u3*v3*(v4*v4) - ...
         2*u1*u2*u3*v3*(v4*v4) + (u2*u2)*u3*v3*(v4*v4));

     h_inv = -(((u2*u2)*u3*(v1*v1) - u2*(u3*u3)*(v1*v1) - ...
           (u2*u2)*u4*(v1*v1) + u2*u3*u4*(v1*v1) - ...
           2*u1*u2*u3*v1*v2 + u1*(u3*u3)*v1*v2 + u2*(u3*u3)*v1*v2 + ...
           2*u1*u2*u4*v1*v2 - u1*u3*u4*v1*v2 - u2*u3*u4*v1*v2 + ...
           (u1*u1)*u3*(v2*v2) - u1*(u3*u3)*(v2*v2) - ...
           (u1*u1)*u4*(v2*v2) + u1*u3*u4*(v2*v2) + ...
           u1*u2*u3*v1*v3 - (u2*u2)*u3*v1*v3 - 2*u1*u2*u4*v1*v3 + ...
           2*(u2*u2)*u4*v1*v3 + u1*u3*u4*v1*v3 - u2*u3*u4*v1*v3 - ...
           (u1*u1)*u3*v2*v3 + u1*u2*u3*v2*v3 + 2*(u1*u1)*u4*v2*v3 - ...
           2*u1*u2*u4*v2*v3 - u1*u3*u4*v2*v3 + u2*u3*u4*v2*v3 - ...
           (u1*u1)*u4*(v3*v3) + 2*u1*u2*u4*(v3*v3) - ...
           (u2*u2)*u4*(v3*v3) + u1*u2*u3*v1*v4 - ...
           (u2*u2)*u3*v1*v4 - u1*(u3*u3)*v1*v4 + ...
           u2*(u3*u3)*v1*v4 - (u1*u1)*u3*v2*v4 + u1*u2*u3*v2*v4 + ...
           u1*(u3*u3)*v2*v4 - u2*(u3*u3)*v2*v4 + ...
           (u1*u1)*u3*v3*v4 - 2*u1*u2*u3*v3*v4 + (u2*u2)*u3*v3*v4)/...
         (u2*(u3*u3)*(v1*v1)*v2 - 2*u2*u3*u4*(v1*v1)*v2 + ...
           u2*(u4*u4)*(v1*v1)*v2 - u1*(u3*u3)*v1*(v2*v2) + ...
           2*u1*u3*u4*v1*(v2*v2) - u1*(u4*u4)*v1*(v2*v2) - ...
           (u2*u2)*u3*(v1*v1)*v3 + 2*u2*u3*u4*(v1*v1)*v3 - ...
           u3*(u4*u4)*(v1*v1)*v3 + 2*u1*u2*u4*v1*v2*v3 - ...
           2*u1*u3*u4*v1*v2*v3 - 2*u2*(u4*u4)*v1*v2*v3 + ...
           2*u3*(u4*u4)*v1*v2*v3 + (u1*u1)*u3*(v2*v2)*v3 - ...
           2*(u1*u1)*u4*(v2*v2)*v3 + ...
           2*u1*(u4*u4)*(v2*v2)*v3 - u3*(u4*u4)*(v2*v2)*v3 + ...
           u1*(u2*u2)*v1*(v3*v3) - 2*u1*u2*u4*v1*(v3*v3) + ...
           u1*(u4*u4)*v1*(v3*v3) - (u1*u1)*u2*v2*(v3*v3) + ...
           2*(u1*u1)*u4*v2*(v3*v3) - ...
           2*u1*(u4*u4)*v2*(v3*v3) + u2*(u4*u4)*v2*(v3*v3) + ...
           2*(u2*u2)*u3*(v1*v1)*v4 - ...
           2*u2*(u3*u3)*(v1*v1)*v4 - (u2*u2)*u4*(v1*v1)*v4 + ...
           (u3*u3)*u4*(v1*v1)*v4 - 2*u1*u2*u3*v1*v2*v4 + ...
           2*u1*(u3*u3)*v1*v2*v4 + 2*u2*u3*u4*v1*v2*v4 - ...
           2*(u3*u3)*u4*v1*v2*v4 + (u1*u1)*u4*(v2*v2)*v4 - ...
           2*u1*u3*u4*(v2*v2)*v4 + (u3*u3)*u4*(v2*v2)*v4 - ...
           2*u1*(u2*u2)*v1*v3*v4 + 2*u1*u2*u3*v1*v3*v4 + ...
           2*(u2*u2)*u4*v1*v3*v4 - 2*u2*u3*u4*v1*v3*v4 + ...
           2*(u1*u1)*u2*v2*v3*v4 - 2*(u1*u1)*u3*v2*v3*v4 - ...
           2*u1*u2*u4*v2*v3*v4 + 2*u1*u3*u4*v2*v3*v4 - ...
           (u1*u1)*u4*(v3*v3)*v4 + 2*u1*u2*u4*(v3*v3)*v4 - ...
           (u2*u2)*u4*(v3*v3)*v4 + u1*(u2*u2)*v1*(v4*v4) - ...
           2*(u2*u2)*u3*v1*(v4*v4) - u1*(u3*u3)*v1*(v4*v4) + ...
           2*u2*(u3*u3)*v1*(v4*v4) - (u1*u1)*u2*v2*(v4*v4) + ...
           2*u1*u2*u3*v2*(v4*v4) - u2*(u3*u3)*v2*(v4*v4) + ...
           (u1*u1)*u3*v3*(v4*v4) - 2*u1*u2*u3*v3*(v4*v4) + ...
           (u2*u2)*u3*v3*(v4*v4))) - ...
      ((u2*u2)*u3*(v1*v1) - u2*(u3*u3)*(v1*v1) - ...
         u2*u3*u4*(v1*v1) + (u3*u3)*u4*(v1*v1) - u1*u2*u3*v1*v2 + ...
         u2*(u3*u3)*v1*v2 - u1*u2*u4*v1*v2 + 2*u1*u3*u4*v1*v2 + ...
         u2*u3*u4*v1*v2 - 2*(u3*u3)*u4*v1*v2 + ...
         (u1*u1)*u4*(v2*v2) - 2*u1*u3*u4*(v2*v2) + ...
         (u3*u3)*u4*(v2*v2) - u1*(u2*u2)*v1*v3 + ...
         2*u1*u2*u3*v1*v3 - (u2*u2)*u3*v1*v3 + u1*u2*u4*v1*v3 - ...
         2*u1*u3*u4*v1*v3 + u2*u3*u4*v1*v3 + (u1*u1)*u2*v2*v3 - ...
         u1*u2*u3*v2*v3 - 2*(u1*u1)*u4*v2*v3 + u1*u2*u4*v2*v3 + ...
         2*u1*u3*u4*v2*v3 - u2*u3*u4*v2*v3 - (u1*u1)*u2*(v3*v3) + ...
         u1*(u2*u2)*(v3*v3) + (u1*u1)*u4*(v3*v3) - ...
         u1*u2*u4*(v3*v3) + u1*(u2*u2)*v1*v4 - u1*u2*u3*v1*v4 - ...
         (u2*u2)*u3*v1*v4 + u2*(u3*u3)*v1*v4 - (u1*u1)*u2*v2*v4 + ...
         2*u1*u2*u3*v2*v4 - u2*(u3*u3)*v2*v4 + (u1*u1)*u2*v3*v4 - ...
         u1*(u2*u2)*v3*v4 - u1*u2*u3*v3*v4 + (u2*u2)*u3*v3*v4)/...
       (u2*(u3*u3)*(v1*v1)*v2 - 2*u2*u3*u4*(v1*v1)*v2 + ...
         u2*(u4*u4)*(v1*v1)*v2 - u1*(u3*u3)*v1*(v2*v2) + ...
         2*u1*u3*u4*v1*(v2*v2) - u1*(u4*u4)*v1*(v2*v2) - ...
         (u2*u2)*u3*(v1*v1)*v3 + 2*u2*u3*u4*(v1*v1)*v3 - ...
         u3*(u4*u4)*(v1*v1)*v3 + 2*u1*u2*u4*v1*v2*v3 - ...
         2*u1*u3*u4*v1*v2*v3 - 2*u2*(u4*u4)*v1*v2*v3 + ...
         2*u3*(u4*u4)*v1*v2*v3 + (u1*u1)*u3*(v2*v2)*v3 - ...
         2*(u1*u1)*u4*(v2*v2)*v3 + 2*u1*(u4*u4)*(v2*v2)*v3 - ...
         u3*(u4*u4)*(v2*v2)*v3 + u1*(u2*u2)*v1*(v3*v3) - ...
         2*u1*u2*u4*v1*(v3*v3) + u1*(u4*u4)*v1*(v3*v3) - ...
         (u1*u1)*u2*v2*(v3*v3) + 2*(u1*u1)*u4*v2*(v3*v3) - ...
         2*u1*(u4*u4)*v2*(v3*v3) + u2*(u4*u4)*v2*(v3*v3) + ...
         2*(u2*u2)*u3*(v1*v1)*v4 - 2*u2*(u3*u3)*(v1*v1)*v4 - ...
         (u2*u2)*u4*(v1*v1)*v4 + (u3*u3)*u4*(v1*v1)*v4 - ...
         2*u1*u2*u3*v1*v2*v4 + 2*u1*(u3*u3)*v1*v2*v4 + ...
         2*u2*u3*u4*v1*v2*v4 - 2*(u3*u3)*u4*v1*v2*v4 + ...
         (u1*u1)*u4*(v2*v2)*v4 - 2*u1*u3*u4*(v2*v2)*v4 + ...
         (u3*u3)*u4*(v2*v2)*v4 - 2*u1*(u2*u2)*v1*v3*v4 + ...
         2*u1*u2*u3*v1*v3*v4 + 2*(u2*u2)*u4*v1*v3*v4 - ...
         2*u2*u3*u4*v1*v3*v4 + 2*(u1*u1)*u2*v2*v3*v4 - ...
         2*(u1*u1)*u3*v2*v3*v4 - 2*u1*u2*u4*v2*v3*v4 + ...
         2*u1*u3*u4*v2*v3*v4 - (u1*u1)*u4*(v3*v3)*v4 + ...
         2*u1*u2*u4*(v3*v3)*v4 - (u2*u2)*u4*(v3*v3)*v4 + ...
         u1*(u2*u2)*v1*(v4*v4) - 2*(u2*u2)*u3*v1*(v4*v4) - ...
         u1*(u3*u3)*v1*(v4*v4) + 2*u2*(u3*u3)*v1*(v4*v4) - ...
         (u1*u1)*u2*v2*(v4*v4) + 2*u1*u2*u3*v2*(v4*v4) - ...
         u2*(u3*u3)*v2*(v4*v4) + (u1*u1)*u3*v3*(v4*v4) - ...
         2*u1*u2*u3*v3*(v4*v4) + (u2*u2)*u3*v3*(v4*v4)) - ...
      (-((u2*u2)*u3*(v1*v1)) + 2*u2*u3*u4*(v1*v1) - ...
         u3*(u4*u4)*(v1*v1) + u1*u2*u3*v1*v2 + u1*u2*u4*v1*v2 - ...
         u1*u3*u4*v1*v2 - 2*u2*u3*u4*v1*v2 - u1*(u4*u4)*v1*v2 + ...
         2*u3*(u4*u4)*v1*v2 - (u1*u1)*u4*(v2*v2) + ...
         u1*u3*u4*(v2*v2) + u1*(u4*u4)*(v2*v2) - ...
         u3*(u4*u4)*(v2*v2) + u1*(u2*u2)*v1*v3 - ...
         2*u1*u2*u4*v1*v3 + u1*(u4*u4)*v1*v3 - (u1*u1)*u2*v2*v3 + ...
         (u1*u1)*u4*v2*v3 + u1*u2*u4*v2*v3 - u1*(u4*u4)*v2*v3 - ...
         u1*(u2*u2)*v1*v4 - u1*u2*u3*v1*v4 + 2*(u2*u2)*u3*v1*v4 + ...
         u1*u2*u4*v1*v4 + u1*u3*u4*v1*v4 - 2*u2*u3*u4*v1*v4 + ...
         (u1*u1)*u2*v2*v4 - u1*u2*u3*v2*v4 + (u1*u1)*u4*v2*v4 - ...
         2*u1*u2*u4*v2*v4 - u1*u3*u4*v2*v4 + 2*u2*u3*u4*v2*v4 + ...
         (u1*u1)*u2*v3*v4 - u1*(u2*u2)*v3*v4 - (u1*u1)*u4*v3*v4 + ...
         u1*u2*u4*v3*v4 - (u1*u1)*u2*(v4*v4) + ...
         u1*(u2*u2)*(v4*v4) + u1*u2*u3*(v4*v4) - ...
         (u2*u2)*u3*(v4*v4))/...
       (u2*(u3*u3)*(v1*v1)*v2 - 2*u2*u3*u4*(v1*v1)*v2 + ...
         u2*(u4*u4)*(v1*v1)*v2 - u1*(u3*u3)*v1*(v2*v2) + ...
         2*u1*u3*u4*v1*(v2*v2) - u1*(u4*u4)*v1*(v2*v2) - ...
         (u2*u2)*u3*(v1*v1)*v3 + 2*u2*u3*u4*(v1*v1)*v3 - ...
         u3*(u4*u4)*(v1*v1)*v3 + 2*u1*u2*u4*v1*v2*v3 - ...
         2*u1*u3*u4*v1*v2*v3 - 2*u2*(u4*u4)*v1*v2*v3 + ...
         2*u3*(u4*u4)*v1*v2*v3 + (u1*u1)*u3*(v2*v2)*v3 - ...
         2*(u1*u1)*u4*(v2*v2)*v3 + 2*u1*(u4*u4)*(v2*v2)*v3 - ...
         u3*(u4*u4)*(v2*v2)*v3 + u1*(u2*u2)*v1*(v3*v3) - ...
         2*u1*u2*u4*v1*(v3*v3) + u1*(u4*u4)*v1*(v3*v3) - ...
         (u1*u1)*u2*v2*(v3*v3) + 2*(u1*u1)*u4*v2*(v3*v3) - ...
         2*u1*(u4*u4)*v2*(v3*v3) + u2*(u4*u4)*v2*(v3*v3) + ...
         2*(u2*u2)*u3*(v1*v1)*v4 - 2*u2*(u3*u3)*(v1*v1)*v4 - ...
         (u2*u2)*u4*(v1*v1)*v4 + (u3*u3)*u4*(v1*v1)*v4 - ...
         2*u1*u2*u3*v1*v2*v4 + 2*u1*(u3*u3)*v1*v2*v4 + ...
         2*u2*u3*u4*v1*v2*v4 - 2*(u3*u3)*u4*v1*v2*v4 + ...
         (u1*u1)*u4*(v2*v2)*v4 - 2*u1*u3*u4*(v2*v2)*v4 + ...
         (u3*u3)*u4*(v2*v2)*v4 - 2*u1*(u2*u2)*v1*v3*v4 + ...
         2*u1*u2*u3*v1*v3*v4 + 2*(u2*u2)*u4*v1*v3*v4 - ...
         2*u2*u3*u4*v1*v3*v4 + 2*(u1*u1)*u2*v2*v3*v4 - ...
         2*(u1*u1)*u3*v2*v3*v4 - 2*u1*u2*u4*v2*v3*v4 + ...
         2*u1*u3*u4*v2*v3*v4 - (u1*u1)*u4*(v3*v3)*v4 + ...
         2*u1*u2*u4*(v3*v3)*v4 - (u2*u2)*u4*(v3*v3)*v4 + ...
         u1*(u2*u2)*v1*(v4*v4) - 2*(u2*u2)*u3*v1*(v4*v4) - ...
         u1*(u3*u3)*v1*(v4*v4) + 2*u2*(u3*u3)*v1*(v4*v4) - ...
         (u1*u1)*u2*v2*(v4*v4) + 2*u1*u2*u3*v2*(v4*v4) - ...
         u2*(u3*u3)*v2*(v4*v4) + (u1*u1)*u3*v3*(v4*v4) - ...
         2*u1*u2*u3*v3*(v4*v4) + (u2*u2)*u3*v3*(v4*v4)) - ...
      (u2*(u3*u3)*(v1*v1) - 2*u2*u3*u4*(v1*v1) + ...
         u2*(u4*u4)*(v1*v1) - u1*(u3*u3)*v1*v2 + ...
         2*u1*u3*u4*v1*v2 - u1*(u4*u4)*v1*v2 - u1*u2*u3*v1*v3 + ...
         u1*u2*u4*v1*v3 - u1*u3*u4*v1*v3 + 2*u2*u3*u4*v1*v3 + ...
         u1*(u4*u4)*v1*v3 - 2*u2*(u4*u4)*v1*v3 + ...
         (u1*u1)*u3*v2*v3 - (u1*u1)*u4*v2*v3 - u1*u3*u4*v2*v3 + ...
         u1*(u4*u4)*v2*v3 + (u1*u1)*u4*(v3*v3) - ...
         u1*u2*u4*(v3*v3) - u1*(u4*u4)*(v3*v3) + ...
         u2*(u4*u4)*(v3*v3) + u1*u2*u3*v1*v4 + u1*(u3*u3)*v1*v4 - ...
         2*u2*(u3*u3)*v1*v4 - u1*u2*u4*v1*v4 - u1*u3*u4*v1*v4 + ...
         2*u2*u3*u4*v1*v4 - (u1*u1)*u3*v2*v4 + u1*(u3*u3)*v2*v4 + ...
         (u1*u1)*u4*v2*v4 - u1*u3*u4*v2*v4 - (u1*u1)*u3*v3*v4 + ...
         u1*u2*u3*v3*v4 - (u1*u1)*u4*v3*v4 + u1*u2*u4*v3*v4 + ...
         2*u1*u3*u4*v3*v4 - 2*u2*u3*u4*v3*v4 + (u1*u1)*u3*(v4*v4) - ...
         u1*u2*u3*(v4*v4) - u1*(u3*u3)*(v4*v4) + ...
         u2*(u3*u3)*(v4*v4))/...
       (u2*(u3*u3)*(v1*v1)*v2 - 2*u2*u3*u4*(v1*v1)*v2 + ...
         u2*(u4*u4)*(v1*v1)*v2 - u1*(u3*u3)*v1*(v2*v2) + ...
         2*u1*u3*u4*v1*(v2*v2) - u1*(u4*u4)*v1*(v2*v2) - ...
         (u2*u2)*u3*(v1*v1)*v3 + 2*u2*u3*u4*(v1*v1)*v3 - ...
         u3*(u4*u4)*(v1*v1)*v3 + 2*u1*u2*u4*v1*v2*v3 - ...
         2*u1*u3*u4*v1*v2*v3 - 2*u2*(u4*u4)*v1*v2*v3 + ...
         2*u3*(u4*u4)*v1*v2*v3 + (u1*u1)*u3*(v2*v2)*v3 - ...
         2*(u1*u1)*u4*(v2*v2)*v3 + 2*u1*(u4*u4)*(v2*v2)*v3 - ...
         u3*(u4*u4)*(v2*v2)*v3 + u1*(u2*u2)*v1*(v3*v3) - ...
         2*u1*u2*u4*v1*(v3*v3) + u1*(u4*u4)*v1*(v3*v3) - ...
         (u1*u1)*u2*v2*(v3*v3) + 2*(u1*u1)*u4*v2*(v3*v3) - ...
         2*u1*(u4*u4)*v2*(v3*v3) + u2*(u4*u4)*v2*(v3*v3) + ...
         2*(u2*u2)*u3*(v1*v1)*v4 - 2*u2*(u3*u3)*(v1*v1)*v4 - ...
         (u2*u2)*u4*(v1*v1)*v4 + (u3*u3)*u4*(v1*v1)*v4 - ...
         2*u1*u2*u3*v1*v2*v4 + 2*u1*(u3*u3)*v1*v2*v4 + ...
         2*u2*u3*u4*v1*v2*v4 - 2*(u3*u3)*u4*v1*v2*v4 + ...
         (u1*u1)*u4*(v2*v2)*v4 - 2*u1*u3*u4*(v2*v2)*v4 + ...
         (u3*u3)*u4*(v2*v2)*v4 - 2*u1*(u2*u2)*v1*v3*v4 + ...
         2*u1*u2*u3*v1*v3*v4 + 2*(u2*u2)*u4*v1*v3*v4 - ...
         2*u2*u3*u4*v1*v3*v4 + 2*(u1*u1)*u2*v2*v3*v4 - ...
         2*(u1*u1)*u3*v2*v3*v4 - 2*u1*u2*u4*v2*v3*v4 + ...
         2*u1*u3*u4*v2*v3*v4 - (u1*u1)*u4*(v3*v3)*v4 + ...
         2*u1*u2*u4*(v3*v3)*v4 - (u2*u2)*u4*(v3*v3)*v4 + ...
         u1*(u2*u2)*v1*(v4*v4) - 2*(u2*u2)*u3*v1*(v4*v4) - ...
         u1*(u3*u3)*v1*(v4*v4) + 2*u2*(u3*u3)*v1*(v4*v4) - ...
         (u1*u1)*u2*v2*(v4*v4) + 2*u1*u2*u3*v2*(v4*v4) - ...
         u2*(u3*u3)*v2*(v4*v4) + (u1*u1)*u3*v3*(v4*v4) - ...
         2*u1*u2*u3*v3*(v4*v4) + (u2*u2)*u3*v3*(v4*v4));

