MCPcopy Create free account
hub / github.com/OpenPTrack/open_ptrack_v2 / UTinverse

Function UTinverse

bayes/src/UdU.cpp:560–599  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

558
559
560bool UTinverse (UTriMatrix& U)
561/* In-place (destructive) inversion of upper triangular matrix in U
562 *
563 * Output:
564 * U: inv(U)
565 * Return:
566 * singularity (of U), true iff diagonal of U has a zero element
567 */
568{
569 const std::size_t n = U.size1();
570 assert (n == U.size2());
571
572 bool singular = false;
573 // Invert U in place
574 if (n > 0)
575 {
576 std::size_t i = n-1;
577 do {
578 UTriMatrix::Row Ui(U,i);
579 UTriMatrix::value_type d = Ui[i];
580 if (d == 0)
581 {
582 singular = true;
583 break;
584 }
585 d = 1/d;
586 Ui[i] = d;
587
588 for (std::size_t j = n-1; j > i; --j)
589 {
590 UTriMatrix::value_type e = 0.;
591 for (std::size_t k = i+1; k <= j; ++k)
592 e -= Ui[k] * U(k,j);
593 Ui[j] = e*d;
594 }
595 } while (i-- > 0);
596 }
597
598 return singular;
599}
600
601
602void UdUrecompose_transpose (RowMatrix& M)

Callers 4

initMethod · 0.85
init_yYMethod · 0.85
updateMethod · 0.85
observe_innovationMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected