toon-members
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Toon-members] TooN/benchmark solve_ax_equals_b.cc generate_so...


From: Edward Rosten
Subject: [Toon-members] TooN/benchmark solve_ax_equals_b.cc generate_so...
Date: Thu, 02 Apr 2009 13:36:24 +0000

CVSROOT:        /cvsroot/toon
Module name:    TooN
Changes by:     Edward Rosten <edrosten>        09/04/02 13:36:24

Modified files:
        benchmark      : solve_ax_equals_b.cc 
Added files:
        benchmark      : generate_solvers.m solvers.cc 

Log message:
        Added compiled Cramer's rule to benchmarking. Added MATLAB code to 
generate
        the Cramer's rule code using symbolic manipulation. It would appear that
        Cramer's rule is good up to 5x5. At 6x6, the performance is very bad 
and 
        compiling a 6x6 \ 6x1 problem takes 8 minutes.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/TooN/benchmark/solve_ax_equals_b.cc?cvsroot=toon&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/TooN/benchmark/generate_solvers.m?cvsroot=toon&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/TooN/benchmark/solvers.cc?cvsroot=toon&rev=1.1

Patches:
Index: solve_ax_equals_b.cc
===================================================================
RCS file: /cvsroot/toon/TooN/benchmark/solve_ax_equals_b.cc,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- solve_ax_equals_b.cc        1 Apr 2009 19:55:30 -0000       1.5
+++ solve_ax_equals_b.cc        2 Apr 2009 13:36:24 -0000       1.6
@@ -8,6 +8,7 @@
 #include <vector>
 #include <utility>
 #include <string>
+#include <map>
 #include <algorithm>
 #include <iomanip>
 
@@ -27,61 +28,22 @@
 std::tr1::uniform_real<double> rnd;
 double global_sum;
 
+#include "solvers.cc"
 
-struct Do2x2
-{
-       template<int R, int C> static void solve(const Matrix<R, R>& a, const 
Matrix<R, C>& b, Matrix<R, C>& x)
-       {
-               double idet = 1/(a[0][0]*a[1][1] - a[0][1] * a[1][0]);
-               double i00 =  a[1][1] * idet;
-               double i01 = -a[0][1] * idet;
-               double i10 = -a[1][0] * idet;
-               double i11 =  a[0][0] * idet;
-
-               for(int i=0; i < x.num_cols(); i++)
-               {
-                       x[0][i] = b[0][i] * i00 + b[1][i] * i01;
-                       x[1][i] = b[0][i] * i10 + b[1][i] * i11;
-               }
-       }
-
-       static string name()
-       {
-               return "2H";
-       }
-};
 
-struct Do3x3
+struct UseCompiledCramer
 {
        template<int R, int C> static void solve(const Matrix<R, R>& a, const 
Matrix<R, C>& b, Matrix<R, C>& x)
        {
-               double idet = 
a[0][0]*(a[2][2]*a[1][1]-a[2][1]*a[1][2])-a[1][0]*(a[2][2]*a[0][1]-a[2][1]*a[0][2])+a[2][0]*(a[1][2]*a[0][1]-a[1][1]*a[0][2]);
-
-               double i00 =   (a[2][2]*a[1][1]-a[2][1]*a[1][2]) * idet;
-               double i01 =  -(a[2][2]*a[0][1]-a[2][1]*a[0][2]) * idet;
-               double i02 =   (a[1][2]*a[0][1]-a[1][1]*a[0][2]) * idet;
-               double i10 =  -(a[2][2]*a[1][0]-a[2][0]*a[1][2]) * idet;
-               double i11 =   (a[2][2]*a[0][0]-a[2][0]*a[0][2]) * idet;
-               double i12 =  -(a[1][2]*a[0][0]-a[1][0]*a[0][2]) * idet;
-               double i20 =   (a[2][1]*a[1][0]-a[2][0]*a[1][1]) * idet;
-               double i21 =  -(a[2][1]*a[0][0]-a[2][0]*a[0][1]) * idet;
-               double i22 =   (a[1][1]*a[0][0]-a[1][0]*a[0][1]) * idet;
-
-               for(int i=0; i < x.num_cols(); i++)
-               {
-                       x[0][i] = b[0][i] * i00 + b[1][i] * i01 + b[2][i] * i02;
-                       x[1][i] = b[0][i] * i10 + b[1][i] * i11 + b[2][i] * i12;
-                       x[2][i] = b[0][i] * i20 + b[1][i] * i21 + b[2][i] * i22;
-               }
+               solve_direct(a, b, x);
        }
 
        static string name()
        {
-               return "3H";
+               return "CC";
        }
 };
 
-
 struct UseLU
 {
        template<int R, int C> static void solve(const Matrix<R, R>& a, const 
Matrix<R, C>& b, Matrix<R, C>& x)
@@ -160,13 +122,13 @@
        }
 };
 
-template<int Size, int Cols, class Solver> void 
benchmark_ax_eq_b(vector<pair<double, string> >& results)
+template<int Size, int Cols, class Solver> void benchmark_ax_eq_b(map<string, 
vector<double> >& results)
 {
        double time=0, t_tmp, start = get_time_of_day(), t_tmp2;
        double sum=0;
        int n=0;
 
-       while(get_time_of_day() - start < 1)
+       while(get_time_of_day() - start < .1)
        {
                Matrix<Size> a;
                for(int r=0; r < Size; r++)
@@ -196,64 +158,83 @@
                n++;
        }
 
-       results.push_back(make_pair(n/time, Solver::name()));
+       results[Solver::name()].push_back(n/time);
 
        global_sum += sum;      
 }
 
