class WindowExponential : public feasst::Window

Determine windows based on an expontential factor, \(\alpha\). The macrostate of the windows, \(m_i\), is given by

\(m_{i+1} = \left( m_i^{\alpha} + \frac{m_{n+1}^{\alpha} - m_0^{\alpha}}{n} \right)^{1/\alpha}\)

where \(i\) is the index of the window, ranging from \(0\) to \(n+1\) and \(n\) is the number of windows. Thus, \(m_{n+1}\) is the maximum macrostate over the entire range, while \(m_0\) is the minimum macrostate over the entire range. For \(\alpha=1\), the widths of all windows are the same. For \(\alpha>1\), the widths of the windows decrease exponentially. For \(\alpha<1\), the widths of the windows increase exponentially.

The given formula is continuous and not rounded. Instead, use Window::boundaries for handling rounding and overlap. For example, 4 windows over a macrostate range of [0, 200], \(\alpha=2\), results in the following segments: [0, 100.00, 141.42, 173.21, 200].

Public Functions

WindowExponential(argtype args = argtype())


  • alpha: exponential factor (default: 1.5).

std::vector<double> segment() const

Return the continuous, segmented boundaries of the range. This should be return num + 1 boundaries, to include global min and max.