Cholesky decomposition: Difference between revisions

m
Minor edit to C++ code
m (→‎{{header|REXX}}: simplified the code.)
m (Minor edit to C++ code)
Line 548:
for (const auto& row : values) {
assert(row.size() <= columns_);
std::copy(begin(row), end(row), row_data(&elements_[columns_ * i++)]);
}
}
Line 555:
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 586 ⟶ 579:
if (column > 0)
out << ' ';
out << std::setw(9) << a.at(row, column);
}
out << '\n';
Line 599 ⟶ 592:
for (size_t i = 0; i < n; ++i) {
for (size_t k = 0; k < i; ++k) {
scalar_type value = input.at(i, k);
for (size_t j = 0; j < k; ++j)
value -= result.at(i, j) * result.at(k, j);
result.at(i, k) = value/result.at(k, k);
}
scalar_type value = input.at(i, i);
for (size_t j = 0; j < i; ++j)
value -= result.at(i, j) * result.at(i, j);
result.at(i, i) = std::sqrt(value);
}
return result;
1,777

edits