diff options
author | Jaron Kent-Dobias <jaron@kent-dobias.com> | 2025-05-10 15:35:19 -0300 |
---|---|---|
committer | Jaron Kent-Dobias <jaron@kent-dobias.com> | 2025-05-10 15:35:19 -0300 |
commit | c7e75dcad3787ff56c5ee33fc59d437ca84dbb92 (patch) | |
tree | 7eb40177555c66312432c1c8a656f7c67412d16d /log-fourier_integrator.cpp | |
parent | 501212c09ca114648d76a6aea2a35606968e7bee (diff) | |
download | code-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.cpp | 17 |
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); |