3#include <cgv/math/mat.h>
4#include <cgv/math/perm_mat.h>
5#include <cgv/math/low_tri_mat.h>
6#include <cgv/math/up_tri_mat.h>
7#include <cgv/math/vec.h>
17bool lu(
const mat<T> &a,perm_mat& p, low_tri_mat<T>& l, up_tri_mat<T>& u)
21 unsigned n = a.nrows();
22 unsigned m = a.ncols();
28 for(
unsigned i =0; i < a.ncols();i++)
29 for(
unsigned j = 0; j < a.nrows();j++)
39 const T eps=std::numeric_limits<T>::epsilon();
52 if ((temp=std::abs(l(i,j))) > big)
57 if ((temp=std::abs(u(i,j))) > big)
63 if (big == 0.0)
return false;
72 temp=vv[i]*std::abs(l(i,k));
74 temp=vv[i]*std::abs(u(i,k));
124 if (u(k,k) == 0.0) u(k,k)=eps;
128 temp=l(i,k) /= u(k,k);
133 l(i,j) -= temp*u(k,j);
135 u(i,j) -= temp*u(k,j);
139 for(
unsigned i = 0; i < n; i++)