Macaulay2 Engine
Loading...
Searching...
No Matches

◆ triangularSolve() [1/2]

template<typename RT>
void MatrixOps::triangularSolve ( DMat< RT > & Lv,
DMat< RT > & x,
int m,
int strategy )

Definition at line 512 of file mat-linalg.hpp.

513{
514 // TODO: check rings match
515 // TODO: no divide by zero
516 // TODO: size of matrices
517 // TODO: add tests
518 // TODO: for size 0 also
519 switch (strategy)
520 {
521 case 0:
522 // TODO: change to iter
523 for (size_t i = 0; i < m; i++)
524 {
525 auto& a = x.entry(i, 0);
526 x.ring().divide(a, Lv.entry(i, m), Lv.entry(i, i));
527 x.ring().negate(a, a);
528 MatElementaryOps<DMat<RT>>::column_op(Lv, m, a, i);
529 x.ring().negate(a, a);
530 }
531 break;
532 case 1:
533 // TODO: change to iter
534 for (size_t i = 0; i < m; i++)
535 {
536 auto& a = x.entry(i, 0);
537 x.ring().negate(a, Lv.entry(i, m));
538 MatElementaryOps<DMat<RT>>::column_op(Lv, m, a, i);
539 x.ring().negate(a, a);
540 }
541 break;
542 case 2:
543 // TODO: change to iter
544 for (size_t i = 1; i < m + 1; i++)
545 {
546 auto& a = x.entry(m - i, 0);
547 x.ring().divide(a, Lv.entry(m - i, m), Lv.entry(m - i, m - i));
548 x.ring().negate(a, a);
549 MatElementaryOps<DMat<RT>>::column_op(Lv, m, a, m - i);
550 x.ring().negate(a, a);
551 }
552 break;
553 case 3:
554 // TODO: change to iter
555 for (size_t i = 1; i < m + 1; i++)
556 {
557 auto& a = x.entry(m - i, 0);
558 x.ring().negate(a, Lv.entry(m - i, m));
559 MatElementaryOps<DMat<RT>>::column_op(Lv, m, a, m - i);
560 x.ring().negate(a, a);
561 }
562 break;
563 }
564}
ElementType & entry(size_t row, size_t column)
Definition dmat.hpp:148
volatile int x

References DMat< ACoeffRing >::entry(), and x.