@@ -95,7 +95,7 @@ isstructured(::Diagonal) = true
9595""" 
9696    has_sparsestruct(x::AbstractArray) 
9797
98- determine  whether `findstructralnz` accepts the parameter `x`
98+ Determine  whether `findstructralnz` accepts the parameter `x`
9999""" 
100100has_sparsestruct (x) =  false 
101101has_sparsestruct (x:: AbstractArray ) =  has_sparsestruct (typeof (x))
@@ -106,6 +106,24 @@ has_sparsestruct(x::Type{<:Bidiagonal}) = true
106106has_sparsestruct (x:: Type{<:Tridiagonal} ) =  true 
107107has_sparsestruct (x:: Type{<:SymTridiagonal} ) =  true 
108108
109+ """ 
110+     issingular(A::AbstractMatrix) 
111+ 
112+ Determine whether a given abstract matrix is singular. 
113+ """ 
114+ issingular (A:: AbstractMatrix ) =  issingular (Matrix (A))
115+ issingular (A:: AbstractSparseMatrix ) =  ! issuccess (lu (A, check= false ))
116+ issingular (A:: Matrix ) =  ! issuccess (lu (A, check= false ))
117+ issingular (A:: UniformScaling ) =  A. λ ==  0 
118+ issingular (A:: Diagonal ) =  any (iszero,A. diag)
119+ issingular (B:: Bidiagonal ) =  any (iszero, A. dv)
120+ issingular (S:: SymTridiagonal ) =  diaganyzero (iszero, ldlt (S). data)
121+ issingular (T:: Tridiagonal ) =  ! issuccess (lu (A, check= false ))
122+ issingular (A:: Union{Hermitian,Symmetric} ) =  diaganyzero (bunchkaufman (A, check= false ). LD)
123+ issingular (A:: Union{LowerTriangular,UpperTriangular} ) =  diaganyzero (A. data)
124+ issingular (A:: Union{UnitLowerTriangular,UnitUpperTriangular} ) =  false 
125+ diaganyzero (A) =  any (iszero, view (A, diagind (A)))
126+ 
109127""" 
110128    findstructralnz(x::AbstractArray) 
111129
0 commit comments