tl; dr Matris için mutlaka doğru koşul numarası değil bir koşul numarası bildirdiler , çünkü bir fark var.
Bu, matrise ve sağ taraftaki vektöre özeldir. İçin belgelere*getrs
bakarsanız, ileri hatanın
Burada normal durum numarası değil,
(Burada norm içinde bunlar bileşen bazında mutlak değerlerdir.) Bkz. Örneğin, doğrusal sistemler için yinelemeli iyileştirme ve Higham tarafından LAPACK veya Higham'ın Sayısal Algoritmaların Doğruluğu ve Kararlılığı (7.2).
∥x−x0∥∞∥x∥∞≲cond(A,x)u≤cond(A)u.
cond(A,x)κ∞(A)cond(A,x)=∥|A−1||A||x|∥∞∥x∥∞,cond(A)=∥|A−1||A|∥.
Örneğin, ile benzer bir problem için psödospektral diferansiyel operatör aldım ve aslındave , ben bilgisayarlı ve , bunların hepsi sağ taraf için olur gözlemi açıklamak için yeterlidir, ne büyüklüklerinin siparişler kabaca eşleşecek çünkü Tablo 3.1'de görülmektedir (3-4 emir daha iyi hatalar). Aynı şeyi sadece rastgele koşullu bir matris için denediğimde işe yaramıyor, bu yüzden bir özelliği olmalı .n=128∥|A−1||A|∥κ∞(A)7×1032.6×107A
İki koşul sayısının eşleşmediği, Kaham nedeniyle Higham'dan (7.17, s.124) aldığım açık bir örnek
Bulduğum bir başka örnek , rastgele ile sadece düz Vandermonde matrisidir . Ben geçtim ve diğer bazı koşulsuz matrisler ve gibi bu tür bir sonuç üretir .
⎛⎝⎜2−11−1ϵϵ1ϵϵ⎞⎠⎟,⎛⎝⎜2+2ϵ−ϵϵ⎞⎠⎟.
[1:10]
bMatrixDepot.jl
triw
moler
Esasen, düzensizliklerle ilgili lineer sistemlerin çözülmesinin kararlılığını analiz ettiğinizde, ilk önce hangi pertürbasyonları düşündüğünüzü belirtmeniz gerektiğidir . LAPACK ile lineer sistemleri çözerken, bu hataya bağlı bileşen bazlı pertürbasyonları dikkate alır , ancak . Yani bu normal, Hem de normwise düzensizlikler gördüğü ve .Abκ(A)=∥A−1∥∥A∥Ab
Ayrımı yapmazsanız ne olacağını da (karşı örnek olarak) düşünün . matrisler için çift hassasiyetli yinelemeli iyileştirme kullanarak (yukarıdaki bağlantıya bakın) mümkün olan en iyi ileri bağıl hatasını alabileceğimizi biliyoruz . Dolayısıyla, doğrusal sistemlerin daha iyi bir doğrulukla çözülemeyeceği fikrini düşünürsek, rafinaj çözümleri nasıl çalışır?O(u)κ(A)≪1/uκ(A)u
PS O bu konularda ?getrs
bilgisayarlı çözüm gerçek çözümdür diyor (A + E)x = b
bir pertürbasyon ile yılında , fakat hiçbir pertürbasyon . Tedirginlikler izin olsaydı şeyler farklı olurdu .EAbb
Düzenle Bu çalışmayı daha doğrudan, kod halinde, bunun bir şans ya da şans meselesi olmadığını göstermek yerine, iki koşul numarasının bazı olağandışı matrisler için çok farklı olmasının (olağandışı) sonucu, yani
cond(A,x)≈cond(A)≪κ(A).
function main2(m=128)
A = matrixdepot("chebspec", m)^2
A[1,:] = A[end,:] = 0
A[1,1] = A[end,end] = 1
best, worst = Inf, -Inf
for k=1:2^5
b = randn(m)
x = A \ b
x_exact = Float64.(big.(A) \ big.(b))
err = norm(x - x_exact, Inf) / norm(x_exact, Inf)
best, worst = min(best, err), max(worst, err)
end
@printf "Best relative error: %.3e\n" best
@printf "Worst relative error: %.3e\n" worst
@printf "Predicted error κ(A)*ε: %.3e\n" cond(A, Inf)*eps()
@printf "Predicted error cond(A)*ε: %.3e\n" norm(abs.(inv(A))*abs.(A), Inf)*eps()
end
julia> main2()
Best relative error: 2.156e-14
Worst relative error: 2.414e-12
Predicted error κ(A)*ε: 8.780e-09
Predicted error cond(A)*ε: 2.482e-12
Düzenle 2 Burada, farklı koşul sayılarının beklenmedik şekilde çok farklı olduğu aynı fenomenin başka bir örneği. Bu kez
Burada 10 x 10 Vandermonde matrisidir ve ne zaman , rasgele seçilir ninkinden gözle görülür biçimde daha küçüktür ve en kötü durumda ile verilir bazıları için .
cond(A,x)≪cond(A)≈κ(A).
A1:10xcond(A,x)κ(A)xxi=iaa
function main4(m=10)
A = matrixdepot("vand", m)
lu = lufact(A)
lu_big = lufact(big.(A))
AA = abs.(inv(A))*abs.(A)
for k=1:12
# b = randn(m) # good case
b = (1:m).^(k-1) # worst case
x, x_exact = lu \ b, lu_big \ big.(b)
err = norm(x - x_exact, Inf) / norm(x_exact, Inf)
predicted = norm(AA*abs.(x), Inf)/norm(x, Inf)*eps()
@printf "relative error[%2d] = %.3e (predicted cond(A,x)*ε = %.3e)\n" k err predicted
end
@printf "predicted κ(A)*ε = %.3e\n" cond(A)*eps()
@printf "predicted cond(A)*ε = %.3e\n" norm(AA, Inf)*eps()
end
Ortalama vaka (neredeyse 9 büyüklük sırası daha iyi hata):
julia> T.main4()
relative error[1] = 6.690e-11 (predicted cond(A,x)*ε = 2.213e-10)
relative error[2] = 6.202e-11 (predicted cond(A,x)*ε = 2.081e-10)
relative error[3] = 2.975e-11 (predicted cond(A,x)*ε = 1.113e-10)
relative error[4] = 1.245e-11 (predicted cond(A,x)*ε = 6.126e-11)
relative error[5] = 4.820e-12 (predicted cond(A,x)*ε = 3.489e-11)
relative error[6] = 1.537e-12 (predicted cond(A,x)*ε = 1.729e-11)
relative error[7] = 4.885e-13 (predicted cond(A,x)*ε = 8.696e-12)
relative error[8] = 1.565e-13 (predicted cond(A,x)*ε = 4.446e-12)
predicted κ(A)*ε = 4.677e-04
predicted cond(A)*ε = 1.483e-05
En kötü durum ( ):a=1,…,12
julia> T.main4()
relative error[ 1] = 0.000e+00 (predicted cond(A,x)*ε = 6.608e-13)
relative error[ 2] = 1.265e-13 (predicted cond(A,x)*ε = 3.382e-12)
relative error[ 3] = 5.647e-13 (predicted cond(A,x)*ε = 1.887e-11)
relative error[ 4] = 8.895e-74 (predicted cond(A,x)*ε = 1.127e-10)
relative error[ 5] = 4.199e-10 (predicted cond(A,x)*ε = 7.111e-10)
relative error[ 6] = 7.815e-10 (predicted cond(A,x)*ε = 4.703e-09)
relative error[ 7] = 8.358e-09 (predicted cond(A,x)*ε = 3.239e-08)
relative error[ 8] = 1.174e-07 (predicted cond(A,x)*ε = 2.310e-07)
relative error[ 9] = 3.083e-06 (predicted cond(A,x)*ε = 1.700e-06)
relative error[10] = 1.287e-05 (predicted cond(A,x)*ε = 1.286e-05)
relative error[11] = 3.760e-10 (predicted cond(A,x)*ε = 1.580e-09)
relative error[12] = 3.903e-10 (predicted cond(A,x)*ε = 1.406e-09)
predicted κ(A)*ε = 4.677e-04
predicted cond(A)*ε = 1.483e-05
Düzenleme 3 Başka bir örnek, biçimindeki herhangi bir boyutta bozuk Jordan bloğu olan Forsythe matrisidir
Bunun , olduğu için , ancak , yani . El ile doğrulanabileceği gibi, gibi doğrusal denklem sistemlerinin pivot ile , potansiyel olarak sınırlanmamış rağmen son derece doğrudur . Dolayısıyla bu matris de beklenmedik şekilde kesin çözümler üretecektir.
A=⎛⎝⎜⎜⎜000ϵ100001000010⎞⎠⎟⎟⎟.
∥A∥=1∥A−1∥=ϵ−1κ∞(A)=ϵ−1|A−1|=A−1=|A|−1cond(A)=1Ax=bκ∞(A)
Düzenle 4 Kahan matrisi de buna benzer, :cond(A)≪κ(A)
A = matrixdepot("kahan", 48)
κ, c = cond(A, Inf), norm(abs.(inv(A))*abs.(A), Inf)
@printf "κ=%.3e c=%.3e ratio=%g\n" κ c (c/κ)
κ=8.504e+08 c=4.099e+06 ratio=0.00482027