Commit 62e9cf47 authored by Davis King's avatar Davis King

Fixed spelling and tabbing

parent e3f984a2
...@@ -1203,68 +1203,68 @@ convergence: ...@@ -1203,68 +1203,68 @@ convergence:
if (A.nr() > 4) // Only test for banded matrix if matrix is big enough if (A.nr() > 4) // Only test for banded matrix if matrix is big enough
{ {
// Detect if matrix is banded and, if so, matrix bandwidth // Detect if matrix is banded and, if so, matrix bandwidth
banded = true; banded = true;
for (long r = 0; r < A.nr(); ++r) for (long r = 0; r < A.nr(); ++r)
for (long c = (r + bandwidth + 1); c < A.nc(); ++c) for (long c = (r + bandwidth + 1); c < A.nc(); ++c)
if (A(r, c) != 0) if (A(r, c) != 0)
{
bandwidth = c - r;
if (bandwidth > A.nr() / 2)
{ {
banded = false; bandwidth = c - r;
goto escape_banded_detection; if (bandwidth > A.nr() / 2)
{
banded = false;
goto escape_banded_detection;
}
} }
}
} }
escape_banded_detection: escape_banded_detection:
if (banded) if (banded)
{ {
// Store in compact form - use column major for LAPACK // Store in compact form - use column major for LAPACK
matrix<T,0,0,default_memory_manager,column_major_layout> B(bandwidth + 1, A.nc()); matrix<T,0,0,default_memory_manager,column_major_layout> B(bandwidth + 1, A.nc());
set_all_elements(B, 0); set_all_elements(B, 0);
for (long r = 0; r < A.nr(); ++r) for (long r = 0; r < A.nr(); ++r)
for (long c = r; c < std::min(r + bandwidth + 1, A.nc()); ++c) for (long c = r; c < std::min(r + bandwidth + 1, A.nc()); ++c)
B(c - r, r) = A(r, c); B(c - r, r) = A(r, c);
#ifdef DLIB_USE_LAPACK #ifdef DLIB_USE_LAPACK
lapack::pbtrf('L', B); lapack::pbtrf('L', B);
#else #else
// Peform compact Cholesky // Perform compact Cholesky
for (long k = 0; k < A.nr(); ++k) for (long k = 0; k < A.nr(); ++k)
{ {
long last = std::min(k + bandwidth, A.nr() - 1) - k; long last = std::min(k + bandwidth, A.nr() - 1) - k;
for (long j = 1; j <= last; ++j) for (long j = 1; j <= last; ++j)
{ {
long i = k + j; long i = k + j;
for (long c = 0; c <= (last - j); ++c) for (long c = 0; c <= (last - j); ++c)
B(c, i) -= B(j, k) / B(0, k) * B(c + j, k); B(c, i) -= B(j, k) / B(0, k) * B(c + j, k);
} }
T norm = std::sqrt(B(0, k)); T norm = std::sqrt(B(0, k));
for (long i = 0; i <= bandwidth; ++i) for (long i = 0; i <= bandwidth; ++i)
B(i, k) /= norm; B(i, k) /= norm;
} }
for (long c = A.nc() - bandwidth + 1; c < A.nc(); ++c) for (long c = A.nc() - bandwidth + 1; c < A.nc(); ++c)
B(bandwidth, c) = 0; B(bandwidth, c) = 0;
#endif #endif
// Unpack lower triangular area // Unpack lower triangular area
set_all_elements(L, 0); set_all_elements(L, 0);
for (long c = 0; c < A.nc(); ++c) for (long c = 0; c < A.nc(); ++c)
for (long i = 0; i <= bandwidth; ++i) for (long i = 0; i <= bandwidth; ++i)
{ {
long ind = c + i; long ind = c + i;
if (ind < A.nc()) if (ind < A.nc())
L(ind, c) = B(i, c); L(ind, c) = B(i, c);
} }
return L; return L;
} }
#ifdef DLIB_USE_LAPACK #ifdef DLIB_USE_LAPACK
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment