@@ -177,6 +177,29 @@ function \(U::UnitUpperTriangular, H::UpperHessenberg)
177
177
UpperHessenberg (HH)
178
178
end
179
179
180
+ function (\ )(H:: Union{UpperHessenberg,AdjOrTrans{<:Any,<:UpperHessenberg}} , B:: AbstractVecOrMat )
181
+ TFB = typeof (oneunit (eltype (H)) \ oneunit (eltype (B)))
182
+ return ldiv! (H, copy_similar (B, TFB))
183
+ end
184
+
185
+ function (/ )(B:: AbstractMatrix , H:: Union{UpperHessenberg,AdjOrTrans{<:Any,<:UpperHessenberg}} )
186
+ TFB = typeof (oneunit (eltype (B)) / oneunit (eltype (H)))
187
+ return rdiv! (copy_similar (B, TFB), H)
188
+ end
189
+
190
+ ldiv! (H:: AdjOrTrans{<:Any,<:UpperHessenberg} , B:: AbstractVecOrMat ) =
191
+ (rdiv! (wrapperop (H)(B), parent (H)); B)
192
+ rdiv! (B:: AbstractVecOrMat , H:: AdjOrTrans{<:Any,<:UpperHessenberg} ) =
193
+ (ldiv! (parent (H), wrapperop (H)(B)); B)
194
+
195
+ # fix method ambiguities for right division, from adjtrans.jl:
196
+ / (u:: AdjointAbsVec , A:: UpperHessenberg ) = adjoint (adjoint (A) \ u. parent)
197
+ / (u:: TransposeAbsVec , A:: UpperHessenberg ) = transpose (transpose (A) \ u. parent)
198
+ / (u:: AdjointAbsVec , A:: Adjoint{<:Any,<:UpperHessenberg} ) = adjoint (adjoint (A) \ u. parent)
199
+ / (u:: TransposeAbsVec , A:: Transpose{<:Any,<:UpperHessenberg} ) = transpose (transpose (A) \ u. parent)
200
+ / (u:: AdjointAbsVec , A:: Transpose{<:Any,<:UpperHessenberg} ) = adjoint (conj (A. parent) \ u. parent) # technically should be adjoint(copy(adjoint(copy(A))) \ u.parent)
201
+ / (u:: TransposeAbsVec , A:: Adjoint{<:Any,<:UpperHessenberg} ) = transpose (conj (A. parent) \ u. parent)
202
+
180
203
# Solving (H+µI)x = b: we can do this in O(m²) time and O(m) memory
181
204
# (in-place in x) by the RQ algorithm from:
182
205
#
0 commit comments