Algorithms_in_C++
1.0.0
Set of algorithms implemented in C++.
|
Go to the documentation of this file.
9 #ifndef NUMERICAL_METHODS_QR_DECOMPOSE_H_
10 #define NUMERICAL_METHODS_QR_DECOMPOSE_H_
36 const char separator =
' ';
39 for (
size_t row = 0; row < v.size(); row++) {
40 for (
size_t col = 0; col < v[row].size(); col++)
55 const char separator =
' ';
58 for (
size_t row = 0; row < v.size(); row++) {
103 template <
typename T>
111 std::cerr <<
"[" << __func__ <<
"] Possible division by zero\n";
115 double scalar = num / deno;
145 template <
typename T>
157 for (
int i = 0; i < COLUMNS; i++) {
167 for (j = 0; j < ROWS; j++) {
168 tmp_vector[j] = A[j][i];
169 col_vector[j] = A[j][i];
171 for (j = 0; j < i; j++) {
172 for (
int k = 0; k < ROWS; k++) {
173 col_vector2[k] = Q[0][k][j];
175 col_vector2 =
vector_proj(col_vector, col_vector2);
176 tmp_vector -= col_vector2;
185 for (j = 0; j < ROWS; j++) Q[0][j][i] = tmp_vector[j] / mag;
192 for (
int kk = 0; kk < ROWS; kk++) {
193 col_vector[kk] = Q[0][kk][i];
200 for (
int k = i; k < COLUMNS; k++) {
201 for (
int kk = 0; kk < ROWS; kk++) {
202 col_vector2[kk] = A[kk][k];
204 R[0][i][k] = (col_vector * col_vector2).
sum();
210 #endif // NUMERICAL_METHODS_QR_DECOMPOSE_H_
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
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
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
static double eq(double i)
Definition: newton_raphson_method.cpp:29
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
static double eq_der(double i)
Definition: newton_raphson_method.cpp:39
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
int main(int argc, char *argv[])
Definition: ode_forward_euler.cpp:189
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
Functions to compute QR decomposition of any rectangular matrix.
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:153
constexpr double EPSILON
system accuracy limit
Definition: newton_raphson_method.cpp:20
std::valarray< T > vector_proj(const std::valarray< T > &a, const std::valarray< T > &b)
Definition: qr_decompose.h:104
double vector_mag(const std::valarray< T > &a)
Definition: qr_decompose.h:92
constexpr int16_t MAX_ITERATIONS
Maximum number of iterations.
Definition: newton_raphson_method.cpp:21
std::ostream & operator<<(std::ostream &out, std::valarray< std::valarray< T >> const &v)
Definition: qr_decompose.h:33
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
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
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
double vector_dot(const std::valarray< T > &a, const std::valarray< T > &b)
Definition: qr_decompose.h:76
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
int main()
Definition: newton_raphson_method.cpp:44
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
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
int main(int argc, char *argv[])
Definition: ode_semi_implicit_euler.cpp:189
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
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
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
int main(int argc, char *argv[])
Definition: ode_midpoint_euler.cpp:192
T sum(const std::vector< std::valarray< T >> &A)
Definition: vector_ops.hpp:232