From 48832021ba6d5ca5bfdd39b6592afcf30332df82 Mon Sep 17 00:00:00 2001 From: Ronny Bergmann Date: Fri, 26 Jan 2024 15:33:10 +0100 Subject: [PATCH 1/3] fix two places where complex manifolds would yield errors due to their complex inner products. --- src/plans/conjugate_gradient_plan.jl | 6 +++--- src/solvers/quasi_Newton.jl | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/plans/conjugate_gradient_plan.jl b/src/plans/conjugate_gradient_plan.jl index 54380a5457..bdb1f0a81c 100644 --- a/src/plans/conjugate_gradient_plan.jl +++ b/src/plans/conjugate_gradient_plan.jl @@ -564,9 +564,9 @@ function (u::DirectionUpdateRuleStorage{<:PolakRibiereCoefficient})( gradienttr = vector_transport_to(M, p_old, X_old, cgs.p, u.coefficient.transport_method) ν = cgs.X - gradienttr - β = inner(M, cgs.p, cgs.X, ν) / inner(M, p_old, X_old, X_old) + β = real(inner(M, cgs.p, cgs.X, ν)) / real(inner(M, p_old, X_old, X_old)) update_storage!(u.storage, amp, cgs) - return max(0, β) + return max(zero(β), β) end function show(io::IO, u::PolakRibiereCoefficient) return print(io, "PolakRibiereCoefficient($(u.transport_method))") @@ -668,7 +668,7 @@ function (u::DirectionUpdateRuleStorage{<:ConjugateGradientBealeRestart})( num = inner(M, cgs.p, cgs.X, Xoldpk) # update storage only after that in case they share update_storage!(u.storage, amp, cgs) - return (num / denom) > u.coefficient.threshold ? zero(β) : β + return real(num / denom) > u.coefficient.threshold ? zero(β) : β end function show(io::IO, u::ConjugateGradientBealeRestart) return print( diff --git a/src/solvers/quasi_Newton.jl b/src/solvers/quasi_Newton.jl index c54b9afc4f..a723ad56c9 100644 --- a/src/solvers/quasi_Newton.jl +++ b/src/solvers/quasi_Newton.jl @@ -655,7 +655,7 @@ function update_hessian!( sk_normsq = norm(M, p, st.sk)^2 # if the decision rule is fulfilled, the new sk and yk are added - if sk_normsq != 0 && (inner(M, p, st.sk, st.yk) / sk_normsq) >= bound + if sk_normsq != 0 && real(inner(M, p, st.sk, st.yk) / sk_normsq) >= bound update_hessian!(d.update, mp, st, p_old, iter) else # the stored vectors are just transported to the new tangent space, sk and yk are not added From 0c1b6b99b3136fa32338337cbcddfbe1e55cfef0 Mon Sep 17 00:00:00 2001 From: Ronny Bergmann Date: Fri, 26 Jan 2024 15:37:21 +0100 Subject: [PATCH 2/3] Add Changelog. --- Changelog.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Changelog.md b/Changelog.md index 9436a614b3..ae8fc2a82b 100644 --- a/Changelog.md +++ b/Changelog.md @@ -5,6 +5,12 @@ All notable Changes to the Julia package `Manopt.jl` will be documented in this The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.4.50] January 26, 2024 + +### Fixed + +* Fix Quasi Newton on complex manifolds. + ## [0.4.49] January 18, 2024 ### Added From b80c9ae3773e3b4d2b765b8adea32976a08c246f Mon Sep 17 00:00:00 2001 From: Ronny Bergmann Date: Fri, 26 Jan 2024 15:43:17 +0100 Subject: [PATCH 3/3] bump version. --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 7072b2d646..13424a8dfb 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "Manopt" uuid = "0fc0a36d-df90-57f3-8f93-d78a9fc72bb5" authors = ["Ronny Bergmann "] -version = "0.4.49" +version = "0.4.50" [deps] ColorSchemes = "35d6a980-a343-548e-a6ea-1d62b119f2f4"