88
88
copy (J:: UniformScaling ) = UniformScaling (J. λ)
89
89
90
90
conj (J:: UniformScaling ) = UniformScaling (conj (J. λ))
91
+ real (J:: UniformScaling ) = UniformScaling (real (J. λ))
92
+ imag (J:: UniformScaling ) = UniformScaling (imag (J. λ))
91
93
92
94
transpose (J:: UniformScaling ) = J
93
95
adjoint (J:: UniformScaling ) = UniformScaling (conj (J. λ))
@@ -106,11 +108,15 @@ issymmetric(::UniformScaling) = true
106
108
ishermitian (J:: UniformScaling ) = isreal (J. λ)
107
109
isposdef (J:: UniformScaling ) = isposdef (J. λ)
108
110
111
+ isposdef (J:: UniformScaling ) = isposdef (J. λ)
112
+
109
113
(+ )(J:: UniformScaling , x:: Number ) = J. λ + x
110
114
(+ )(x:: Number , J:: UniformScaling ) = x + J. λ
111
115
(- )(J:: UniformScaling , x:: Number ) = J. λ - x
112
116
(- )(x:: Number , J:: UniformScaling ) = x - J. λ
113
117
118
+ (^ )(J:: UniformScaling , x:: Number ) = UniformScaling (J. λ ^ x)
119
+
114
120
(+ )(J1:: UniformScaling , J2:: UniformScaling ) = UniformScaling (J1. λ+ J2. λ)
115
121
(+ )(B:: BitArray{2} , J:: UniformScaling ) = Array (B) + J
116
122
(+ )(J:: UniformScaling , B:: BitArray{2} ) = J + Array (B)
@@ -122,6 +128,21 @@ isposdef(J::UniformScaling) = isposdef(J.λ)
122
128
(- )(J:: UniformScaling , B:: BitArray{2} ) = J - Array (B)
123
129
(- )(A:: AbstractMatrix , J:: UniformScaling ) = A + (- J)
124
130
131
+ # matrix functions
132
+ for f in ( :exp , :log ,
133
+ :expm1 , :log1p ,
134
+ :sqrt , :cbrt ,
135
+ :sin , :cos , :tan ,
136
+ :asin , :acos , :atan ,
137
+ :csc , :sec , :cot ,
138
+ :acsc , :asec , :acot ,
139
+ :sinh , :cosh , :tanh ,
140
+ :asinh , :acosh , :atanh ,
141
+ :csch , :sech , :coth ,
142
+ :acsch , :asech , :acoth )
143
+ @eval Base.$ f (J:: UniformScaling ) = UniformScaling ($ f (J. λ))
144
+ end
145
+
125
146
# Unit{Lower/Upper}Triangular matrices become {Lower/Upper}Triangular under
126
147
# addition with a UniformScaling
127
148
for (t1, t2) in ((:UnitUpperTriangular , :UpperTriangular ),
181
202
inv (J:: UniformScaling ) = UniformScaling (inv (J. λ))
182
203
opnorm (J:: UniformScaling , p:: Real = 2 ) = opnorm (J. λ, p)
183
204
205
+ pinv (J:: UniformScaling ) = ifelse (iszero (J. λ),
206
+ UniformScaling (zero (inv (J. λ))), # type stability
207
+ UniformScaling (inv (J. λ)))
208
+
184
209
function det (J:: UniformScaling{T} ) where T
185
210
if isone (J. λ)
186
211
one (T)
@@ -191,23 +216,31 @@ function det(J::UniformScaling{T}) where T
191
216
end
192
217
end
193
218
219
+ function tr (J:: UniformScaling{T} ) where T
220
+ if iszero (J. λ)
221
+ zero (T)
222
+ else
223
+ throw (ArgumentError (" Trace of UniformScaling is only well-defined when λ = 0" ))
224
+ end
225
+ end
226
+
194
227
* (J1:: UniformScaling , J2:: UniformScaling ) = UniformScaling (J1. λ* J2. λ)
195
228
* (B:: BitArray{2} , J:: UniformScaling ) = * (Array (B), J:: UniformScaling )
196
229
* (J:: UniformScaling , B:: BitArray{2} ) = * (J:: UniformScaling , Array (B))
197
230
* (A:: AbstractMatrix , J:: UniformScaling ) = A* J. λ
231
+ * (v:: AbstractVector , J:: UniformScaling ) = reshape (v, length (v), 1 ) * J
198
232
* (J:: UniformScaling , A:: AbstractVecOrMat ) = J. λ* A
199
233
* (x:: Number , J:: UniformScaling ) = UniformScaling (x* J. λ)
200
234
* (J:: UniformScaling , x:: Number ) = UniformScaling (J. λ* x)
201
235
202
236
/ (J1:: UniformScaling , J2:: UniformScaling ) = J2. λ == 0 ? throw (SingularException (1 )) : UniformScaling (J1. λ/ J2. λ)
203
237
/ (J:: UniformScaling , A:: AbstractMatrix ) = lmul! (J. λ, inv (A))
204
238
/ (A:: AbstractMatrix , J:: UniformScaling ) = J. λ == 0 ? throw (SingularException (1 )) : A/ J. λ
239
+ / (v:: AbstractVector , J:: UniformScaling ) = reshape (v, length (v), 1 ) / J
205
240
206
241
/ (J:: UniformScaling , x:: Number ) = UniformScaling (J. λ/ x)
207
242
208
243
\ (J1:: UniformScaling , J2:: UniformScaling ) = J1. λ == 0 ? throw (SingularException (1 )) : UniformScaling (J1. λ\ J2. λ)
209
- \ (A:: Union{Bidiagonal{T},AbstractTriangular{T}} , J:: UniformScaling ) where {T<: Number } =
210
- rmul! (inv (A), J. λ)
211
244
\ (J:: UniformScaling , A:: AbstractVecOrMat ) = J. λ == 0 ? throw (SingularException (1 )) : J. λ\ A
212
245
\ (A:: AbstractMatrix , J:: UniformScaling ) = rmul! (inv (A), J. λ)
213
246
\ (F:: Factorization , J:: UniformScaling ) = F \ J (size (F,1 ))
@@ -229,6 +262,10 @@ Broadcast.broadcasted(::typeof(*), J::UniformScaling,x::Number) = UniformScaling
229
262
230
263
Broadcast. broadcasted (:: typeof (/ ), J:: UniformScaling ,x:: Number ) = UniformScaling (J. λ/ x)
231
264
265
+ Broadcast. broadcasted (:: typeof (\ ), x:: Number ,J:: UniformScaling ) = UniformScaling (x\ J. λ)
266
+
267
+ Broadcast. broadcasted (:: typeof (^ ), J:: UniformScaling ,x:: Number ) = UniformScaling (J. λ^ x)
268
+
232
269
(^ )(J:: UniformScaling , x:: Number ) = UniformScaling ((J. λ)^ x)
233
270
Base. literal_pow (:: typeof (^ ), J:: UniformScaling , x:: Val ) = UniformScaling (Base. literal_pow (^ , J. λ, x))
234
271
0 commit comments