14 typedef std::array<double,N>
vec_t;
15 typedef std::function<double(vec_t const &)>
fun_t;
17 double const alpha = 1;
18 double const beta = 0.5;
19 double const gamma = 2;
20 double const delta = 0.5;
21 double mxrngy = 0.00001;
22 double mxrngx = 0.00001;
32 std::array<vec_t,N+1> s;
33 for (
int i = 0; i<N; i++) {
39 std::array<double,N+1> y;
40 for (
int i = 0; i<=N; i ++) y[i] =
fn(s[i]);
62 for (
int i = 2; i<=N; i++) {
63 if (y[i]<y[li]) li = i;
64 else if (y[i]>y[hi]) {
68 else if (y[i]>y[ni]) ni = i;
72 if (y[hi]-y[li]<mxrngy) {
74 for (
int i = 0; i<N; i++) {
77 for (
int j = 0; j<N; j++) {
89 for (
int i = 0; i<N; i++) {
91 for (
int j = 0; j<=N; j++) xc[i] += s[j][i];
92 xc[i] = (xc[i]-sh[i])/N;
93 xn[i] = xc[i]+(xc[i]-sh[i])*alpha;
99 for (
int i = 0; i<N; i++) x2[i] = xc[i]+(xc[i]-sh[i])*gamma;
118 for (
int i = 0; i<N; i++) x2[i] = xc[i]+(xn[i]-xc[i])*beta;
131 for (
int i = 0; i<N; i++) xn[i] = xc[i]+(sh[i]-xc[i])*beta;
139 for (
int i = 0; i<=N; i++) {
142 for (
int j = 0; j<N; j++) d[j] = sl[j]+(d[j]-sl[j])*delta;
149 }
while (iter<mxiter);
double fn(double const *p)
Function to be minimized.
vec_t minimize(fun_t fn, vec_t const &x0, vec_t const &step)
<perform minimization
Optimizer with Nelder–Mead method for functions with N arguments.
std::function< double(vec_t const &)> fun_t
minimized function
std::array< double, N > vec_t
parameter space