LU decomposition: Difference between revisions

m
Minor edit to C++ code
m (Removed unnecessary code)
m (Minor edit to C++ code)
Line 629:
for (const auto& row : values) {
assert(row.size() <= columns_);
std::copy(begin(row), end(row), row_data(&elements_[columns_ * i++)]);
}
}
Line 636:
size_t columns() const { return columns_; }
 
const scalar_type*& row_dataoperator()(size_t row, size_t column) const {
assert(row < rows_);
returnassert(column &elements_[row *< columns_]);
return &elements_[row * columns_ + column];
}
const scalar_type*& row_dataoperator()(size_t row), constsize_t column) {
assert(row < rows_);
return &elements_[row * columns_];
}
 
const scalar_type& at(size_t row, size_t column) const {
assert(column < columns_);
return row_data(row)[column];
}
scalar_type& at(size_t row, size_t column) {
assert(column < columns_);
return row_data(row)elements_[row * columns_ + column];
}
private:
Line 668 ⟶ 661:
matrix<scalar_type> c(arows, bcolumns);
for (size_t i = 0; i < arows; ++i) {
const auto* aptr = a.row_data(i);
auto* cptr = c.row_data(i);
for (size_t j = 0; j < n; ++j) {
const auto* bptr = b.row_data(j);
for (size_t k = 0; k < bcolumns; ++k)
cptr[c(i, k]) += aptr[a(i, j]) * bptr[b(j, k]);
}
}
Line 687 ⟶ 677:
if (column > 0)
out << ' ';
out << std::setw(8) << a.at(row, column);
}
out << '\n';
Line 702 ⟶ 692:
size_t max_index = column;
for (size_t row = column; row < rows; ++row) {
if (m.at(row, column) > m.at(max_index, column))
max_index = row;
}
Line 710 ⟶ 700:
matrix<scalar_type> pivot(rows, rows);
for (size_t i = 0; i < rows; ++i)
pivot.at(i, perm[i]) = 1;
return pivot;
}
Line 723 ⟶ 713:
matrix<scalar_type> upper(n, n);
for (size_t j = 0; j < n; ++j) {
lower.at(j, j) = 1;
for (size_t i = 0; i <= j; ++i) {
scalar_type value = input1.at(i, j);
for (size_t k = 0; k < i; ++k)
value -= upper.at(k, j) * lower.at(i, k);
upper.at(i, j) = value;
}
for (size_t i = j; i < n; ++i) {
scalar_type value = input1.at(i, j);
for (size_t k = 0; k < j; ++k)
value -= upper.at(k, j) * lower.at(i, k);
value /= upper.at(j, j);
lower.at(i, j) = value;
}
}
1,777

edits