-template<int Size, int C, bool End=0> struct ColIter
+
+
+
+template<int Size, int Cols, typename Solver, bool Use> struct Optional
+{
+       static void solve(map<string, vector<double> >& r)
+       {
+               benchmark_ax_eq_b<Size, Cols, Solver>(r);
+       }
+};
+
+
+template<int Size, int Cols, typename Solver > struct Optional<Size, Cols, 
Solver, 0>
+{
+       static void solve(map<string, vector<double> >&)
+       {
+       }
+};
+
+template<int Size, int C=1, bool End=0> struct ColIter
 {
        static void iter()
        {
                static const int Lin = Size*2;
                static const int Grow = 2;
                static const int Cols = C + (C<=Lin?0:(C-Lin)*(C-Lin)/Grow);
-               vector<pair<double, string> > results;
+               map<string, vector<double> > results;
                cout << Size << "\t" << Cols << "\t";
 
+               //Run each menchmark 10 times and select the median result
+               for(int i=0; i < 10; i++)
+               {
                benchmark_ax_eq_b<Size, Cols, UseGaussJordanInverse>(results);
                benchmark_ax_eq_b<Size, Cols, UseGaussianElimination>(results);
                benchmark_ax_eq_b<Size, Cols, 
UseGaussianEliminationInverse>(results);
                benchmark_ax_eq_b<Size, Cols, UseLUInv>(results);
                benchmark_ax_eq_b<Size, Cols, UseLU>(results);
-               benchmark_ax_eq_b<Size, Cols, Do2x2>(results);
-
-               sort(results.begin(), results.end());
-               for(unsigned int i=0; i < results.size(); i++)
-                       cout << results[i].second << " " << setprecision(5) << 
setw(10) << results[i].first << "            ";
-               cout << endl;
-               ColIter<Size, C+1, (Cols> Size*20)>::iter();
+                       Optional<Size, Cols, UseCompiledCramer, 
(Size<=highest_solver)>::solve(results);
        }
-};
 
-template<int Size,int C> struct ColIter<Size, C, 1>
-{
-       static void iter()
+               vector<pair<double, string> > res;
+               for(map<string, vector<double> >::iterator i=results.begin(); i 
!= results.end(); i++)
        {
+                       sort(i->second.begin(), i->second.end());
+                       res.push_back(make_pair(i->second[i->second.size()/2], 
i->first));
        }
-};
 
 
-template<int Size, bool End=(Size<= 0)> struct SizeIter
-{
-       static void iter()
-       {
-               ColIter<Size, 1>::iter();
-               SizeIter<Size-16>::iter();
+
+               sort(res.begin(), res.end());
+               for(unsigned int i=0; i < res.size(); i++)
+                       cout << res[i].second << " " << setprecision(5) << 
setw(10) << res[i].first << "            ";
+               cout << endl;
+               ColIter<Size, C+1, (Cols> 0)>::iter();
        }
 };
 
-template<int S> struct SizeIter<S, 1>
+template<int Size, int C> struct ColIter<Size, C, 1> 
 {
+
        static void iter()
        {
        }
 };
 
+#ifndef SIZE
+       #define SIZE 2
+#endif
 
 int main()
 {
-       SizeIter<2>::iter();
+       ColIter<SIZE>::iter();
        
        return global_sum != 123456789.0;
 }

Index: generate_solvers.m
===================================================================
RCS file: generate_solvers.m
diff -N generate_solvers.m
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ generate_solvers.m  2 Apr 2009 13:36:24 -0000       1.1
@@ -0,0 +1,93 @@
+clear all 
+out={};
+
+for S=2:5
+       T = num2str(S);
+
+       m=sym(zeros(S,S));
+       for r=1:S
+               for c=1:S
+                       v = [ 'A' num2str(r-1) num2str(c-1) ];
+                       m(r, c) = sym(v);
+               end
+       end
+
+       inverse =simplify(inv(m) * det(m));
+       idet = ccode(det(m));
+
+
+       out{end+1} = [ 'template<int Cols> void solve_direct(const Matrix<' T 
'>& A, const Matrix<' T ', Cols>& b, Matrix<' T ',Cols>& x)' ];
+       out{end+1} = [ '{' ];
+
+       idet = [ idet   '                                      '];
+       q=[];
+       generated = zeros(1,100);
+
+       for i=1:length(idet)
+               if idet(i) >= '0' & idet(i) <= '9'  & (idet(i-1) == 'A' | 
idet(i-2) == 'A')
+                       q = [q '[' idet(i) ']' ];
+               elseif idet(i) == 'M' & idet(i+13) == '=' | idet(i) == 't'
+                       genvar_num  = str2num(idet(i+11));
+
+                       if generated(genvar_num) == 1
+                               q = [q idet(i)];
+                       else
+                               q = [q 'double ' idet(i)];
+                               generated(genvar_num)=1;
+                       end
+
+               elseif idet(i) == ';'
+                       out{end+1} = [q ';'];
+                       q=[];
+               else
+                       q = [q idet(i)];
+               end
+
+       end
+
+       out{end+1} = '  double idet = 1/t0;';
+
+       for r=1:S
+               for c=1:S
+                       
+                       p = ccode(inverse(r,c));
+                       p = [p '                                            '];
+
+                       for i=1:length(p)
+                               if p(i) >= '0' & p(i) <= '9'  & (p(i-1) == 'A' 
| p(i-2) == 'A')
+                                       q = [q '[' p(i) ']' ];
+                               elseif p(i) == ';'
+                                       out{end+1} = [q ';'];
+                                       q=[];
+                               else
+                                       q = [q p(i)];
+                               end
+
+                       end
+
+
+                       out{end+1} = [ '        double i' num2str(r-1) 
num2str(c-1) ' = t0*idet;'];
+               end
+       end
+       
+       out{end+1} = '  for(unsigned int i=0; i < x.num_cols(); i++)';
+       out{end+1} = '  {';
+       for r=1:S
+               row = ['                x[' num2str(r-1) '][i] = '];
+               for c=1:S
+                       row = [row 'i' num2str(r-1) num2str(c-1) '*b[' 
num2str(c-1) '][i] + ' ];
+               end
+               out{end+1} = [row(1:end-3) ';'];
+       end
+       out{end+1} = '  }';
+       out{end+1} = '}';
+end
+
+out{end+1} = [ 'static const int highest_solver= ' T ';'];
+
+slv = fopen('solvers.cc', 'w');
+for i=1:length(out)
+       fprintf(slv, '%s\n', out{i});
+end
+fclose(slv);
+

Index: solvers.cc
===================================================================
RCS file: solvers.cc
diff -N solvers.cc
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ solvers.cc  2 Apr 2009 13:36:24 -0000       1.1
@@ -0,0 +1,162 @@
+template<int Cols> void solve_direct(const Matrix<2>& A, const Matrix<2, 
Cols>& b, Matrix<2,Cols>& x)
+{
+      double t0 = A[0][0]*A[1][1]-A[0][1]*A[1][0];
+       double idet = 1/t0;
+                                            t0 = A[1][1];
+       double i00 = t0*idet;
+                                                  t0 = -A[0][1];
+       double i01 = t0*idet;
+                                                  t0 = -A[1][0];
+       double i10 = t0*idet;
+                                                  t0 = A[0][0];
+       double i11 = t0*idet;
+       for(unsigned int i=0; i < x.num_cols(); i++)
+       {
+               x[0][i] = i00*b[0][i] + i01*b[1][i];
+               x[1][i] = i10*b[0][i] + i11*b[1][i];
+       }
+}
+template<int Cols> void solve_direct(const Matrix<3>& A, const Matrix<3, 
Cols>& b, Matrix<3,Cols>& x)
+{
+      double t0 = 
A[0][0]*A[1][1]*A[2][2]-A[0][0]*A[1][2]*A[2][1]-A[1][0]*A[0][1]*A[2][2]+A[1][0]*A[0][2]*A[2][1]+A[2][0]*A[0][1]*A[1][2]-A[2][0]*A[0][2]*A[1][1];
+       double idet = 1/t0;
+                                            t0 = 
A[1][1]*A[2][2]-A[1][2]*A[2][1];
+       double i00 = t0*idet;
+                                                  t0 = 
-A[0][1]*A[2][2]+A[0][2]*A[2][1];
+       double i01 = t0*idet;
+                                                  t0 = 
A[0][1]*A[1][2]-A[0][2]*A[1][1];
+       double i02 = t0*idet;
+                                                  t0 = 
-A[1][0]*A[2][2]+A[1][2]*A[2][0];
+       double i10 = t0*idet;
+                                                  t0 = 
A[0][0]*A[2][2]-A[0][2]*A[2][0];
+       double i11 = t0*idet;
+                                                  t0 = 
-A[0][0]*A[1][2]+A[0][2]*A[1][0];
+       double i12 = t0*idet;
+                                                  t0 = 
A[1][0]*A[2][1]-A[1][1]*A[2][0];
+       double i20 = t0*idet;
+                                                  t0 = 
-A[0][0]*A[2][1]+A[0][1]*A[2][0];
+       double i21 = t0*idet;
+                                                  t0 = 
A[0][0]*A[1][1]-A[0][1]*A[1][0];
+       double i22 = t0*idet;
+       for(unsigned int i=0; i < x.num_cols(); i++)
+       {
+               x[0][i] = i00*b[0][i] + i01*b[1][i] + i02*b[2][i];
+               x[1][i] = i10*b[0][i] + i11*b[1][i] + i12*b[2][i];
+               x[2][i] = i20*b[0][i] + i21*b[1][i] + i22*b[2][i];
+       }
+}
+template<int Cols> void solve_direct(const Matrix<4>& A, const Matrix<4, 
Cols>& b, Matrix<4,Cols>& x)
+{
+      double t0 = 
A[0][0]*A[1][1]*A[2][2]*A[3][3]-A[0][0]*A[1][1]*A[2][3]*A[3][2]-A[0][0]*A[2][1]*A[1][2]*A[3][3]+A[0][0]*A[2][1]*A[1][3]*A[3][2]+A[0][0]*A[3][1]*A[1][2]*A[2][3]-A[0][0]*A[3][1]*A[1][3]*A[2][2]-A[1][0]*A[0][1]*A[2][2]*A[3][3]+A[1][0]*A[0][1]*A[2][3]*A[3][2]+A[1][0]*A[2][1]*A[0][2]*A[3][3]-A[1][0]*A[2][1]*A[0][3]*A[3][2]-A[1][0]*A[3][1]*A[0][2]*A[2][3]+A[1][0]*A[3][1]*A[0][3]*A[2][2]+A[2][0]*A[0][1]*A[1][2]*A[3][3]-A[2][0]*A[0][1]*A[1][3]*A[3][2]-A[2][0]*A[1][1]*A[0][2]*A[3][3]+A[2][0]*A[1][1]*A[0][3]*A[3][2]+A[2][0]*A[3][1]*A[0][2]*A[1][3]-A[2][0]*A[3][1]*A[0][3]*A[1][2]-A[3][0]*A[0][1]*A[1][2]*A[2][3]+A[3][0]*A[0][1]*A[1][3]*A[2][2]+A[3][0]*A[1][1]*A[0][2]*A[2][3]-A[3][0]*A[1][1]*A[0][3]*A[2][2]-A[3][0]*A[2][1]*A[0][2]*A[1][3]+A[3][0]*A[2][1]*A[0][3]*A[1][2];
+       double idet = 1/t0;
+                                            t0 = 
A[1][1]*A[2][2]*A[3][3]-A[1][1]*A[2][3]*A[3][2]-A[2][1]*A[1][2]*A[3][3]+A[2][1]*A[1][3]*A[3][2]+A[3][1]*A[1][2]*A[2][3]-A[3][1]*A[1][3]*A[2][2];
+       double i00 = t0*idet;
+                                                  t0 = 
-A[0][1]*A[2][2]*A[3][3]+A[0][1]*A[2][3]*A[3][2]+A[2][1]*A[0][2]*A[3][3]-A[2][1]*A[0][3]*A[3][2]-A[3][1]*A[0][2]*A[2][3]+A[3][1]*A[0][3]*A[2][2];
+       double i01 = t0*idet;
+                                                  t0 = 
A[0][1]*A[1][2]*A[3][3]-A[0][1]*A[1][3]*A[3][2]-A[1][1]*A[0][2]*A[3][3]+A[1][1]*A[0][3]*A[3][2]+A[3][1]*A[0][2]*A[1][3]-A[3][1]*A[0][3]*A[1][2];
+       double i02 = t0*idet;
+                                                  t0 = 
-A[0][1]*A[1][2]*A[2][3]+A[0][1]*A[1][3]*A[2][2]+A[1][1]*A[0][2]*A[2][3]-A[1][1]*A[0][3]*A[2][2]-A[2][1]*A[0][2]*A[1][3]+A[2][1]*A[0][3]*A[1][2];
+       double i03 = t0*idet;
+                                                  t0 = 
-A[1][0]*A[2][2]*A[3][3]+A[1][0]*A[2][3]*A[3][2]+A[2][0]*A[1][2]*A[3][3]-A[2][0]*A[1][3]*A[3][2]-A[3][0]*A[1][2]*A[2][3]+A[3][0]*A[1][3]*A[2][2];
+       double i10 = t0*idet;
+                                                  t0 = 
A[0][0]*A[2][2]*A[3][3]-A[0][0]*A[2][3]*A[3][2]-A[2][0]*A[0][2]*A[3][3]+A[2][0]*A[0][3]*A[3][2]+A[3][0]*A[0][2]*A[2][3]-A[3][0]*A[0][3]*A[2][2];
+       double i11 = t0*idet;
+                                                  t0 = 
-A[0][0]*A[1][2]*A[3][3]+A[0][0]*A[1][3]*A[3][2]+A[1][0]*A[0][2]*A[3][3]-A[1][0]*A[0][3]*A[3][2]-A[3][0]*A[0][2]*A[1][3]+A[3][0]*A[0][3]*A[1][2];
+       double i12 = t0*idet;
+                                                  t0 = 
A[0][0]*A[1][2]*A[2][3]-A[0][0]*A[1][3]*A[2][2]-A[1][0]*A[0][2]*A[2][3]+A[1][0]*A[0][3]*A[2][2]+A[2][0]*A[0][2]*A[1][3]-A[2][0]*A[0][3]*A[1][2];
+       double i13 = t0*idet;
+                                                  t0 = 
A[1][0]*A[2][1]*A[3][3]-A[1][0]*A[2][3]*A[3][1]-A[2][0]*A[1][1]*A[3][3]+A[2][0]*A[1][3]*A[3][1]+A[3][0]*A[1][1]*A[2][3]-A[3][0]*A[1][3]*A[2][1];
+       double i20 = t0*idet;
+                                                  t0 = 
-A[0][0]*A[2][1]*A[3][3]+A[0][0]*A[2][3]*A[3][1]+A[2][0]*A[0][1]*A[3][3]-A[2][0]*A[0][3]*A[3][1]-A[3][0]*A[0][1]*A[2][3]+A[3][0]*A[0][3]*A[2][1];
+       double i21 = t0*idet;
+                                                  t0 = 
A[0][0]*A[1][1]*A[3][3]-A[0][0]*A[1][3]*A[3][1]-A[1][0]*A[0][1]*A[3][3]+A[1][0]*A[0][3]*A[3][1]+A[3][0]*A[0][1]*A[1][3]-A[3][0]*A[0][3]*A[1][1];
+       double i22 = t0*idet;
+                                                  t0 = 
-A[0][0]*A[1][1]*A[2][3]+A[0][0]*A[1][3]*A[2][1]+A[1][0]*A[0][1]*A[2][3]-A[1][0]*A[0][3]*A[2][1]-A[2][0]*A[0][1]*A[1][3]+A[2][0]*A[0][3]*A[1][1];
+       double i23 = t0*idet;
+                                                  t0 = 
-A[1][0]*A[2][1]*A[3][2]+A[1][0]*A[2][2]*A[3][1]+A[2][0]*A[1][1]*A[3][2]-A[2][0]*A[1][2]*A[3][1]-A[3][0]*A[1][1]*A[2][2]+A[3][0]*A[1][2]*A[2][1];
+       double i30 = t0*idet;
+                                                  t0 = 
A[0][0]*A[2][1]*A[3][2]-A[0][0]*A[2][2]*A[3][1]-A[2][0]*A[0][1]*A[3][2]+A[2][0]*A[0][2]*A[3][1]+A[3][0]*A[0][1]*A[2][2]-A[3][0]*A[0][2]*A[2][1];
+       double i31 = t0*idet;
+                                                  t0 = 
-A[0][0]*A[1][1]*A[3][2]+A[0][0]*A[1][2]*A[3][1]+A[1][0]*A[0][1]*A[3][2]-A[1][0]*A[0][2]*A[3][1]-A[3][0]*A[0][1]*A[1][2]+A[3][0]*A[0][2]*A[1][1];
+       double i32 = t0*idet;
+                                                  t0 = 
A[0][0]*A[1][1]*A[2][2]-A[0][0]*A[1][2]*A[2][1]-A[1][0]*A[0][1]*A[2][2]+A[1][0]*A[0][2]*A[2][1]+A[2][0]*A[0][1]*A[1][2]-A[2][0]*A[0][2]*A[1][1];
+       double i33 = t0*idet;
+       for(unsigned int i=0; i < x.num_cols(); i++)
+       {
+               x[0][i] = i00*b[0][i] + i01*b[1][i] + i02*b[2][i] + i03*b[3][i];
+               x[1][i] = i10*b[0][i] + i11*b[1][i] + i12*b[2][i] + i13*b[3][i];
+               x[2][i] = i20*b[0][i] + i21*b[1][i] + i22*b[2][i] + i23*b[3][i];
+               x[3][i] = i30*b[0][i] + i31*b[1][i] + i32*b[2][i] + i33*b[3][i];
+       }
+}
+template<int Cols> void solve_direct(const Matrix<5>& A, const Matrix<5, 
Cols>& b, Matrix<5,Cols>& x)
+{
+      double MapleGenVar3 = 
A[1][1]*A[2][2]*A[4][3]*A[3][0]*A[0][4]+A[1][1]*A[2][2]*A[4][0]*A[0][3]*A[3][4]-A[1][1]*A[2][2]*A[3][3]*A[4][0]*A[0][4]-A[1][1]*A[2][2]*A[3][0]*A[0][3]*A[4][4]-A[1][1]*A[3][3]*A[2][0]*A[0][2]*A[4][4]-A[1][1]*A[4][2]*A[2][3]*A[3][0]*A[0][4]-A[1][1]*A[4][0]*A[0][3]*A[3][2]*A[2][4]-A[1][1]*A[4][0]*A[0][2]*A[2][3]*A[3][4]+A[1][1]*A[2][3]*A[3][2]*A[4][0]*A[0][4]-A[1][1]*A[4][3]*A[3][0]*A[0][2]*A[2][4]+A[1][1]*A[3][3]*A[4][2]*A[2][0]*A[0][4]+A[1][1]*A[2][0]*A[0][3]*A[3][2]*A[4][4]-A[1][1]*A[4][3]*A[3][2]*A[2][0]*A[0][4]+A[1][1]*A[3][0]*A[0][2]*A[2][3]*A[4][4]+A[1][1]*A[4][3]*A[2][0]*A[0][2]*A[3][4];
+      double MapleGenVar2 = 
MapleGenVar3+A[1][1]*A[3][3]*A[4][0]*A[0][2]*A[2][4]-A[1][1]*A[4][2]*A[2][0]*A[0][3]*A[3][4]+A[1][1]*A[3][0]*A[0][3]*A[4][2]*A[2][4]-A[2][2]*A[4][3]*A[3][0]*A[0][1]*A[1][4]-A[0][0]*A[4][3]*A[1][2]*A[3][1]*A[2][4]-A[0][0]*A[4][1]*A[1][3]*A[3][2]*A[2][4]-A[2][2]*A[4][1]*A[1][0]*A[0][3]*A[3][4]+A[4][1]*A[1][0]*A[0][3]*A[3][2]*A[2][4]-A[2][2]*A[3][3]*A[1][0]*A[0][1]*A[4][4]-A[2][0]*A[0][1]*A[1][3]*A[3][2]*A[4][4]+A[4][3]*A[3][2]*A[2][0]*A[0][1]*A[1][4]-A[2][0]*A[3][1]*A[0][3]*A[1][2]*A[4][4]-A[2][0]*A[0][3]*A[3][2]*A[4][1]*A[1][4]-A[3][0]*A[0][1]*A[1][2]*A[2][3]*A[4][4]+A[3][1]*A[1][3]*A[2][0]*A[0][2]*A[4][4];
+      MapleGenVar3 = 
MapleGenVar2-A[4][3]*A[2][0]*A[0][1]*A[1][2]*A[3][4]+A[4][1]*A[1][2]*A[2][3]*A[3][0]*A[0][4]-A[3][1]*A[1][2]*A[2][3]*A[4][0]*A[0][4]+A[3][0]*A[0][3]*A[1][2]*A[2][1]*A[4][4]-A[3][0]*A[0][3]*A[4][2]*A[2][1]*A[1][4]-A[3][1]*A[1][3]*A[4][2]*A[2][0]*A[0][4]-A[3][0]*A[0][2]*A[2][3]*A[4][1]*A[1][4]-A[1][0]*A[3][1]*A[0][2]*A[2][3]*A[4][4]-A[1][0]*A[3][1]*A[0][3]*A[4][2]*A[2][4]-A[3][0]*A[0][3]*A[4][1]*A[1][2]*A[2][4]-A[3][1]*A[1][3]*A[4][0]*A[0][2]*A[2][4]+A[4][3]*A[3][2]*A[2][1]*A[1][0]*A[0][4]+A[4][2]*A[1][3]*A[2][1]*A[3][0]*A[0][4]-A[1][0]*A[2][1]*A[0][3]*A[3][2]*A[4][4];
+      double MapleGenVar1 = 
MapleGenVar3-A[3][3]*A[4][0]*A[0][2]*A[2][1]*A[1][4]-A[3][3]*A[4][0]*A[0][1]*A[1][2]*A[2][4]+A[3][3]*A[4][2]*A[1][0]*A[0][1]*A[2][4]-A[3][3]*A[4][2]*A[2][0]*A[0][1]*A[1][4]-A[3][0]*A[2][1]*A[0][2]*A[1][3]*A[4][4]-A[3][0]*A[0][1]*A[1][3]*A[4][2]*A[2][4]+A[4][2]*A[2][3]*A[3][1]*A[1][0]*A[0][4]-A[4][2]*A[2][3]*A[1][0]*A[0][1]*A[3][4]+A[4][2]*A[2][3]*A[3][0]*A[0][1]*A[1][4]+A[4][0]*A[0][1]*A[1][3]*A[3][2]*A[2][4]+A[4][1]*A[1][2]*A[2][0]*A[0][3]*A[3][4]-A[4][3]*A[1][2]*A[2][1]*A[3][0]*A[0][4]-A[4][3]*A[1][0]*A[0][2]*A[2][1]*A[3][4]+A[4][3]*A[1][2]*A[3][1]*A[2][0]*A[0][4]+A[4][3]*A[3][0]*A[0][2]*A[2][1]*A[1][4]+A[3][3]*A[1][2]*A[2][1]*A[4][0]*A[0][4];
+      MapleGenVar3 = 
A[4][0]*A[0][2]*A[2][3]*A[3][1]*A[1][4]-A[4][0]*A[0][3]*A[1][2]*A[2][1]*A[3][4]+A[4][0]*A[0][3]*A[1][2]*A[3][1]*A[2][4]+A[4][0]*A[0][3]*A[3][2]*A[2][1]*A[1][4]+A[4][2]*A[2][0]*A[0][1]*A[1][3]*A[3][4]+A[4][1]*A[1][3]*A[3][0]*A[0][2]*A[2][4]-A[4][1]*A[1][3]*A[2][0]*A[0][2]*A[3][4]+A[3][3]*A[2][0]*A[0][1]*A[1][2]*A[4][4]+A[3][3]*A[2][0]*A[0][2]*A[4][1]*A[1][4]+A[3][3]*A[1][0]*A[0][2]*A[2][1]*A[4][4]-A[3][3]*A[4][1]*A[1][2]*A[2][0]*A[0][4]-A[3][3]*A[4][2]*A[2][1]*A[1][0]*A[0][4]+A[4][2]*A[1][0]*A[0][3]*A[2][1]*A[3][4]-A[2][1]*A[1][3]*A[3][2]*A[4][0]*A[0][4]+A[4][3]*A[1][0]*A[0][2]*A[3][1]*A[2][4];
+      MapleGenVar2 = 
MapleGenVar3+A[4][3]*A[3][0]*A[0][1]*A[1][2]*A[2][4]+A[4][0]*A[0][2]*A[1][3]*A[2][1]*A[3][4]-A[4][3]*A[3][2]*A[1][0]*A[0][1]*A[2][4]-A[4][3]*A[2][0]*A[0][2]*A[3][1]*A[1][4]+A[4][2]*A[2][0]*A[0][3]*A[3][1]*A[1][4]-A[3][3]*A[4][1]*A[1][0]*A[0][2]*A[2][4]+A[2][2]*A[3][3]*A[4][0]*A[0][1]*A[1][4]-A[2][3]*A[3][2]*A[4][1]*A[1][0]*A[0][4]+A[2][3]*A[3][2]*A[1][0]*A[0][1]*A[4][4]-A[2][3]*A[3][2]*A[4][0]*A[0][1]*A[1][4]+A[4][1]*A[1][3]*A[3][2]*A[2][0]*A[0][4]+A[2][2]*A[3][0]*A[0][3]*A[4][1]*A[1][4]+A[2][2]*A[4][3]*A[1][0]*A[0][1]*A[3][4]+A[2][2]*A[1][0]*A[3][1]*A[0][3]*A[4][4]+A[2][2]*A[3][1]*A[1][3]*A[4][0]*A[0][4];
+      MapleGenVar3 = 
A[2][2]*A[3][3]*A[4][1]*A[1][0]*A[0][4]-A[2][2]*A[4][1]*A[1][3]*A[3][0]*A[0][4]-A[2][2]*A[4][0]*A[0][3]*A[3][1]*A[1][4]-A[2][2]*A[4][0]*A[0][1]*A[1][3]*A[3][4]+A[2][2]*A[3][0]*A[0][1]*A[1][3]*A[4][4]-A[2][2]*A[4][3]*A[3][1]*A[1][0]*A[0][4]+A[4][0]*A[0][1]*A[1][2]*A[2][3]*A[3][4]+A[4][1]*A[1][0]*A[0][2]*A[2][3]*A[3][4]-A[0][0]*A[1][1]*A[2][2]*A[4][3]*A[3][4]+A[0][0]*A[1][1]*A[2][2]*A[3][3]*A[4][4]+A[0][0]*A[1][1]*A[4][2]*A[2][3]*A[3][4]-A[0][0]*A[1][1]*A[2][3]*A[3][2]*A[4][4]+A[0][0]*A[1][1]*A[4][3]*A[3][2]*A[2][4]-A[0][0]*A[1][1]*A[3][3]*A[4][2]*A[2][4]-A[0][0]*A[2][2]*A[3][1]*A[1][3]*A[4][4]+A[0][0]*A[2][2]*A[4][3]*A[3][1]*A[1][4];
+      double t0 = 
MapleGenVar3+A[0][0]*A[2][2]*A[4][1]*A[1][3]*A[3][4]-A[0][0]*A[2][2]*A[3][3]*A[4][1]*A[1][4]-A[0][0]*A[4][2]*A[2][3]*A[3][1]*A[1][4]-A[0][0]*A[4][1]*A[1][2]*A[2][3]*A[3][4]+A[0][0]*A[3][3]*A[4][2]*A[2][1]*A[1][4]+A[0][0]*A[2][3]*A[3][2]*A[4][1]*A[1][4]+A[0][0]*A[4][3]*A[1][2]*A[2][1]*A[3][4]-A[0][0]*A[3][3]*A[1][2]*A[2][1]*A[4][4]+A[0][0]*A[3][3]*A[4][1]*A[1][2]*A[2][4]-A[0][0]*A[4][3]*A[3][2]*A[2][1]*A[1][4]+A[0][0]*A[3][1]*A[1][2]*A[2][3]*A[4][4]+A[0][0]*A[3][1]*A[1][3]*A[4][2]*A[2][4]+A[0][0]*A[2][1]*A[1][3]*A[3][2]*A[4][4]-A[0][0]*A[4][2]*A[1][3]*A[2][1]*A[3][4]+MapleGenVar2+MapleGenVar1;
+       double idet = 1/t0;
+                                            t0 = 
-A[1][1]*A[2][2]*A[4][3]*A[3][4]+A[1][1]*A[2][2]*A[3][3]*A[4][4]+A[1][1]*A[4][2]*A[2][3]*A[3][4]-A[1][1]*A[2][3]*A[3][2]*A[4][4]+A[1][1]*A[4][3]*A[3][2]*A[2][4]-A[1][1]*A[3][3]*A[4][2]*A[2][4]-A[2][2]*A[3][1]*A[1][3]*A[4][4]+A[2][2]*A[4][3]*A[3][1]*A[1][4]+A[2][2]*A[4][1]*A[1][3]*A[3][4]-A[2][2]*A[3][3]*A[4][1]*A[1][4]-A[4][2]*A[2][3]*A[3][1]*A[1][4]-A[4][1]*A[1][2]*A[2][3]*A[3][4]+A[3][3]*A[4][2]*A[2][1]*A[1][4]+A[2][3]*A[3][2]*A[4][1]*A[1][4]-A[4][3]*A[1][2]*A[3][1]*A[2][4]+A[4][3]*A[1][2]*A[2][1]*A[3][4]-A[3][3]*A[1][2]*A[2][1]*A[4][4]-A[4][1]*A[1][3]*A[3][2]*A[2][4]+A[3][3]*A[4][1]*A[1][2]*A[2][4]-A[4][3]*A[3][2]*A[2][1]*A[1][4]+A[3][1]*A[1][2]*A[2][3]*A[4][4]+A[3][1]*A[1][3]*A[4][2]*A[2][4]+A[2][1]*A[1][3]*A[3][2]*A[4][4]-A[4][2]*A[1][3]*A[2][1]*A[3][4];
+       double i00 = t0*idet;
+                                                  t0 = 
A[4][4]*A[0][1]*A[2][3]*A[3][2]-A[0][4]*A[2][3]*A[3][2]*A[4][1]+A[2][2]*A[4][4]*A[3][1]*A[0][3]-A[4][4]*A[2][1]*A[0][3]*A[3][2]+A[3][3]*A[4][2]*A[2][4]*A[0][1]-A[4][3]*A[3][4]*A[2][1]*A[0][2]-A[4][4]*A[3][1]*A[0][2]*A[2][3]+A[2][2]*A[3][3]*A[0][4]*A[4][1]-A[4][2]*A[2][3]*A[3][4]*A[0][1]-A[2][2]*A[0][3]*A[3][4]*A[4][1]+A[0][4]*A[4][2]*A[2][3]*A[3][1]+A[0][4]*A[4][3]*A[2][1]*A[3][2]-A[2][2]*A[0][4]*A[4][3]*A[3][1]+A[3][3]*A[4][4]*A[2][1]*A[0][2]+A[0][2]*A[2][3]*A[3][4]*A[4][1]-A[3][3]*A[0][4]*A[4][2]*A[2][1]+A[0][3]*A[3][4]*A[4][2]*A[2][1]+A[2][2]*A[4][3]*A[3][4]*A[0][1]+A[0][2]*A[2][4]*A[4][3]*A[3][1]+A[0][3]*A[3][2]*A[2][4]*A[4][1]-A[2][2]*A[3][3]*A[4][4]*A[0][1]-A[4][3]*A[3][2]*A[2][4]*A[0][1]-A[4][2]*A[2][4]*A[3][1]*A[0][3]-A[3][3]*A[0][2]*A[2][4]*A[4][1];
+       double i01 = t0*idet;
+                                                  t0 = 
A[1][1]*A[3][3]*A[0][4]*A[4][2]-A[1][1]*A[3][3]*A[4][4]*A[0][2]-A[1][1]*A[0][3]*A[3][4]*A[4][2]-A[1][1]*A[0][4]*A[4][3]*A[3][2]+A[1][1]*A[4][4]*A[0][3]*A[3][2]+A[1][1]*A[4][3]*A[3][4]*A[0][2]-A[3][3]*A[0][1]*A[1][4]*A[4][2]-A[3][3]*A[0][4]*A[4][1]*A[1][2]+A[3][3]*A[4][1]*A[1][4]*A[0][2]+A[3][3]*A[4][4]*A[0][1]*A[1][2]-A[4][3]*A[3][4]*A[0][1]*A[1][2]-A[4][1]*A[1][3]*A[3][4]*A[0][2]+A[3][1]*A[1][3]*A[4][4]*A[0][2]+A[0][1]*A[1][3]*A[3][4]*A[4][2]-A[4][4]*A[0][1]*A[1][3]*A[3][2]+A[0][4]*A[4][3]*A[1][2]*A[3][1]-A[4][1]*A[1][4]*A[0][3]*A[3][2]+A[0][4]*A[4][1]*A[1][3]*A[3][2]-A[4][3]*A[3][1]*A[1][4]*A[0][2]+A[0][1]*A[1][4]*A[4][3]*A[3][2]-A[0][4]*A[3][1]*A[1][3]*A[4][2]+A[0][3]*A[3][4]*A[4][1]*A[1][2]-A[4][4]*A[3][1]*A[0][3]*A[1][2]+A[0][3]*A[3][1]*A[1][4]*A[4][2];
+       double i02 = t0*idet;
+                                                  t0 = 
-A[1][1]*A[2][2]*A[4][4]*A[0][3]+A[1][1]*A[2][2]*A[0][4]*A[4][3]-A[1][1]*A[0][4]*A[4][2]*A[2][3]+A[1][1]*A[4][2]*A[2][4]*A[0][3]-A[1][1]*A[0][2]*A[2][4]*A[4][3]+A[1][1]*A[4][4]*A[0][2]*A[2][3]+A[2][2]*A[4][1]*A[1][4]*A[0][3]-A[2][2]*A[0][1]*A[1][4]*A[4][3]-A[2][2]*A[0][4]*A[4][1]*A[1][3]+A[2][2]*A[4][4]*A[0][1]*A[1][3]+A[4][4]*A[2][1]*A[0][3]*A[1][2]+A[0][2]*A[2][1]*A[1][4]*A[4][3]-A[4][1]*A[1][4]*A[0][2]*A[2][3]-A[4][4]*A[0][1]*A[1][2]*A[2][3]+A[0][4]*A[4][2]*A[1][3]*A[2][1]-A[4][2]*A[2][4]*A[0][1]*A[1][3]-A[4][1]*A[1][2]*A[2][4]*A[0][3]-A[4][4]*A[2][1]*A[0][2]*A[1][3]-A[4][2]*A[2][1]*A[1][4]*A[0][3]+A[0][1]*A[1][4]*A[4][2]*A[2][3]-A[0][4]*A[1][2]*A[2][1]*A[4][3]+A[0][1]*A[1][2]*A[2][4]*A[4][3]+A[0][2]*A[2][4]*A[4][1]*A[1][3]+A[0][4]*A[4][1]*A[1][2]*A[2][3];
+       double i03 = t0*idet;
+                                                  t0 = 
A[1][1]*A[2][2]*A[0][3]*A[3][4]-A[1][1]*A[2][2]*A[3][3]*A[0][4]+A[1][1]*A[3][3]*A[0][2]*A[2][4]-A[1][1]*A[0][3]*A[3][2]*A[2][4]-A[1][1]*A[0][2]*A[2][3]*A[3][4]+A[1][1]*A[2][3]*A[3][2]*A[0][4]+A[2][2]*A[3][1]*A[1][3]*A[0][4]-A[2][2]*A[0][1]*A[1][3]*A[3][4]-A[2][2]*A[0][3]*A[3][1]*A[1][4]+A[2][2]*A[3][3]*A[0][1]*A[1][4]+A[0][2]*A[2][3]*A[3][1]*A[1][4]+A[3][3]*A[1][2]*A[2][1]*A[0][4]-A[3][3]*A[0][1]*A[1][2]*A[2][4]-A[3][3]*A[0][2]*A[2][1]*A[1][4]-A[2][3]*A[3][2]*A[0][1]*A[1][4]+A[0][3]*A[1][2]*A[3][1]*A[2][4]+A[0][3]*A[3][2]*A[2][1]*A[1][4]+A[2][1]*A[0][2]*A[1][3]*A[3][4]-A[2][1]*A[1][3]*A[3][2]*A[0][4]-A[3][1]*A[1][3]*A[0][2]*A[2][4]-A[3][1]*A[1][2]*A[2][3]*A[0][4]+A[0][1]*A[1][3]*A[3][2]*A[2][4]+A[0][1]*A[1][2]*A[2][3]*A[3][4]-A[0][3]*A[1][2]*A[2][1]*A[3][4];
+       double i04 = t0*idet;
+                                                  t0 = 
-A[2][2]*A[1][4]*A[4][3]*A[3][0]-A[2][2]*A[3][3]*A[4][4]*A[1][0]-A[4][4]*A[2][0]*A[1][3]*A[3][2]+A[1][4]*A[4][3]*A[2][0]*A[3][2]-A[4][4]*A[3][0]*A[1][2]*A[2][3]-A[4][3]*A[3][4]*A[2][0]*A[1][2]-A[3][3]*A[1][2]*A[2][4]*A[4][0]+A[3][3]*A[4][2]*A[2][4]*A[1][0]-A[3][3]*A[1][4]*A[4][2]*A[2][0]-A[4][2]*A[2][4]*A[3][0]*A[1][3]-A[4][2]*A[2][3]*A[3][4]*A[1][0]+A[1][4]*A[4][2]*A[2][3]*A[3][0]+A[1][3]*A[3][2]*A[2][4]*A[4][0]+A[1][3]*A[3][4]*A[4][2]*A[2][0]+A[3][3]*A[4][4]*A[2][0]*A[1][2]+A[1][2]*A[2][4]*A[4][3]*A[3][0]-A[4][3]*A[3][2]*A[2][4]*A[1][0]+A[2][2]*A[3][3]*A[1][4]*A[4][0]+A[4][4]*A[1][0]*A[2][3]*A[3][2]-A[1][4]*A[2][3]*A[3][2]*A[4][0]+A[2][2]*A[4][3]*A[3][4]*A[1][0]-A[2][2]*A[1][3]*A[3][4]*A[4][0]+A[2][2]*A[4][4]*A[3][0]*A[1][3]+A[1][2]*A[2][3]*A[3][4]*A[4][0];
+       double i10 = t0*idet;
+                                                  t0 = 
A[0][0]*A[2][2]*A[4][4]*A[3][3]-A[0][0]*A[2][2]*A[4][3]*A[3][4]-A[0][0]*A[4][2]*A[2][4]*A[3][3]-A[0][0]*A[4][4]*A[2][3]*A[3][2]+A[0][0]*A[4][3]*A[3][2]*A[2][4]+A[0][0]*A[4][2]*A[2][3]*A[3][4]-A[2][2]*A[4][0]*A[0][4]*A[3][3]-A[2][2]*A[3][0]*A[0][3]*A[4][4]+A[2][2]*A[4][3]*A[3][0]*A[0][4]+A[2][2]*A[4][0]*A[0][3]*A[3][4]-A[3][3]*A[2][0]*A[0][2]*A[4][4]+A[3][3]*A[4][0]*A[0][2]*A[2][4]+A[3][3]*A[4][2]*A[2][0]*A[0][4]+A[2][0]*A[0][3]*A[3][2]*A[4][4]-A[4][0]*A[0][3]*A[3][2]*A[2][4]-A[4][3]*A[3][2]*A[2][0]*A[0][4]+A[3][0]*A[0][2]*A[2][3]*A[4][4]-A[4][3]*A[3][0]*A[0][2]*A[2][4]-A[4][0]*A[0][2]*A[2][3]*A[3][4]-A[4][2]*A[2][3]*A[3][0]*A[0][4]-A[4][2]*A[2][0]*A[0][3]*A[3][4]+A[4][3]*A[2][0]*A[0][2]*A[3][4]+A[3][0]*A[0][3]*A[4][2]*A[2][4]+A[4][0]*A[0][4]*A[2][3]*A[3][2];
+       double i11 = t0*idet;
+                                                  t0 = 
A[0][0]*A[3][3]*A[1][4]*A[4][2]-A[0][0]*A[3][3]*A[4][4]*A[1][2]-A[0][0]*A[1][4]*A[4][3]*A[3][2]+A[0][0]*A[4][4]*A[1][3]*A[3][2]-A[0][0]*A[1][3]*A[3][4]*A[4][2]+A[0][0]*A[4][3]*A[3][4]*A[1][2]+A[3][3]*A[4][0]*A[0][4]*A[1][2]-A[3][3]*A[1][0]*A[0][4]*A[4][2]+A[3][3]*A[4][4]*A[1][0]*A[0][2]-A[3][3]*A[1][4]*A[4][0]*A[0][2]-A[4][3]*A[3][4]*A[1][0]*A[0][2]+A[1][0]*A[0][3]*A[3][4]*A[4][2]+A[1][4]*A[4][3]*A[3][0]*A[0][2]+A[1][4]*A[4][0]*A[0][3]*A[3][2]-A[4][3]*A[3][0]*A[0][4]*A[1][2]+A[1][3]*A[3][0]*A[0][4]*A[4][2]-A[1][4]*A[3][0]*A[0][3]*A[4][2]+A[3][0]*A[0][3]*A[4][4]*A[1][2]+A[1][0]*A[0][4]*A[4][3]*A[3][2]+A[1][3]*A[3][4]*A[4][0]*A[0][2]-A[4][0]*A[0][4]*A[1][3]*A[3][2]-A[4][0]*A[0][3]*A[3][4]*A[1][2]-A[4][4]*A[1][0]*A[0][3]*A[3][2]-A[4][4]*A[3][0]*A[0][2]*A[1][3];
+       double i12 = t0*idet;
+                                                  t0 = 
-A[0][0]*A[2][2]*A[4][4]*A[1][3]+A[0][0]*A[2][2]*A[1][4]*A[4][3]+A[0][0]*A[4][2]*A[2][4]*A[1][3]-A[0][0]*A[1][4]*A[4][2]*A[2][3]-A[0][0]*A[1][2]*A[2][4]*A[4][3]+A[0][0]*A[4][4]*A[1][2]*A[2][3]+A[2][2]*A[4][0]*A[0][4]*A[1][3]-A[2][2]*A[1][0]*A[0][4]*A[4][3]+A[2][2]*A[4][4]*A[1][0]*A[0][3]-A[2][2]*A[1][4]*A[4][0]*A[0][3]+A[2][0]*A[0][2]*A[4][4]*A[1][3]-A[4][4]*A[2][0]*A[0][3]*A[1][2]-A[4][0]*A[0][2]*A[2][4]*A[1][3]+A[1][2]*A[2][4]*A[4][0]*A[0][3]-A[4][2]*A[2][4]*A[1][0]*A[0][3]-A[4][0]*A[0][4]*A[1][2]*A[2][3]+A[1][0]*A[0][2]*A[2][4]*A[4][3]-A[4][4]*A[1][0]*A[0][2]*A[2][3]+A[1][2]*A[2][0]*A[0][4]*A[4][3]+A[1][4]*A[4][0]*A[0][2]*A[2][3]+A[1][4]*A[4][2]*A[2][0]*A[0][3]+A[1][0]*A[0][4]*A[4][2]*A[2][3]-A[1][4]*A[2][0]*A[0][2]*A[4][3]-A[4][2]*A[2][0]*A[0][4]*A[1][3];
+       double i13 = t0*idet;
+                                                  t0 = 
-A[0][0]*A[2][2]*A[3][3]*A[1][4]+A[0][0]*A[2][2]*A[1][3]*A[3][4]+A[0][0]*A[3][3]*A[1][2]*A[2][4]-A[0][0]*A[1][3]*A[3][2]*A[2][4]+A[0][0]*A[2][3]*A[3][2]*A[1][4]-A[0][0]*A[1][2]*A[2][3]*A[3][4]+A[2][2]*A[3][3]*A[1][0]*A[0][4]+A[2][2]*A[3][0]*A[0][3]*A[1][4]-A[2][2]*A[1][3]*A[3][0]*A[0][4]-A[2][2]*A[1][0]*A[0][3]*A[3][4]-A[3][3]*A[1][2]*A[2][0]*A[0][4]+A[3][3]*A[2][0]*A[0][2]*A[1][4]-A[3][3]*A[1][0]*A[0][2]*A[2][4]-A[3][0]*A[0][2]*A[2][3]*A[1][4]-A[3][0]*A[0][3]*A[1][2]*A[2][4]+A[1][2]*A[2][3]*A[3][0]*A[0][4]+A[1][3]*A[3][0]*A[0][2]*A[2][4]+A[2][0]*A[0][3]*A[1][2]*A[3][4]+A[1][0]*A[0][2]*A[2][3]*A[3][4]+A[1][3]*A[3][2]*A[2][0]*A[0][4]-A[2][3]*A[3][2]*A[1][0]*A[0][4]-A[2][0]*A[0][3]*A[3][2]*A[1][4]-A[1][3]*A[2][0]*A[0][2]*A[3][4]+A[1][0]*A[0][3]*A[3][2]*A[2][4];
+       double i14 = t0*idet;
+                                                  t0 = 
-A[1][1]*A[3][3]*A[4][4]*A[2][0]+A[1][1]*A[3][3]*A[2][4]*A[4][0]-A[1][1]*A[2][4]*A[4][3]*A[3][0]-A[1][1]*A[2][3]*A[3][4]*A[4][0]+A[1][1]*A[4][4]*A[3][0]*A[2][3]+A[1][1]*A[4][3]*A[3][4]*A[2][0]-A[3][3]*A[2][1]*A[1][4]*A[4][0]+A[3][3]*A[4][1]*A[1][4]*A[2][0]+A[3][3]*A[4][4]*A[1][0]*A[2][1]-A[3][3]*A[2][4]*A[1][0]*A[4][1]+A[2][3]*A[3][4]*A[1][0]*A[4][1]-A[4][4]*A[1][0]*A[2][3]*A[3][1]+A[2][4]*A[4][1]*A[1][3]*A[3][0]+A[1][3]*A[2][1]*A[3][4]*A[4][0]+A[3][1]*A[1][3]*A[4][4]*A[2][0]-A[4][1]*A[1][4]*A[3][0]*A[2][3]-A[4][4]*A[3][0]*A[1][3]*A[2][1]+A[2][3]*A[3][1]*A[1][4]*A[4][0]+A[2][1]*A[1][4]*A[4][3]*A[3][0]-A[4][3]*A[3][1]*A[1][4]*A[2][0]-A[4][1]*A[1][3]*A[3][4]*A[2][0]+A[2][4]*A[4][3]*A[1][0]*A[3][1]-A[4][3]*A[3][4]*A[1][0]*A[2][1]-A[2][4]*A[3][1]*A[1][3]*A[4][0];
+       double i20 = t0*idet;
+                                                  t0 = 
-A[0][0]*A[3][3]*A[4][4]*A[2][1]-A[2][4]*A[3][0]*A[0][3]*A[4][1]-A[3][3]*A[2][4]*A[4][0]*A[0][1]-A[0][0]*A[2][3]*A[3][4]*A[4][1]+A[2][0]*A[0][4]*A[4][3]*A[3][1]+A[0][0]*A[4][3]*A[3][4]*A[2][1]+A[3][3]*A[4][4]*A[2][0]*A[0][1]+A[0][0]*A[3][3]*A[2][4]*A[4][1]+A[2][0]*A[0][3]*A[3][4]*A[4][1]+A[0][0]*A[4][4]*A[2][3]*A[3][1]+A[2][4]*A[4][3]*A[3][0]*A[0][1]+A[3][3]*A[4][0]*A[0][4]*A[2][1]-A[4][0]*A[0][3]*A[3][4]*A[2][1]-A[4][4]*A[2][0]*A[0][3]*A[3][1]+A[2][4]*A[4][0]*A[0][3]*A[3][1]-A[4][4]*A[3][0]*A[0][1]*A[2][3]-A[4][3]*A[3][0]*A[0][4]*A[2][1]-A[4][3]*A[3][4]*A[2][0]*A[0][1]+A[2][3]*A[3][0]*A[0][4]*A[4][1]-A[4][0]*A[0][4]*A[2][3]*A[3][1]+A[3][0]*A[0][3]*A[4][4]*A[2][1]-A[3][3]*A[2][0]*A[0][4]*A[4][1]-A[0][0]*A[2][4]*A[4][3]*A[3][1]+A[2][3]*A[3][4]*A[4][0]*A[0][1];
+       double i21 = t0*idet;
+                                                  t0 = 
A[0][0]*A[1][1]*A[4][4]*A[3][3]-A[0][0]*A[1][1]*A[4][3]*A[3][4]-A[0][0]*A[4][1]*A[1][4]*A[3][3]-A[0][0]*A[4][4]*A[1][3]*A[3][1]+A[0][0]*A[4][1]*A[1][3]*A[3][4]+A[0][0]*A[4][3]*A[3][1]*A[1][4]-A[1][1]*A[4][0]*A[0][4]*A[3][3]-A[1][1]*A[3][0]*A[0][3]*A[4][4]+A[1][1]*A[4][3]*A[3][0]*A[0][4]+A[1][1]*A[4][0]*A[0][3]*A[3][4]-A[3][3]*A[1][0]*A[0][1]*A[4][4]+A[3][3]*A[4][1]*A[1][0]*A[0][4]+A[3][3]*A[4][0]*A[0][1]*A[1][4]-A[4][3]*A[3][1]*A[1][0]*A[0][4]+A[3][0]*A[0][3]*A[4][1]*A[1][4]-A[4][1]*A[1][0]*A[0][3]*A[3][4]+A[4][0]*A[0][4]*A[1][3]*A[3][1]+A[3][0]*A[0][1]*A[1][3]*A[4][4]-A[4][0]*A[0][3]*A[3][1]*A[1][4]-A[4][3]*A[3][0]*A[0][1]*A[1][4]+A[1][0]*A[3][1]*A[0][3]*A[4][4]-A[4][0]*A[0][1]*A[1][3]*A[3][4]-A[4][1]*A[1][3]*A[3][0]*A[0][4]+A[4][3]*A[1][0]*A[0][1]*A[3][4];
+       double i22 = t0*idet;
+                                                  t0 = 
-A[0][0]*A[1][1]*A[4][4]*A[2][3]+A[0][0]*A[1][1]*A[2][4]*A[4][3]-A[0][0]*A[2][4]*A[4][1]*A[1][3]-A[0][0]*A[2][1]*A[1][4]*A[4][3]+A[0][0]*A[4][1]*A[1][4]*A[2][3]+A[0][0]*A[4][4]*A[1][3]*A[2][1]-A[1][1]*A[2][0]*A[0][4]*A[4][3]+A[1][1]*A[4][4]*A[2][0]*A[0][3]-A[1][1]*A[2][4]*A[4][0]*A[0][3]+A[1][1]*A[4][0]*A[0][4]*A[2][3]-A[4][1]*A[1][4]*A[2][0]*A[0][3]-A[2][4]*A[1][0]*A[0][1]*A[4][3]-A[4][0]*A[0][1]*A[1][4]*A[2][3]+A[2][1]*A[1][4]*A[4][0]*A[0][3]+A[2][0]*A[0][4]*A[4][1]*A[1][3]+A[2][1]*A[1][0]*A[0][4]*A[4][3]+A[2][0]*A[0][1]*A[1][4]*A[4][3]-A[4][4]*A[1][0]*A[0][3]*A[2][1]-A[4][4]*A[2][0]*A[0][1]*A[1][3]-A[4][0]*A[0][4]*A[1][3]*A[2][1]+A[2][4]*A[4][0]*A[0][1]*A[1][3]-A[4][1]*A[1][0]*A[0][4]*A[2][3]+A[1][0]*A[0][1]*A[4][4]*A[2][3]+A[2][4]*A[4][1]*A[1][0]*A[0][3];
+       double i23 = t0*idet;
+                                                  t0 = 
-A[0][0]*A[1][1]*A[3][3]*A[2][4]+A[0][0]*A[1][1]*A[2][3]*A[3][4]+A[0][0]*A[3][3]*A[2][1]*A[1][4]-A[0][0]*A[2][3]*A[3][1]*A[1][4]-A[0][0]*A[1][3]*A[2][1]*A[3][4]+A[0][0]*A[3][1]*A[1][3]*A[2][4]+A[1][1]*A[3][3]*A[2][0]*A[0][4]-A[1][1]*A[2][0]*A[0][3]*A[3][4]+A[1][1]*A[3][0]*A[0][3]*A[2][4]-A[1][1]*A[2][3]*A[3][0]*A[0][4]+A[3][3]*A[1][0]*A[0][1]*A[2][4]-A[3][3]*A[2][0]*A[0][1]*A[1][4]-A[3][3]*A[2][1]*A[1][0]*A[0][4]-A[1][0]*A[3][1]*A[0][3]*A[2][4]+A[2][0]*A[0][3]*A[3][1]*A[1][4]-A[3][1]*A[1][3]*A[2][0]*A[0][4]+A[2][0]*A[0][1]*A[1][3]*A[3][4]+A[2][3]*A[3][1]*A[1][0]*A[0][4]-A[2][3]*A[1][0]*A[0][1]*A[3][4]+A[1][3]*A[2][1]*A[3][0]*A[0][4]-A[3][0]*A[0][1]*A[1][3]*A[2][4]-A[3][0]*A[0][3]*A[2][1]*A[1][4]+A[2][3]*A[3][0]*A[0][1]*A[1][4]+A[1][0]*A[0][3]*A[2][1]*A[3][4];
+       double i24 = t0*idet;
+                                                  t0 = 
A[1][1]*A[2][2]*A[3][4]*A[4][0]-A[1][1]*A[2][2]*A[4][4]*A[3][0]-A[1][1]*A[3][4]*A[4][2]*A[2][0]-A[1][1]*A[3][2]*A[2][4]*A[4][0]+A[1][1]*A[4][4]*A[2][0]*A[3][2]+A[1][1]*A[4][2]*A[2][4]*A[3][0]-A[2][2]*A[3][1]*A[1][4]*A[4][0]-A[2][2]*A[3][4]*A[1][0]*A[4][1]+A[2][2]*A[4][4]*A[1][0]*A[3][1]+A[2][2]*A[4][1]*A[1][4]*A[3][0]-A[4][1]*A[1][4]*A[2][0]*A[3][2]-A[4][4]*A[2][0]*A[1][2]*A[3][1]+A[3][4]*A[4][2]*A[1][0]*A[2][1]+A[3][2]*A[2][4]*A[1][0]*A[4][1]+A[4][4]*A[3][0]*A[1][2]*A[2][1]-A[4][2]*A[2][4]*A[1][0]*A[3][1]-A[4][1]*A[1][2]*A[2][4]*A[3][0]+A[1][2]*A[3][1]*A[2][4]*A[4][0]-A[4][4]*A[1][0]*A[2][1]*A[3][2]+A[3][1]*A[1][4]*A[4][2]*A[2][0]+A[3][2]*A[2][1]*A[1][4]*A[4][0]+A[3][4]*A[4][1]*A[1][2]*A[2][0]-A[4][2]*A[2][1]*A[1][4]*A[3][0]-A[3][4]*A[1][2]*A[2][1]*A[4][0];
+       double i30 = t0*idet;
+                                                  t0 = 
-A[0][0]*A[2][2]*A[4][4]*A[3][1]+A[0][0]*A[2][2]*A[3][4]*A[4][1]+A[0][0]*A[4][4]*A[2][1]*A[3][2]-A[0][0]*A[3][2]*A[2][4]*A[4][1]+A[0][0]*A[4][2]*A[2][4]*A[3][1]-A[0][0]*A[3][4]*A[4][2]*A[2][1]-A[2][2]*A[3][4]*A[4][0]*A[0][1]+A[2][2]*A[4][0]*A[0][4]*A[3][1]-A[2][2]*A[3][0]*A[0][4]*A[4][1]+A[2][2]*A[4][4]*A[3][0]*A[0][1]-A[3][4]*A[2][0]*A[0][2]*A[4][1]-A[4][0]*A[0][4]*A[2][1]*A[3][2]-A[4][4]*A[2][0]*A[0][1]*A[3][2]-A[4][2]*A[2][4]*A[3][0]*A[0][1]+A[2][0]*A[0][2]*A[4][4]*A[3][1]-A[4][0]*A[0][2]*A[2][4]*A[3][1]-A[4][2]*A[2][0]*A[0][4]*A[3][1]+A[3][2]*A[2][4]*A[4][0]*A[0][1]-A[4][4]*A[3][0]*A[0][2]*A[2][1]+A[3][4]*A[4][2]*A[2][0]*A[0][1]+A[3][2]*A[2][0]*A[0][4]*A[4][1]+A[3][0]*A[0][2]*A[2][4]*A[4][1]+A[3][4]*A[4][0]*A[0][2]*A[2][1]+A[3][0]*A[0][4]*A[4][2]*A[2][1];
+       double i31 = t0*idet;
+                                                  t0 = 
-A[0][0]*A[1][1]*A[4][4]*A[3][2]+A[0][0]*A[1][1]*A[3][4]*A[4][2]+A[0][0]*A[4][4]*A[1][2]*A[3][1]-A[0][0]*A[3][1]*A[1][4]*A[4][2]+A[0][0]*A[4][1]*A[1][4]*A[3][2]-A[0][0]*A[3][4]*A[4][1]*A[1][2]-A[1][1]*A[3][4]*A[4][0]*A[0][2]-A[1][1]*A[3][0]*A[0][4]*A[4][2]+A[1][1]*A[4][0]*A[0][4]*A[3][2]+A[1][1]*A[4][4]*A[3][0]*A[0][2]+A[3][4]*A[4][1]*A[1][0]*A[0][2]+A[3][0]*A[0][1]*A[1][4]*A[4][2]-A[4][1]*A[1][4]*A[3][0]*A[0][2]+A[3][4]*A[4][0]*A[0][1]*A[1][2]+A[3][0]*A[0][4]*A[4][1]*A[1][2]-A[3][4]*A[1][0]*A[0][1]*A[4][2]-A[4][0]*A[0][4]*A[1][2]*A[3][1]+A[1][0]*A[0][1]*A[4][4]*A[3][2]-A[4][0]*A[0][1]*A[1][4]*A[3][2]+A[3][1]*A[1][0]*A[0][4]*A[4][2]-A[4][4]*A[1][0]*A[0][2]*A[3][1]-A[4][4]*A[3][0]*A[0][1]*A[1][2]+A[3][1]*A[1][4]*A[4][0]*A[0][2]-A[4][1]*A[1][0]*A[0][4]*A[3][2];
+       double i32 = t0*idet;
+                                                  t0 = 
A[0][0]*A[1][1]*A[4][4]*A[2][2]-A[0][0]*A[1][1]*A[4][2]*A[2][4]-A[0][0]*A[4][1]*A[1][4]*A[2][2]+A[0][0]*A[4][1]*A[1][2]*A[2][4]+A[0][0]*A[4][2]*A[2][1]*A[1][4]-A[0][0]*A[1][2]*A[2][1]*A[4][4]-A[1][1]*A[4][0]*A[0][4]*A[2][2]-A[1][1]*A[2][0]*A[0][2]*A[4][4]+A[1][1]*A[4][0]*A[0][2]*A[2][4]+A[1][1]*A[4][2]*A[2][0]*A[0][4]-A[2][2]*A[1][0]*A[0][1]*A[4][4]+A[2][2]*A[4][1]*A[1][0]*A[0][4]+A[2][2]*A[4][0]*A[0][1]*A[1][4]+A[4][2]*A[1][0]*A[0][1]*A[2][4]-A[4][0]*A[0][1]*A[1][2]*A[2][4]-A[4][2]*A[2][1]*A[1][0]*A[0][4]-A[4][0]*A[0][2]*A[2][1]*A[1][4]+A[2][0]*A[0][1]*A[1][2]*A[4][4]+A[1][2]*A[2][1]*A[4][0]*A[0][4]-A[4][1]*A[1][0]*A[0][2]*A[2][4]+A[2][0]*A[0][2]*A[4][1]*A[1][4]-A[4][2]*A[2][0]*A[0][1]*A[1][4]+A[1][0]*A[0][2]*A[2][1]*A[4][4]-A[4][1]*A[1][2]*A[2][0]*A[0][4];
+       double i33 = t0*idet;
+                                                  t0 = 
-A[0][0]*A[1][1]*A[2][2]*A[3][4]+A[0][0]*A[1][1]*A[3][2]*A[2][4]+A[0][0]*A[2][2]*A[3][1]*A[1][4]+A[0][0]*A[1][2]*A[2][1]*A[3][4]-A[0][0]*A[1][2]*A[3][1]*A[2][4]-A[0][0]*A[3][2]*A[2][1]*A[1][4]+A[1][1]*A[2][2]*A[3][0]*A[0][4]-A[1][1]*A[3][0]*A[0][2]*A[2][4]+A[1][1]*A[2][0]*A[0][2]*A[3][4]-A[1][1]*A[3][2]*A[2][0]*A[0][4]+A[2][2]*A[1][0]*A[0][1]*A[3][4]-A[2][2]*A[3][0]*A[0][1]*A[1][4]-A[2][2]*A[3][1]*A[1][0]*A[0][4]+A[3][0]*A[0][1]*A[1][2]*A[2][4]-A[2][0]*A[0][2]*A[3][1]*A[1][4]-A[1][0]*A[0][2]*A[2][1]*A[3][4]-A[2][0]*A[0][1]*A[1][2]*A[3][4]+A[3][2]*A[2][0]*A[0][1]*A[1][4]+A[1][2]*A[3][1]*A[2][0]*A[0][4]+A[3][0]*A[0][2]*A[2][1]*A[1][4]+A[1][0]*A[0][2]*A[3][1]*A[2][4]+A[3][2]*A[2][1]*A[1][0]*A[0][4]-A[1][2]*A[2][1]*A[3][0]*A[0][4]-A[3][2]*A[1][0]*A[0][1]*A[2][4];
+       double i34 = t0*idet;
+                                                  t0 = 
A[1][1]*A[2][2]*A[4][3]*A[3][0]-A[1][1]*A[2][2]*A[3][3]*A[4][0]-A[1][1]*A[4][3]*A[2][0]*A[3][2]-A[1][1]*A[4][2]*A[2][3]*A[3][0]+A[1][1]*A[3][3]*A[4][2]*A[2][0]+A[1][1]*A[2][3]*A[3][2]*A[4][0]-A[2][2]*A[4][3]*A[1][0]*A[3][1]+A[2][2]*A[3][3]*A[1][0]*A[4][1]+A[2][2]*A[3][1]*A[1][3]*A[4][0]-A[2][2]*A[4][1]*A[1][3]*A[3][0]-A[3][3]*A[4][2]*A[1][0]*A[2][1]+A[4][3]*A[1][0]*A[2][1]*A[3][2]+A[4][3]*A[2][0]*A[1][2]*A[3][1]+A[4][1]*A[1][2]*A[2][3]*A[3][0]+A[4][1]*A[1][3]*A[2][0]*A[3][2]-A[3][3]*A[4][1]*A[1][2]*A[2][0]+A[3][3]*A[1][2]*A[2][1]*A[4][0]-A[2][3]*A[3][2]*A[1][0]*A[4][1]-A[2][1]*A[1][3]*A[3][2]*A[4][0]-A[3][1]*A[1][3]*A[4][2]*A[2][0]-A[4][3]*A[3][0]*A[1][2]*A[2][1]+A[4][2]*A[2][3]*A[1][0]*A[3][1]-A[3][1]*A[1][2]*A[2][3]*A[4][0]+A[4][2]*A[1][3]*A[2][1]*A[3][0];
+       double i40 = t0*idet;
+                                                  t0 = 
-A[0][0]*A[2][2]*A[3][3]*A[4][1]+A[0][0]*A[2][2]*A[4][3]*A[3][1]-A[0][0]*A[4][3]*A[2][1]*A[3][2]-A[0][0]*A[4][2]*A[2][3]*A[3][1]+A[0][0]*A[3][3]*A[4][2]*A[2][1]+A[0][0]*A[2][3]*A[3][2]*A[4][1]-A[2][2]*A[4][0]*A[0][3]*A[3][1]+A[2][2]*A[3][0]*A[0][3]*A[4][1]-A[2][2]*A[4][3]*A[3][0]*A[0][1]+A[2][2]*A[3][3]*A[4][0]*A[0][1]+A[4][3]*A[3][0]*A[0][2]*A[2][1]-A[3][3]*A[4][0]*A[0][2]*A[2][1]+A[3][3]*A[2][0]*A[0][2]*A[4][1]+A[4][2]*A[2][0]*A[0][3]*A[3][1]+A[4][0]*A[0][3]*A[2][1]*A[3][2]-A[3][3]*A[4][2]*A[2][0]*A[0][1]-A[2][3]*A[3][2]*A[4][0]*A[0][1]+A[4][3]*A[2][0]*A[0][1]*A[3][2]-A[3][0]*A[0][3]*A[4][2]*A[2][1]+A[4][0]*A[0][2]*A[2][3]*A[3][1]-A[2][0]*A[0][3]*A[3][2]*A[4][1]-A[3][0]*A[0][2]*A[2][3]*A[4][1]-A[4][3]*A[2][0]*A[0][2]*A[3][1]+A[4][2]*A[2][3]*A[3][0]*A[0][1];
+       double i41 = t0*idet;
+                                                  t0 = 
A[0][0]*A[1][1]*A[4][3]*A[3][2]-A[0][0]*A[1][1]*A[3][3]*A[4][2]-A[0][0]*A[4][1]*A[1][3]*A[3][2]+A[0][0]*A[3][3]*A[4][1]*A[1][2]-A[0][0]*A[4][3]*A[1][2]*A[3][1]+A[0][0]*A[3][1]*A[1][3]*A[4][2]+A[1][1]*A[3][3]*A[4][0]*A[0][2]+A[1][1]*A[3][0]*A[0][3]*A[4][2]-A[1][1]*A[4][3]*A[3][0]*A[0][2]-A[1][1]*A[4][0]*A[0][3]*A[3][2]-A[3][3]*A[4][1]*A[1][0]*A[0][2]+A[4][0]*A[0][3]*A[1][2]*A[3][1]-A[1][0]*A[3][1]*A[0][3]*A[4][2]-A[3][3]*A[4][0]*A[0][1]*A[1][2]+A[3][3]*A[1][0]*A[0][1]*A[4][2]+A[4][3]*A[3][0]*A[0][1]*A[1][2]-A[3][0]*A[0][3]*A[4][1]*A[1][2]+A[4][1]*A[1][0]*A[0][3]*A[3][2]-A[3][0]*A[0][1]*A[1][3]*A[4][2]-A[3][1]*A[1][3]*A[4][0]*A[0][2]+A[4][1]*A[1][3]*A[3][0]*A[0][2]+A[4][3]*A[1][0]*A[0][2]*A[3][1]+A[4][0]*A[0][1]*A[1][3]*A[3][2]-A[4][3]*A[1][0]*A[0][1]*A[3][2];
+       double i42 = t0*idet;
+                                                  t0 = 
-A[0][0]*A[1][1]*A[2][2]*A[4][3]+A[0][0]*A[1][1]*A[4][2]*A[2][3]-A[0][0]*A[4][2]*A[1][3]*A[2][1]-A[0][0]*A[4][1]*A[1][2]*A[2][3]+A[0][0]*A[2][2]*A[4][1]*A[1][3]+A[0][0]*A[1][2]*A[2][1]*A[4][3]+A[1][1]*A[2][0]*A[0][2]*A[4][3]-A[1][1]*A[4][2]*A[2][0]*A[0][3]-A[1][1]*A[4][0]*A[0][2]*A[2][3]+A[1][1]*A[2][2]*A[4][0]*A[0][3]+A[4][2]*A[2][0]*A[0][1]*A[1][3]+A[4][1]*A[1][2]*A[2][0]*A[0][3]+A[4][0]*A[0][1]*A[1][2]*A[2][3]+A[4][1]*A[1][0]*A[0][2]*A[2][3]-A[2][2]*A[4][1]*A[1][0]*A[0][3]+A[2][2]*A[1][0]*A[0][1]*A[4][3]-A[2][2]*A[4][0]*A[0][1]*A[1][3]-A[1][2]*A[2][1]*A[4][0]*A[0][3]-A[1][0]*A[0][2]*A[2][1]*A[4][3]-A[2][0]*A[0][2]*A[4][1]*A[1][3]-A[2][0]*A[0][1]*A[1][2]*A[4][3]-A[4][2]*A[1][0]*A[0][1]*A[2][3]+A[4][2]*A[1][0]*A[0][3]*A[2][1]+A[4][0]*A[0][2]*A[1][3]*A[2][1];
+       double i43 = t0*idet;
+                                                  t0 = 
A[0][0]*A[1][1]*A[2][2]*A[3][3]-A[0][0]*A[1][1]*A[2][3]*A[3][2]-A[0][0]*A[2][1]*A[1][2]*A[3][3]+A[0][0]*A[2][1]*A[1][3]*A[3][2]+A[0][0]*A[3][1]*A[1][2]*A[2][3]-A[0][0]*A[3][1]*A[1][3]*A[2][2]-A[1][0]*A[0][1]*A[2][2]*A[3][3]+A[1][0]*A[0][1]*A[2][3]*A[3][2]+A[1][0]*A[2][1]*A[0][2]*A[3][3]-A[1][0]*A[2][1]*A[0][3]*A[3][2]-A[1][0]*A[3][1]*A[0][2]*A[2][3]+A[1][0]*A[3][1]*A[0][3]*A[2][2]+A[2][0]*A[0][1]*A[1][2]*A[3][3]-A[2][0]*A[0][1]*A[1][3]*A[3][2]-A[2][0]*A[1][1]*A[0][2]*A[3][3]+A[2][0]*A[1][1]*A[0][3]*A[3][2]+A[2][0]*A[3][1]*A[0][2]*A[1][3]-A[2][0]*A[3][1]*A[0][3]*A[1][2]-A[3][0]*A[0][1]*A[1][2]*A[2][3]+A[3][0]*A[0][1]*A[1][3]*A[2][2]+A[3][0]*A[1][1]*A[0][2]*A[2][3]-A[3][0]*A[1][1]*A[0][3]*A[2][2]-A[3][0]*A[2][1]*A[0][2]*A[1][3]+A[3][0]*A[2][1]*A[0][3]*A[1][2];
+       double i44 = t0*idet;
+       for(unsigned int i=0; i < x.num_cols(); i++)
+       {
+               x[0][i] = i00*b[0][i] + i01*b[1][i] + i02*b[2][i] + i03*b[3][i] 
+ i04*b[4][i];
+               x[1][i] = i10*b[0][i] + i11*b[1][i] + i12*b[2][i] + i13*b[3][i] 
+ i14*b[4][i];
+               x[2][i] = i20*b[0][i] + i21*b[1][i] + i22*b[2][i] + i23*b[3][i] 
+ i24*b[4][i];
+               x[3][i] = i30*b[0][i] + i31*b[1][i] + i32*b[2][i] + i33*b[3][i] 
+ i34*b[4][i];
+               x[4][i] = i40*b[0][i] + i41*b[1][i] + i42*b[2][i] + i43*b[3][i] 
+ i44*b[4][i];
+       }
+}
+static const int highest_solver= 5;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]