5 #include "numeric_utils.h" 9 const Eigen::VectorXd& std_dev) {
10 Eigen::MatrixXd cov_matrix = Eigen::MatrixXd::Zero(corr.rows(), corr.cols());
12 for (
unsigned int i = 0; i < cov_matrix.rows(); ++i) {
13 for (
unsigned int j = 0; j < cov_matrix.cols(); ++j) {
14 cov_matrix(i, j) = corr(i, j) * std_dev(i) * std_dev(j);
22 const std::vector<double>& input_y,
23 std::vector<double>& response) {
25 response.resize(input_x.size() + input_y.size() - 1);
29 VSLConvTaskPtr conv_task;
32 vsldConvNewTask1D(&conv_task, VSL_CONV_MODE_DIRECT, input_x.size(),
33 input_y.size(), response.size());
36 if (conv_status != VSL_STATUS_OK) {
37 throw std::runtime_error(
38 "\nERROR: in numeric_utils::convolve_1d: Error in convolution " 44 vslConvSetStart(conv_task, 0);
47 conv_status = vsldConvExec1D(conv_task, input_x.data(), 1, input_y.data(), 1,
51 if (conv_status != VSL_STATUS_OK) {
52 throw std::runtime_error(
53 "\nERROR: in numeric_utils::convolve_1d: Error in convolution " 59 vslConvDeleteTask(&conv_task);
64 double trapazoid_rule(
const std::vector<double>& input_vector,
double spacing) {
65 double result = (input_vector[0] + input_vector[input_vector.size() - 1]) / 2.0;
67 for (
unsigned int i = 1; i < input_vector.size() - 1; ++i) {
68 result = result + input_vector[i];
71 return result * spacing;
75 double result = (input_vector[0] + input_vector[input_vector.size() - 1]) / 2.0;
77 for (
unsigned int i = 1; i < input_vector.size() - 1; ++i) {
78 result = result + input_vector[i];
81 return result * spacing;
bool convolve_1d(const std::vector< double > &input_x, const std::vector< double > &input_y, std::vector< double > &response)
double trapazoid_rule(const std::vector< double > &input_vector, double spacing)
Eigen::MatrixXd corr_to_cov(const Eigen::MatrixXd &corr, const Eigen::VectorXd &std_dev)