28 Size i, j, size =
S.rows();
31 "input matrix is not a square matrix");
32 #if defined(QL_EXTRA_SAFETY_CHECKS)
33 for (i=0; i<
S.rows(); i++)
36 "input matrix is not symmetric");
39 Matrix result(size, size, 0.0);
41 for (i=0; i<size; i++) {
42 for (j=i; j<size; j++) {
45 sum -= result[i][k]*result[j][k];
49 "input matrix is not positive definite");
52 result[i][i] = std::sqrt(std::max<Real>(sum, 0.0));
59 :
Real(sum / result[i][i]);
70 "Size of input matrix and vector does not match.");
73 for (
Size i=0; i <
n; ++i) {
79 x[i] = -std::inner_product(
1-D array used in linear algebra.
const_iterator begin() const
Matrix used in linear algebra.
const_row_iterator row_begin(Size i) const
const_column_iterator column_begin(Size i) const
const_column_iterator column_end(Size i) const
floating-point comparisons
#define QL_REQUIRE(condition, message)
throw an error if the given pre-condition is not verified
std::function< Real(Real)> b
QL_INTEGER Integer
integer number
std::size_t Size
size of a container
Array CholeskySolveFor(const Matrix &L, const Array &b)
Matrix CholeskyDecomposition(const Matrix &S, bool flexible)
bool close_enough(const Quantity &m1, const Quantity &m2, Size n)