diff options
-rw-r--r-- | least_squares.cpp | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/least_squares.cpp b/least_squares.cpp index b294679..49100b4 100644 --- a/least_squares.cpp +++ b/least_squares.cpp @@ -158,7 +158,7 @@ Vector gradientDescent(const QuadraticModel& M, const Vector& x0, Real ε = 1e-7 return x; } -Vector findMinimum(const QuadraticModel& M, const Vector& x0, Real ε = 1e-5) { +Vector levenbergMarquardt(const QuadraticModel& M, const Vector& x0, Real ε = 1e-5) { Vector x = x0; Real λ = 100; @@ -182,7 +182,7 @@ Vector findMinimum(const QuadraticModel& M, const Vector& x0, Real ε = 1e-5) { return x; } -Vector subagAlgorithm(const QuadraticModel& M, Rng& r, unsigned k, unsigned m) { +Vector subagAlgorithm(const QuadraticModel& M, Rng& r, unsigned k) { Vector σ = Vector::Zero(M.N); unsigned axis = r.variate<unsigned, std::uniform_int_distribution>(0, M.N - 1); σ(axis) = sqrt(M.N / k); @@ -243,10 +243,11 @@ int main(int argc, char* argv[]) { QuadraticModel leastSquares(N, M, r, σ, A, J); x = gradientDescent(leastSquares, x); std::cout << leastSquares.getHamiltonian(x) / N; - QuadraticModel leastSquares2(N, M, r, σ, A, J); - Vector σ = subagAlgorithm(leastSquares2, r, N, 15); - σ = gradientDescent(leastSquares2, σ); - std::cout << " " << leastSquares2.getHamiltonian(σ) / N << std::endl; + + leastSquares = QuadraticModel(N, M, r, σ, A, J); + x = subagAlgorithm(leastSquares, r, N); + x = gradientDescent(leastSquares, x); + std::cout << " " << leastSquares.getHamiltonian(x) / N << std::endl; } return 0; |