summaryrefslogtreecommitdiff
path: root/log-fourier.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'log-fourier.cpp')
-rw-r--r--log-fourier.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/log-fourier.cpp b/log-fourier.cpp
index 5d0da17..be50260 100644
--- a/log-fourier.cpp
+++ b/log-fourier.cpp
@@ -188,7 +188,11 @@ Real estimateZ(LogarithmicFourierTransform& fft, const std::vector<Real>& C, con
}
Real energy(const LogarithmicFourierTransform& fft, std::vector<Real>& C, const std::vector<Real>& R, unsigned p, unsigned s, Real λ, Real β) {
- Real E = fft.t(0) * (df(λ, p, s, 1) + R[0] * df(λ, p, s, C[0])) / 2;
+ unsigned n₀;
+ for (unsigned n = 0; n < C.size(); n++) {
+ if (C[n] > 1) n₀ = n;
+ }
+ Real E = fft.t(n₀) * df(λ, p, s, 1);
for (unsigned n = 0; n < C.size()/2-1; n++) {
Real R₂ₙ = R[2*n];
Real R₂ₙ₊₁ = R[2*n+1];
@@ -197,6 +201,8 @@ Real energy(const LogarithmicFourierTransform& fft, std::vector<Real>& C, const
Real C₂ₙ₊₁ = C[2*n+1];
Real C₂ₙ₊₂ = C[2*n+2];
+ if (C₂ₙ₊₂ < 0 || R₂ₙ₊₂ < 0) break;
+
Real h₂ₙ = fft.t(2*n+1) - fft.t(2*n);
Real h₂ₙ₊₁ = fft.t(2*n+2) - fft.t(2*n+1);
Real f₂ₙ = R₂ₙ * df(λ, p, s, C₂ₙ);