From 77e20cf8f995f1e8fd8fd834ef353dd2adb17593 Mon Sep 17 00:00:00 2001 From: David Hong Date: Wed, 8 Apr 2020 15:47:30 -0400 Subject: [PATCH 1/2] Simplify using fact that U'U should be approximately I --- src/manifolds/Stiefel.jl | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/manifolds/Stiefel.jl b/src/manifolds/Stiefel.jl index ec3f374855..e20054c557 100644 --- a/src/manifolds/Stiefel.jl +++ b/src/manifolds/Stiefel.jl @@ -235,9 +235,7 @@ project(::Stiefel, ::Any, ::Any) function project!(M::Stiefel, q, p) s = svd(p) - e = eigen(s.U' * s.U) - qsinv = e.vectors * Diagonal(1 ./ sqrt.(e.values)) - q .= s.U * qsinv * e.vectors' * s.V' + q .= s.U * s.V' return q end From 468f78ba5ac68758993f0f42ffd2a34908cc2905 Mon Sep 17 00:00:00 2001 From: David Hong Date: Wed, 8 Apr 2020 15:50:06 -0400 Subject: [PATCH 2/2] Use mul! --- src/manifolds/Stiefel.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/manifolds/Stiefel.jl b/src/manifolds/Stiefel.jl index e20054c557..7309e44faf 100644 --- a/src/manifolds/Stiefel.jl +++ b/src/manifolds/Stiefel.jl @@ -235,7 +235,7 @@ project(::Stiefel, ::Any, ::Any) function project!(M::Stiefel, q, p) s = svd(p) - q .= s.U * s.V' + mul!(q, s.U, s.Vt) return q end