39 lines
740 B
C++
39 lines
740 B
C++
#include "funcs.hpp"
|
|
|
|
double f(double x) {
|
|
return 100*std::exp(-10*x);
|
|
}
|
|
|
|
double u(double x) {
|
|
return 1. - (1. - std::exp(-10.))*x - std::exp(-10.*x);
|
|
}
|
|
|
|
void build_g_vec(int n_steps, arma::vec& g_vec) {
|
|
g_vec.resize(n_steps-1);
|
|
|
|
double step_size = 1./ (double) n_steps;
|
|
for (int i=0; i < n_steps-1; i++) {
|
|
g_vec(i) = step_size*step_size*f((i+1)*step_size);
|
|
}
|
|
}
|
|
|
|
void build_arrays(
|
|
int n_steps,
|
|
arma::vec& sub_diag,
|
|
arma::vec& main_diag,
|
|
arma::vec& sup_diag,
|
|
arma::vec& g_vec
|
|
)
|
|
{
|
|
sub_diag.resize(n_steps-2);
|
|
main_diag.resize(n_steps-1);
|
|
sup_diag.resize(n_steps-2);
|
|
|
|
sub_diag.fill(-1);
|
|
main_diag.fill(2);
|
|
sup_diag.fill(-1);
|
|
|
|
build_g_vec(n_steps, g_vec);
|
|
}
|
|
|