Algorithms_in_C++  1.0.0
Set of algorithms implemented in C++.
qr_decompose.h
Go to the documentation of this file.
1 /**
2  * @file
3  * \brief Library functions to compute [QR
4  * decomposition](https://en.wikipedia.org/wiki/QR_decomposition) of a given
5  * matrix.
6  * \author [Krishna Vedala](https://github.com/kvedala)
7  */
8 
9 #ifndef NUMERICAL_METHODS_QR_DECOMPOSE_H_
10 #define NUMERICAL_METHODS_QR_DECOMPOSE_H_
11 
12 #include <cmath>
13 #include <cstdlib>
14 #include <iomanip>
15 #include <iostream>
16 #include <limits>
17 #include <numeric>
18 #include <valarray>
19 #ifdef _OPENMP
20 #include <omp.h>
21 #endif
22 
23 /** \namespace qr_algorithm
24  * \brief Functions to compute [QR
25  * decomposition](https://en.wikipedia.org/wiki/QR_decomposition) of any
26  * rectangular matrix
27  */
28 namespace qr_algorithm {
29 /**
30  * operator to print a matrix
31  */
32 template <typename T>
34  std::valarray<std::valarray<T>> const &v) {
35  const int width = 12;
36  const char separator = ' ';
37 
38  out.precision(4);
39  for (size_t row = 0; row < v.size(); row++) {
40  for (size_t col = 0; col < v[row].size(); col++)
41  out << std::right << std::setw(width) << std::setfill(separator)
42  << v[row][col];
43  out << std::endl;
44  }
45 
46  return out;
47 }
48 
49 /**
50  * operator to print a vector
51  */
52 template <typename T>
54  const int width = 10;
55  const char separator = ' ';
56 
57  out.precision(4);
58  for (size_t row = 0; row < v.size(); row++) {
59  out << std::right << std::setw(width) << std::setfill(separator)
60  << v[row];
61  }
62 
63  return out;
64 }
65 
66 /**
67  * Compute dot product of two vectors of equal lengths
68  *
69  * If \f$\vec{a}=\left[a_0,a_1,a_2,...,a_L\right]\f$ and
70  * \f$\vec{b}=\left[b_0,b_1,b_1,...,b_L\right]\f$ then
71  * \f$\vec{a}\cdot\vec{b}=\displaystyle\sum_{i=0}^L a_i\times b_i\f$
72  *
73  * \returns \f$\vec{a}\cdot\vec{b}\f$
74  */
75 template <typename T>
76 inline double vector_dot(const std::valarray<T> &a, const std::valarray<T> &b) {
77  return (a * b).sum();
78  // could also use following
79  // return std::inner_product(std::begin(a), std::end(a), std::begin(b),
80  // 0.f);
81 }
82 
83 /**
84  * Compute magnitude of vector.
85  *
86  * If \f$\vec{a}=\left[a_0,a_1,a_2,...,a_L\right]\f$ then
87  * \f$\left|\vec{a}\right|=\sqrt{\displaystyle\sum_{i=0}^L a_i^2}\f$
88  *
89  * \returns \f$\left|\vec{a}\right|\f$
90  */
91 template <typename T>
92 inline double vector_mag(const std::valarray<T> &a) {
93  double dot = vector_dot(a, a);
94  return std::sqrt(dot);
95 }
96 
97 /**
98  * Compute projection of vector \f$\vec{a}\f$ on \f$\vec{b}\f$ defined as
99  * \f[\text{proj}_\vec{b}\vec{a}=\frac{\vec{a}\cdot\vec{b}}{\left|\vec{b}\right|^2}\vec{b}\f]
100  *
101  * \returns NULL if error, otherwise pointer to output
102  */
103 template <typename T>
105  const std::valarray<T> &b) {
106  double num = vector_dot(a, b);
107  double deno = vector_dot(b, b);
108 
109  /*! check for division by zero using machine epsilon */
110  if (deno <= std::numeric_limits<double>::epsilon()) {
111  std::cerr << "[" << __func__ << "] Possible division by zero\n";
112  return a; // return vector a back
113  }
114 
115  double scalar = num / deno;
116 
117  return b * scalar;
118 }
119 
120 /**
121  * Decompose matrix \f$A\f$ using [Gram-Schmidt
122  *process](https://en.wikipedia.org/wiki/QR_decomposition).
123  *
124  * \f{eqnarray*}{
125  * \text{given that}\quad A &=&
126  *\left[\mathbf{a}_1,\mathbf{a}_2,\ldots,\mathbf{a}_{N-1},\right]\\
127  * \text{where}\quad\mathbf{a}_i &=&
128  * \left[a_{0i},a_{1i},a_{2i},\ldots,a_{(M-1)i}\right]^T\quad\ldots\mbox{(column
129  * vectors)}\\
130  * \text{then}\quad\mathbf{u}_i &=& \mathbf{a}_i
131  *-\sum_{j=0}^{i-1}\text{proj}_{\mathbf{u}_j}\mathbf{a}_i\\
132  * \mathbf{e}_i &=&\frac{\mathbf{u}_i}{\left|\mathbf{u}_i\right|}\\
133  * Q &=& \begin{bmatrix}\mathbf{e}_0 & \mathbf{e}_1 & \mathbf{e}_2 & \dots &
134  * \mathbf{e}_{N-1}\end{bmatrix}\\
135  * R &=& \begin{bmatrix}\langle\mathbf{e}_0\,,\mathbf{a}_0\rangle &
136  * \langle\mathbf{e}_1\,,\mathbf{a}_1\rangle &
137  * \langle\mathbf{e}_2\,,\mathbf{a}_2\rangle & \dots \\
138  * 0 & \langle\mathbf{e}_1\,,\mathbf{a}_1\rangle &
139  * \langle\mathbf{e}_2\,,\mathbf{a}_2\rangle & \dots\\
140  * 0 & 0 & \langle\mathbf{e}_2\,,\mathbf{a}_2\rangle &
141  * \dots\\ \vdots & \vdots & \vdots & \ddots
142  * \end{bmatrix}\\
143  * \f}
144  */
145 template <typename T>
147  const std::valarray<std::valarray<T>> &A, /**< input matrix to decompose */
148  std::valarray<std::valarray<T>> *Q, /**< output decomposed matrix */
149  std::valarray<std::valarray<T>> *R /**< output decomposed matrix */
150 ) {
151  std::size_t ROWS = A.size(); // number of rows of A
152  std::size_t COLUMNS = A[0].size(); // number of columns of A
153  std::valarray<T> col_vector(ROWS);
154  std::valarray<T> col_vector2(ROWS);
155  std::valarray<T> tmp_vector(ROWS);
156 
157  for (int i = 0; i < COLUMNS; i++) {
158  /* for each column => R is a square matrix of NxN */
159  int j;
160  R[0][i] = 0.; /* make R upper triangular */
161 
162  /* get corresponding Q vector */
163 #ifdef _OPENMP
164 // parallelize on threads
165 #pragma omp for
166 #endif
167  for (j = 0; j < ROWS; j++) {
168  tmp_vector[j] = A[j][i]; /* accumulator for uk */
169  col_vector[j] = A[j][i];
170  }
171  for (j = 0; j < i; j++) {
172  for (int k = 0; k < ROWS; k++) {
173  col_vector2[k] = Q[0][k][j];
174  }
175  col_vector2 = vector_proj(col_vector, col_vector2);
176  tmp_vector -= col_vector2;
177  }
178 
179  double mag = vector_mag(tmp_vector);
180 
181 #ifdef _OPENMP
182 // parallelize on threads
183 #pragma omp for
184 #endif
185  for (j = 0; j < ROWS; j++) Q[0][j][i] = tmp_vector[j] / mag;
186 
187  /* compute upper triangular values of R */
188 #ifdef _OPENMP
189 // parallelize on threads
190 #pragma omp for
191 #endif
192  for (int kk = 0; kk < ROWS; kk++) {
193  col_vector[kk] = Q[0][kk][i];
194  }
195 
196 #ifdef _OPENMP
197 // parallelize on threads
198 #pragma omp for
199 #endif
200  for (int k = i; k < COLUMNS; k++) {
201  for (int kk = 0; kk < ROWS; kk++) {
202  col_vector2[kk] = A[kk][k];
203  }
204  R[0][i][k] = (col_vector * col_vector2).sum();
205  }
206  }
207 }
208 } // namespace qr_algorithm
209 
210 #endif // NUMERICAL_METHODS_QR_DECOMPOSE_H_
check_termination
bool check_termination(long double delta)
Definition: durand_kerner_roots.cpp:91
save_exact_solution
void save_exact_solution(const double &X0, const double &X_MAX, const double &step_size, const std::valarray< double > &Y0)
Definition: ode_midpoint_euler.cpp:156
Sqrt
double Sqrt(double a)
Definition: sqrt_double.cpp:16
std::srand
T srand(T... args)
lcm
unsigned int lcm(unsigned int x, unsigned int y)
Definition: least_common_multiple.cpp:43
tests
void tests()
Definition: least_common_multiple.cpp:48
prime_numbers
std::vector< int > prime_numbers
Definition: prime_factorization.cpp:16
main
int main()
Definition: primes_up_to_billion.cpp:26
semi_implicit_euler
double semi_implicit_euler(double dx, double x0, double x_max, std::valarray< double > *y, bool save_to_file=false)
Compute approximation using the semi-implicit-Euler method in the given limits.
Definition: ode_semi_implicit_euler.cpp:103
operator<<
std::ostream & operator<<(std::ostream &out, std::vector< std::vector< T >> const &v)
Definition: lu_decompose.cpp:75
MAX_ITERATIONS
#define MAX_ITERATIONS
Maximum number of iterations to check.
Definition: false_position.cpp:24
statistics::stats_computer2::operator>>
friend std::istream & operator>>(std::istream &input, stats_computer2 &stat)
Definition: realtime_stats.cpp:97
MAX_ITERATIONS
#define MAX_ITERATIONS
Maximum number of iterations to check.
Definition: newton_raphson_method.cpp:21
EPSILON
#define EPSILON
solution accuracy limit
Definition: golden_search_extrema.cpp:17
test3
void test3()
Test function to find maxima for the function in the interval Expected result: .
Definition: brent_method_extrema.cpp:188
std::string
STL class.
semi_implicit_euler_step
void semi_implicit_euler_step(const double dx, const double &x, std::valarray< double > *y, std::valarray< double > *dy)
Compute next step approximation using the semi-implicit-Euler method.
Definition: ode_semi_implicit_euler.cpp:82
std::uniform_int_distribution
primes
std::vector< int > primes(int max)
Definition: prime_numbers.cpp:12
miller_rabin_primality_test
bool miller_rabin_primality_test(T num, T repeats)
Definition: miller_rabin.cpp:125
f
uint64_t f[MAX]
Definition: fibonacci_fast.cpp:27
std::clock_t
operator+
std::vector< T > operator+(std::vector< T > const &A, std::vector< T > const &B)
Definition: ordinary_least_squares_regressor.cpp:196
eq
static double eq(double i)
Definition: newton_raphson_method.cpp:29
std::pair
main
int main()
Definition: brent_method_extrema.cpp:204
std::cos
T cos(T... args)
EPSILON
#define EPSILON
system accuracy limit
Definition: brent_method_extrema.cpp:23
eq_der
static double eq_der(double i)
Definition: newton_raphson_method.cpp:39
exact_solution
void exact_solution(const double &x, std::valarray< double > *y)
Exact solution of the problem. Used for solution comparison.
Definition: ode_forward_euler.cpp:67
std::atof
T atof(T... args)
std::vector
STL class.
std::vector::size
T size(T... args)
multiply
int multiply(int x, int res[], int res_size)
Definition: power_for_huge_numbers.cpp:25
main
int main(int argc, char *argv[])
Definition: ode_forward_euler.cpp:188
ans
ll ans(ll n)
Definition: matrix_exponentiation.cpp:94
main
int main()
Definition: sieve_of_eratosthenes.cpp:59
print
void print(uint32_t N)
Definition: sieve_of_eratosthenes.cpp:40
complex_str
const char * complex_str(const std::complex< double > &x)
Definition: durand_kerner_roots.cpp:76
test3
void test3()
Test function to find maxima for the function in the interval Expected result: .
Definition: golden_search_extrema.cpp:123
get_minima
double get_minima(const std::function< double(double)> &f, double lim_a, double lim_b)
Get the real root of a function in the given interval.
Definition: brent_method_extrema.cpp:35
std::setfill
T setfill(T... args)
std::function
sgn
int sgn(T val)
Definition: bisection_method.cpp:32
statistics::stats_computer1::std
double std() const
Definition: realtime_stats.cpp:48
midpoint_euler_step
void midpoint_euler_step(const double dx, const double &x, std::valarray< double > *y, std::valarray< double > *dy)
Compute next step approximation using the midpoint-Euler method.
Definition: ode_midpoint_euler.cpp:85
factors
std::vector< std::pair< int, int > > factors
Definition: prime_factorization.cpp:19
is_square
bool is_square(std::vector< std::vector< T >> const &A)
Definition: ordinary_least_squares_regressor.cpp:55
main
int main()
Definition: prime_factorization.cpp:62
reverse_binary
std::vector< T > reverse_binary(T num)
Definition: miller_rabin.cpp:19
std::sqrt
T sqrt(T... args)
power
void power(int x, int n)
Definition: power_for_huge_numbers.cpp:56
qr_algorithm
Functions to compute QR decomposition of any rectangular matrix.
operator*
std::vector< std::vector< T > > operator*(std::vector< std::vector< T >> const &A, std::vector< std::vector< T >> const &B)
Definition: ordinary_least_squares_regressor.cpp:72
test1
void test1()
Test function to find minima for the function in the interval Expected result = 2.
Definition: golden_search_extrema.cpp:78
main
int main()
Definition: prime_numbers.cpp:26
forward_euler_step
void forward_euler_step(const double dx, const double &x, std::valarray< double > *y, std::valarray< double > *dy)
Compute next step approximation using the forward-Euler method.
Definition: ode_forward_euler.cpp:86
std::mt19937
std::vector::push_back
T push_back(T... args)
main
int main()
Definition: modular_inverse_fermat_little_theorem.cpp:84
std::clock
T clock(T... args)
durand_kerner_algo
std::pair< uint32_t, double > durand_kerner_algo(const std::valarray< double > &coeffs, std::valarray< std::complex< double >> *roots, bool write_log=false)
Definition: durand_kerner_roots.cpp:109
operator<<
std::ostream & operator<<(std::ostream &out, std::vector< std::vector< T >> const &v)
Definition: ordinary_least_squares_regressor.cpp:20
test
void test()
Definition: sum_of_digits.cpp:58
std::isnan
T isnan(T... args)
statistics
Statistical algorithms.
test2
void test2()
Definition: sum_of_digits.cpp:49
save_exact_solution
void save_exact_solution(const double &X0, const double &X_MAX, const double &step_size, const std::valarray< double > &Y0)
Definition: ode_forward_euler.cpp:152
init
void init()
Definition: sieve_of_eratosthenes.cpp:52
std::snprintf
T snprintf(T... args)
std::random_device
std::numeric_limits::infinity
T infinity(T... args)
qr_algorithm::vector_proj
std::valarray< T > vector_proj(const std::valarray< T > &a, const std::valarray< T > &b)
Definition: qr_decompose.h:104
std::cout
std::ofstream
STL class.
main
int main()
Definition: false_position.cpp:39
std::isinf
T isinf(T... args)
qr_algorithm::vector_mag
double vector_mag(const std::valarray< T > &a)
Definition: qr_decompose.h:92
k
ll k
Definition: matrix_exponentiation.cpp:48
statistics::stats_computer2::variance
double variance() const
Definition: realtime_stats.cpp:89
gcd
unsigned int gcd(unsigned int x, unsigned int y)
Definition: least_common_multiple.cpp:16
main
int main()
Definition: sqrt_double.cpp:42
sieve
void sieve(uint32_t N)
Definition: sieve_of_eratosthenes.cpp:25
std::ofstream::close
T close(T... args)
modular_exponentiation
T modular_exponentiation(T base, const std::vector< T > &rev_binary_exponent, T mod)
Definition: miller_rabin.cpp:43
std::perror
T perror(T... args)
poly_function
std::complex< double > poly_function(const std::valarray< double > &coeffs, std::complex< double > x)
Definition: durand_kerner_roots.cpp:53
main
int main(int argc, char **argv)
Definition: lu_decompose.cpp:91
std::valarray
STL class.
main
int main()
Definition: ordinary_least_squares_regressor.cpp:358
std::complex::real
T real(T... args)
test1
void test1()
Definition: durand_kerner_roots.cpp:207
predict_OLS_regressor
std::vector< float > predict_OLS_regressor(std::vector< std::vector< T >> const &X, std::vector< float > const &beta)
Definition: ordinary_least_squares_regressor.cpp:340
main
int main()
Definition: gaussian_elimination.cpp:9
std::ofstream::open
T open(T... args)
ACCURACY
#define ACCURACY
Definition: durand_kerner_roots.cpp:45
statistics::stats_computer1::mean
double mean() const
Definition: realtime_stats.cpp:42
statistics::stats_computer2
Definition: realtime_stats.cpp:72
qr_algorithm::operator<<
std::ostream & operator<<(std::ostream &out, std::valarray< std::valarray< T >> const &v)
Definition: qr_decompose.h:33
forward_euler
double forward_euler(double dx, double x0, double x_max, std::valarray< double > *y, bool save_to_file=false)
Compute approximation using the forward-Euler method in the given limits.
Definition: ode_forward_euler.cpp:102
main
int main(int argc, char **argv)
Definition: realtime_stats.cpp:158
sgn
int sgn(T val)
Definition: false_position.cpp:34
a
vector< ll > a
Definition: matrix_exponentiation.cpp:53
std::rand
T rand(T... args)
std::swap
T swap(T... args)
problem
void problem(const double &x, std::valarray< double > *y, std::valarray< double > *dy)
Problem statement for a system with first-order differential equations. Updates the system differenti...
Definition: ode_semi_implicit_euler.cpp:53
test_function
void test_function(const float *test_data, const int number_of_samples)
Definition: realtime_stats.cpp:118
std::sin
T sin(T... args)
SieveOfEratosthenes
void SieveOfEratosthenes(int N)
Definition: prime_factorization.cpp:23
std::string::substr
T substr(T... args)
miller_test
bool miller_test(T d, T num)
Definition: miller_rabin.cpp:73
main
int main()
Definition: least_common_multiple.cpp:67
EPSILON
#define EPSILON
system accuracy limit
Definition: newton_raphson_method.cpp:20
problem
void problem(const double &x, std::valarray< double > *y, std::valarray< double > *dy)
Problem statement for a system with first-order differential equations. Updates the system differenti...
Definition: ode_forward_euler.cpp:54
data
int data[MAX]
test data
Definition: hash_search.cpp:24
MAX
#define MAX
Definition: sieve_of_eratosthenes.cpp:16
fit_OLS_regressor
std::vector< float > fit_OLS_regressor(std::vector< std::vector< T >> const &X, std::vector< T > const &Y)
Definition: ordinary_least_squares_regressor.cpp:310
operator-
std::vector< T > operator-(std::vector< T > const &A, std::vector< T > const &B)
Definition: ordinary_least_squares_regressor.cpp:175
binExpo
int64_t binExpo(int64_t a, int64_t b, int64_t m)
Definition: modular_inverse_fermat_little_theorem.cpp:52
std::endl
T endl(T... args)
get_inverse
std::vector< std::vector< float > > get_inverse(std::vector< std::vector< T >> const &A)
Definition: ordinary_least_squares_regressor.cpp:218
statistics::stats_computer1::new_val
void new_val(T x)
Definition: realtime_stats.cpp:32
test2
void test2()
Test function to find root for the function in the interval Expected result: .
Definition: brent_method_extrema.cpp:165
qr_algorithm::vector_dot
double vector_dot(const std::valarray< T > &a, const std::valarray< T > &b)
Definition: qr_decompose.h:76
std::left
T left(T... args)
problem
void problem(const double &x, std::valarray< double > *y, std::valarray< double > *dy)
Problem statement for a system with first-order differential equations. Updates the system differenti...
Definition: ode_midpoint_euler.cpp:53
statistics::stats_computer2::new_val
void new_val(T x)
Definition: realtime_stats.cpp:77
statistics::stats_computer1::variance
double variance() const
Definition: realtime_stats.cpp:45
main
int main()
Definition: newton_raphson_method.cpp:44
sum_of_digits
int sum_of_digits(int num)
Definition: sum_of_digits.cpp:23
midpoint_euler
double midpoint_euler(double dx, double x0, double x_max, std::valarray< double > *y, bool save_to_file=false)
Compute approximation using the midpoint-Euler method in the given limits.
Definition: ode_midpoint_euler.cpp:107
main
int main()
Definition: number_of_positive_divisors.cpp:62
std::vector::cbegin
T cbegin(T... args)
main
int main()
Definition: miller_rabin.cpp:183
std::strtod
T strtod(T... args)
main
int main()
Definition: power_for_huge_numbers.cpp:82
prime_factorization
void prime_factorization(int num)
Definition: prime_factorization.cpp:40
main
int main()
Definition: sum_of_digits.cpp:68
std::fixed
T fixed(T... args)
statistics::stats_computer1
Definition: realtime_stats.cpp:27
test2
void test2()
Test function to find maxima for the function in the interval Expected result: .
Definition: golden_search_extrema.cpp:100
statistics::stats_computer2::std
double std() const
Definition: realtime_stats.cpp:92
main
int main()
Definition: golden_search_extrema.cpp:139
isprime
bool isprime[MAX]
Definition: sieve_of_eratosthenes.cpp:19
test1
void test1()
Definition: sum_of_digits.cpp:40
qr_algorithm::qr_decompose
void qr_decompose(const std::valarray< std::valarray< T >> &A, std::valarray< std::valarray< T >> *Q, std::valarray< std::valarray< T >> *R)
Definition: qr_decompose.h:146
std::complex
STL class.
std::complex::imag
T imag(T... args)
main
int main(int argc, char *argv[])
Definition: ode_semi_implicit_euler.cpp:189
std::size_t
eq
static double eq(double i)
Definition: false_position.cpp:28
test1
void test1()
Test function to find root for the function in the interval Expected result = 2.
Definition: brent_method_extrema.cpp:143
add
std::string add(std::string a, std::string b)
Definition: string_fibonacci.cpp:24
std::make_pair
T make_pair(T... args)
std::time
T time(T... args)
save_exact_solution
void save_exact_solution(const double &X0, const double &X_MAX, const double &step_size, const std::valarray< double > &Y0)
Definition: ode_semi_implicit_euler.cpp:153
MAX_ITERATIONS
#define MAX_ITERATIONS
Maximum number of iterations to check.
Definition: bisection_method.cpp:22
std::vector::cend
T cend(T... args)
exact_solution
void exact_solution(const double &x, std::valarray< double > *y)
Exact solution of the problem. Used for solution comparison.
Definition: ode_semi_implicit_euler.cpp:66
std::setw
T setw(T... args)
std::max
T max(T... args)
main
int main()
Definition: string_fibonacci.cpp:81
number_of_positive_divisors
int number_of_positive_divisors(int n)
Definition: number_of_positive_divisors.cpp:34
eq
static double eq(double i)
Definition: bisection_method.cpp:26
get_minima
double get_minima(const std::function< double(double)> &f, double lim_a, double lim_b)
Get the minima of a function in the given interval. To get the maxima, simply negate the function....
Definition: golden_search_extrema.cpp:29
fib_Accurate
void fib_Accurate(uint64_t n)
Definition: string_fibonacci.cpp:68
Sieve
void Sieve(int64_t n)
Definition: primes_up_to_billion.cpp:13
std::cin
statistics::stats_computer2::mean
double mean() const
Definition: realtime_stats.cpp:86
isPrime
bool isPrime(int64_t m)
Definition: modular_inverse_fermat_little_theorem.cpp:68
std::numeric_limits
std::ofstream::is_open
T is_open(T... args)
test2
void test2()
Definition: durand_kerner_roots.cpp:242
exact_solution
void exact_solution(const double &x, std::valarray< double > *y)
Exact solution of the problem. Used for solution comparison.
Definition: ode_midpoint_euler.cpp:66
lu_decomposition
int lu_decomposition(const std::vector< std::vector< double >> &A, std::vector< std::vector< double >> *L, std::vector< std::vector< double >> *U)
Definition: lu_decompose.cpp:22
main
int main()
Definition: bisection_method.cpp:37
operator/
std::vector< float > operator/(std::vector< T > const &A, float const scalar)
Definition: ordinary_least_squares_regressor.cpp:166
std::exit
T exit(T... args)
MAX
#define MAX
Definition: power_for_huge_numbers.cpp:10
statistics::stats_computer1::operator>>
friend std::istream & operator>>(std::istream &input, stats_computer1 &stat)
Definition: realtime_stats.cpp:53
main
int main(int argc, char *argv[])
Definition: ode_midpoint_euler.cpp:192
tests
void tests()
Definition: miller_rabin.cpp:157
prime
char prime[100000000]
Definition: primes_up_to_billion.cpp:10
std::pow
T pow(T... args)
isprime
bool isprime[1000006]
Definition: prime_factorization.cpp:13
get_transpose
std::vector< std::vector< T > > get_transpose(std::vector< std::vector< T >> const &A)
Definition: ordinary_least_squares_regressor.cpp:289