Skip to content

Commit e6cacae

Browse files
authored
enh: migrate theta to c++ (#955)
1 parent 03213c5 commit e6cacae

6 files changed

Lines changed: 572 additions & 1058 deletions

File tree

include/statsforecast/nelder_mead.h

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,16 @@ using Eigen::VectorXd;
88
using RowMajorMatrixXd =
99
Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>;
1010

11-
auto Clamp(const VectorXd &x, const VectorXd &lower, const VectorXd &upper) {
11+
inline auto Clamp(const VectorXd &x, const VectorXd &lower,
12+
const VectorXd &upper) {
1213
return x.cwiseMax(lower).cwiseMin(upper);
1314
}
1415

15-
double StandardDeviation(const VectorXd &x) {
16+
inline double StandardDeviation(const VectorXd &x) {
1617
return std::sqrt((x.array() - x.mean()).square().mean());
1718
}
1819

19-
Eigen::VectorX<Eigen::Index> ArgSort(const VectorXd &v) {
20+
inline Eigen::VectorX<Eigen::Index> ArgSort(const VectorXd &v) {
2021
Eigen::VectorX<Eigen::Index> indices(v.size());
2122
std::iota(indices.begin(), indices.end(), 0);
2223
std::sort(indices.begin(), indices.end(),
@@ -25,11 +26,11 @@ Eigen::VectorX<Eigen::Index> ArgSort(const VectorXd &v) {
2526
}
2627

2728
template <typename Func, typename... Args>
28-
std::tuple<VectorXd, double, int> NelderMead(Func F, const VectorXd &x, const VectorXd &lower,
29-
const VectorXd upper, double init_step,
30-
double zero_pert, double alpha, double gamma,
31-
double rho, double sigma, int max_iter, double tol_std,
32-
bool adaptive, Args &&...args) {
29+
std::tuple<VectorXd, double, int>
30+
NelderMead(Func F, const VectorXd &x, const VectorXd &lower,
31+
const VectorXd upper, double init_step, double zero_pert,
32+
double alpha, double gamma, double rho, double sigma, int max_iter,
33+
double tol_std, bool adaptive, Args &&...args) {
3334
auto x0 = Clamp(x, lower, upper);
3435
auto n = x0.size();
3536
if (adaptive) {

0 commit comments

Comments
 (0)