A practical, reliable step to test singularity
Introduction
When you suspect a square matrix C is singular, that means you believe it does not have an inverse — equivalently, its columns (or rows) are linearly dependent. A quick check like computing the determinant is tempting, but in practice there are more robust numerical methods. The goal is to choose a test that gives a clear yes/no answer and that is stable for floating-point data.

The single best step to confirm singularity in practice is: compute the numerical rank of C (for example via singular value decomposition, SVD) and compare it to the matrix size. Concretely, do an SVD:
C=UΣV⊤C = U \Sigma V^\topC=UΣV⊤, where Σ\SigmaΣ is diagonal with singular values σ1≥σ2≥⋯≥σn≥0\sigma_1 \ge \sigma_2 \ge \dots \ge \sigma_n \ge 0σ1≥σ2≥⋯≥σn≥0. Count how many singular values are effectively nonzero (above a tolerance). If that count — the numerical rank — is less than nnn (for an n×nn\times nn×n matrix), then C is singular (or numerically rank-deficient).
Why SVD/rank is preferred:
- Robustness: Determinant can be tiny yet nonzero due to rounding; it’s unreliable for near-singular matrices.
- Interpretability: Singular values tell you how close the matrix is to singularity — a singular matrix has at least one singular value equal to zero.
- Numerical stability: SVD is numerically stable and handles ill-conditioned matrices better than direct determinant evaluation or naive Gaussian elimination.

Practical procedure (step-by-step)
- Compute the singular values {σi}\{\sigma_i\}{σi} of C using a standard linear algebra library (e.g., NumPy, MATLAB, LAPACK).
- Choose a tolerance ε\varepsilonε. A common choice is ε=max(n,m)⋅σmax⋅machine_epsilon\varepsilon = \text{max}(n, m)\cdot \sigma_{\max} \cdot \text{machine\_epsilon}ε=max(n,m)⋅σmax⋅machine_epsilon. For square n×nn\times nn×n matrices, tol=n⋅σ1⋅eps\text{tol} = n \cdot \sigma_1 \cdot \text{eps}tol=n⋅σ1⋅eps works well.
- Count singular values σi\sigma_iσi with σi>ε\sigma_i > \varepsilonσi>ε. This is the numerical rank rrr.
- If r<nr < nr<n, conclude C is singular (rank deficient). If r=nr = nr=n, C is full rank and invertible (within numerical tolerance).
Optional complementary checks:
For exact symbolic matrices (integers, rationals) you can compute the determinant symbolically; determinant exactly zero implies singularity. But symbolic methods are expensive for large matrices.
Compute the condition number κ(C)=σ1/σn\kappa(C) = \sigma_1 / \sigma_nκ(C)=σ1/σn. A very large κ\kappaκ indicates near-singularity even if σn\sigma_nσn is not exactly zero.

Conclusion
To confirm whether C is singular, compute its numerical rank via SVD and compare it to the matrix size. This method is both decisive and numerically reliable: a missing nonzero singular value (or numerical rank <n< n<n) means C is singular. Supplement this with the condition number to judge how “close” the matrix is to singular, and use exact (symbolic) determinant checks only when exact arithmetic is feasible.