| 
168 | 168 |                 end  | 
169 | 169 |             end  | 
170 | 170 |         end  | 
 | 171 | + | 
 | 172 | +        @testset "solve with generic Cholesky" begin  | 
 | 173 | +            Breal = convert(Matrix{BigFloat}, randn(n,n)/2)  | 
 | 174 | +            Bimg  = convert(Matrix{BigFloat}, randn(n,n)/2)  | 
 | 175 | +            B = eltya <: Complex ? complex.(Breal, Bimg) : Breal  | 
 | 176 | +            εb = eps(abs(float(one(eltype(B)))))  | 
 | 177 | +            ε = max(εa,εb)  | 
 | 178 | + | 
 | 179 | +            for B in (B, view(B, 1:n, 1:n)) # Array and SubArray  | 
 | 180 | + | 
 | 181 | +                # Test error bound on linear solver: LAWNS 14, Theorem 2.1  | 
 | 182 | +                # This is a surprisingly loose bound  | 
 | 183 | +                cpapd = cholesky(eltya <: Complex ? apdh : apds)  | 
 | 184 | +                BB = copy(B)  | 
 | 185 | +                rdiv!(BB, cpapd)  | 
 | 186 | +                @test norm(B / apd - BB, 1) / norm(BB, 1) <= (3n^2 + n + n^3*ε)*ε/(1-(n+1)*ε)*κ  | 
 | 187 | +                @test norm(BB * apd - B, 1) / norm(B, 1) <= (3n^2 + n + n^3*ε)*ε/(1-(n+1)*ε)*κ  | 
 | 188 | +                cpapd = cholesky(eltya <: Complex ? apdhL : apdsL)  | 
 | 189 | +                BB = copy(B)  | 
 | 190 | +                rdiv!(BB, cpapd)  | 
 | 191 | +                @test norm(B / apd - BB, 1) / norm(BB, 1) <= (3n^2 + n + n^3*ε)*ε/(1-(n+1)*ε)*κ  | 
 | 192 | +                @test norm(BB * apd - B, 1) / norm(B, 1) <= (3n^2 + n + n^3*ε)*ε/(1-(n+1)*ε)*κ  | 
 | 193 | +                if eltya != BigFloat  | 
 | 194 | +                    cpapd = cholesky(eltya <: Complex ? apdh : apds, Val(true))  | 
 | 195 | +                    BB = copy(B)  | 
 | 196 | +                    rdiv!(BB, cpapd)  | 
 | 197 | +                    @test norm(B / apd - BB, 1) / norm(BB, 1) <= (3n^2 + n + n^3*ε)*ε/(1-(n+1)*ε)*κ  | 
 | 198 | +                    @test norm(BB * apd - B, 1) / norm(B, 1) <= (3n^2 + n + n^3*ε)*ε/(1-(n+1)*ε)*κ  | 
 | 199 | +                    cpapd = cholesky(eltya <: Complex ? apdhL : apdsL, Val(true))  | 
 | 200 | +                    BB = copy(B)  | 
 | 201 | +                    rdiv!(BB, cpapd)  | 
 | 202 | +                    @test norm(B / apd - BB, 1) / norm(BB, 1) <= (3n^2 + n + n^3*ε)*ε/(1-(n+1)*ε)*κ  | 
 | 203 | +                    @test norm(BB * apd - B, 1) / norm(B, 1) <= (3n^2 + n + n^3*ε)*ε/(1-(n+1)*ε)*κ  | 
 | 204 | +                end  | 
 | 205 | +            end  | 
 | 206 | +        end  | 
171 | 207 |         if eltya <: BlasFloat  | 
172 | 208 |             @testset "generic cholesky!" begin  | 
173 | 209 |                 if eltya <: Complex  | 
 | 
0 commit comments