[Top][All Lists]
[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;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Toon-members] TooN/benchmark solve_ax_equals_b.cc generate_so...,
Edward Rosten <=