summaryrefslogtreecommitdiff
path: root/log-fourier_integrator.cpp
diff options
context:
space:
mode:
authorJaron Kent-Dobias <jaron@kent-dobias.com>2025-05-10 15:35:19 -0300
committerJaron Kent-Dobias <jaron@kent-dobias.com>2025-05-10 15:35:19 -0300
commitc7e75dcad3787ff56c5ee33fc59d437ca84dbb92 (patch)
tree7eb40177555c66312432c1c8a656f7c67412d16d /log-fourier_integrator.cpp
parent501212c09ca114648d76a6aea2a35606968e7bee (diff)
downloadcode-c7e75dcad3787ff56c5ee33fc59d437ca84dbb92.tar.gz
code-c7e75dcad3787ff56c5ee33fc59d437ca84dbb92.tar.bz2
code-c7e75dcad3787ff56c5ee33fc59d437ca84dbb92.zip
Force monotonicity of C and R
Diffstat (limited to 'log-fourier_integrator.cpp')
-rw-r--r--log-fourier_integrator.cpp17
1 files changed, 16 insertions, 1 deletions
diff --git a/log-fourier_integrator.cpp b/log-fourier_integrator.cpp
index 04dccfd..2d7d1f9 100644
--- a/log-fourier_integrator.cpp
+++ b/log-fourier_integrator.cpp
@@ -145,7 +145,22 @@ int main(int argc, char* argv[]) {
std::vector<Real> Rₜ₊₁ = fft.inverse(Ȓₜ₊₁);
std::vector<Real> Cₜ₊₁ = fft.inverse(Ĉₜ₊₁);
- Real C₀ = (Cₜ₊₁[0] + Cₜ₊₁[1]) / 2;
+ Real Cmin = Cₜ₊₁[N-1];
+ for (unsigned i = 0; i < N; i++) {
+ if (Cₜ₊₁[N-1-i] > Cmin) {
+ Cmin = Cₜ₊₁[N-1-i];
+ }
+ Cₜ₊₁[N-1-i] = Cmin;
+ }
+ Real Rmin = Rₜ₊₁[N-1];
+ for (unsigned i = 0; i < N; i++) {
+ if (Rₜ₊₁[N-1-i] > Rmin) {
+ Rmin = Rₜ₊₁[N-1-i];
+ }
+ Rₜ₊₁[N-1-i] = Rmin;
+ }
+
+ Real C₀ = Cₜ₊₁[0];
μₜ *= pow(tanh(C₀-1)+1, x);