11#include "TridiagonalSolver.h"
47 for (
int i = 0; i < n_ - 1; ++i) {
52 d_[n_ - 1] = d[n_ - 1];
64 for (
int i = 0; i < n_ - 1; ++i) {
69 d_[n_ - 1] = d[n_ - 1];
73 void TridiagonalSolver::gaussElimination()
77 for (
int i = 0; i < n_ - 1; ++i) {
85 for (
int i=0; i < n_; ++i) {
86 std::cout <<
" " << d_[i];
89 for (
int i=0; i < n_ - 1; ++i) {
90 std::cout <<
" " << u_[i];
93 for (
int i=0; i < n_ - 1; ++i) {
94 std::cout <<
" " << l_[i];
106 for (
int i = 0; i < n_ - 1; ++i) {
107 y_[i] = d_[i]*b[i] + u_[i]*b[i+1];
109 y_[n_ - 1] = d_[n_ - 1]*b[n_ - 1];
113 for (
int i = 1; i < n_; ++i) {
114 x[i] = y_[i] + l_[i-1]*y_[i-1];
125 for (
int i = 1; i < n_; ++i) {
126 y_[i] = b[i] - l_[i-1]*y_[i-1];
130 x[n_ - 1] = y_[n_ - 1]/d_[n_ - 1];
131 for (
int i = n_ - 2; i >= 0; --i) {
132 x[i] = (y_[i] - u_[i]*x[i+1])/d_[i];
void multiply(const DArray< double > &b, DArray< double > &x)
Evaluate product Ab = x for known b to compute x.
TridiagonalSolver()
Constructor.
void computeLU(const DArray< double > &d, const DArray< double > &u)
Compute LU decomposition of a symmetric tridiagonal matrix.
void solve(const DArray< double > &b, DArray< double > &x)
Solve Ax = b for known b to compute x.
~TridiagonalSolver()
Destructor.
void allocate(int n)
Allocate memory.
Dynamically allocatable contiguous array template.
void allocate(int capacity)
Allocate the underlying C array.
C++ namespace for polymer self-consistent field theory (PSCF).