From 6f4c074c838f98a634823b9cd7cfe94d12e6a807 Mon Sep 17 00:00:00 2001 From: Ronny Bergmann Date: Fri, 26 Jan 2024 15:33:10 +0100 Subject: [PATCH] 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