4.2 Conditioning of linear equations#
In the lecture we learned that the some linear equations are ill-conditioned or not uniquely solvable. Ill-conditioned means that small changes in the right hand side vector \(b\) can lead to large changes in the solution vector \(x\). We can check the determinant of the matrix \(A\) to see if the linear equation is ill-conditioned. If the determinant is zero the matrix is singular and the linear equation is not uniquely solvable. Let’s check the determinant of the matrix \(A\):
import Pkg
Pkg.instantiate()
using LinearAlgebra
A = [1 2 3; 4 5 6; 7 8 10]
det(A)
-3.000000000000001
A_ill = [1 10^-16; 2 10^-16]
det(A_ill)
-1.0e-16
b = [1, 2]
x = A_ill\b
2-element Vector{Float64}:
1.0
0.0
A_singular = [2 3 2; 3 4 2; 4 6 4]
det(A_singular)
0.0
inv(A_singular)
SingularException(3)
Stacktrace:
[1] checknonsingular
@ /Applications/Julia-1.9.app/Contents/Resources/julia/share/julia/stdlib/v1.9/LinearAlgebra/src/factorization.jl:19 [inlined]
[2] checknonsingular
@ /Applications/Julia-1.9.app/Contents/Resources/julia/share/julia/stdlib/v1.9/LinearAlgebra/src/factorization.jl:22 [inlined]
[3] #lu!#170
@ /Applications/Julia-1.9.app/Contents/Resources/julia/share/julia/stdlib/v1.9/LinearAlgebra/src/lu.jl:82 [inlined]
[4] lu!
@ /Applications/Julia-1.9.app/Contents/Resources/julia/share/julia/stdlib/v1.9/LinearAlgebra/src/lu.jl:80 [inlined]
[5] #lu#176
@ /Applications/Julia-1.9.app/Contents/Resources/julia/share/julia/stdlib/v1.9/LinearAlgebra/src/lu.jl:299 [inlined]
[6] lu (repeats 2 times)
@ /Applications/Julia-1.9.app/Contents/Resources/julia/share/julia/stdlib/v1.9/LinearAlgebra/src/lu.jl:298 [inlined]
[7] inv(A::Matrix{Int64})
@ LinearAlgebra /Applications/Julia-1.9.app/Contents/Resources/julia/share/julia/stdlib/v1.9/LinearAlgebra/src/dense.jl:917
[8] top-level scope
@ In[6]:1
b = [1, 2, 3]
x = A_singular\b
SingularException(3)
Stacktrace:
[1] checknonsingular
@ /Applications/Julia-1.9.app/Contents/Resources/julia/share/julia/stdlib/v1.9/LinearAlgebra/src/factorization.jl:19 [inlined]
[2] checknonsingular
@ /Applications/Julia-1.9.app/Contents/Resources/julia/share/julia/stdlib/v1.9/LinearAlgebra/src/factorization.jl:22 [inlined]
[3] #lu!#170
@ /Applications/Julia-1.9.app/Contents/Resources/julia/share/julia/stdlib/v1.9/LinearAlgebra/src/lu.jl:82 [inlined]
[4] lu!
@ /Applications/Julia-1.9.app/Contents/Resources/julia/share/julia/stdlib/v1.9/LinearAlgebra/src/lu.jl:80 [inlined]
[5] lu(A::Matrix{Int64}, pivot::RowMaximum; check::Bool)
@ LinearAlgebra /Applications/Julia-1.9.app/Contents/Resources/julia/share/julia/stdlib/v1.9/LinearAlgebra/src/lu.jl:299
[6] lu (repeats 2 times)
@ /Applications/Julia-1.9.app/Contents/Resources/julia/share/julia/stdlib/v1.9/LinearAlgebra/src/lu.jl:298 [inlined]
[7] \(A::Matrix{Int64}, B::Vector{Int64})
@ LinearAlgebra /Applications/Julia-1.9.app/Contents/Resources/julia/share/julia/stdlib/v1.9/LinearAlgebra/src/generic.jl:1115
[8] top-level scope
@ ~/Library/Mobile Documents/com~apple~CloudDocs/Projects/numerical_methods/04-LinearEquations/Conditioning.ipynb:2