tl; dr उन्होंने एक स्थिति संख्या की सूचना दी , जरूरी नहीं कि मैट्रिक्स के लिए सही स्थिति संख्या हो, क्योंकि एक अंतर है।
यह मैट्रिक्स और दाहिने हाथ की ओर वेक्टर के लिए विशिष्ट है। यदि आप दस्तावेज़ को देखते हैं*getrs
, तो यह कहता है कि आगे की त्रुटि बाउंड
यहाँ सामान्य स्थिति संख्या , बल्कि
(यहां आदर्श के अंदर ये घटक-पूर्ण निरपेक्ष मूल्य हैं।) उदाहरण के लिए, रैखिक प्रणालियों के लिए Iterative शोधन और Higham द्वारा LAPACK , या Higham की सटीकता और संख्यात्मक एल्गोरिदम की स्थिरता (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|∥.
आपके उदाहरण के लिए, मैंने साथ समान समस्या के लिए एक pseudospectral अंतर ऑपरेटर लिया , और वास्तव में बीच एक बड़ा अंतर हैऔर , मैंने और गणना की , जो अवलोकन को समझाने के लिए पर्याप्त है कि यह सभी दाहिने हाथों के पक्षों के लिए होता है, क्योंकि परिमाण के आदेश मोटे तौर पर मेल खाते हैं तालिका 3.1 में देखा गया (3-4 आदेश बेहतर त्रुटियां हैं)। यह तब काम नहीं करता है जब मैं सिर्फ एक यादृच्छिक रूप से बीमार मैट्रिक्स के लिए ही प्रयास करता हूं, इसलिए इसे संपत्ति होना चाहिए ।n=128∥|A−1||A|∥κ∞(A)7×1032.6×107A
एक स्पष्ट उदाहरण जिसके लिए दो शर्त संख्याओं का मिलान नहीं होता है, जिसे मैंने हिघम (7.17, पी .24) से लिया है, काहन के कारण
एक और उदाहरण मैंने पाया कि यादृच्छिक साथ सिर्फ सादे वैंडमोंडे मैट्रिक्स है । मैं गुजर गया और कुछ अन्य बीमार हालत वाले मेट्रिसेस भी इस तरह के परिणाम का उत्पादन करते हैं, जैसे और ।
⎛⎝⎜2−11−1ϵϵ1ϵϵ⎞⎠⎟,⎛⎝⎜2+2ϵ−ϵϵ⎞⎠⎟.
[1:10]
bMatrixDepot.jl
triw
moler
अनिवार्य रूप से, क्या चल रहा है कि जब आप लंबवत प्रणाली को सुलझाने के संबंध में रैखिक प्रणालियों को हल करने की स्थिरता का विश्लेषण करते हैं, तो आपको सबसे पहले यह निर्दिष्ट करना होगा कि आप किन गड़बड़ियों पर विचार कर रहे हैं। LAPACK के साथ रैखिक प्रणालियों को हल करते समय, यह त्रुटि बाउंड में घटक-वार गड़बड़ी पर विचार करता है , लेकिन में कोई गड़बड़ी नहीं है । तो यह सामान्य से अलग है।, जो और दोनों में आदर्शवादिता संबंधी गड़बड़ियों पर विचार करता है ।Abκ(A)=∥A−1∥∥A∥Ab
गौर करें (एक प्रतिपक्ष के रूप में) भी अगर आप भेद नहीं करते हैं तो क्या होगा । हम जानते हैं कि दोहरी सटीकता के साथ पुनरावृत्ति शोधन (ऊपर लिंक देखें) का उपयोग करके हम उन मैट्रिस के लिए का सबसे अच्छा संभव रिश्तेदार त्रुटि प्राप्त कर सकते हैं जिसमें । इसलिए यदि हम इस विचार पर विचार करते हैं कि रैखिक प्रणालियों को सटीकता से हल नहीं किया जा सकता है तो , कैसे परिष्कृत समाधान संभवतः काम करेंगे?O(u)κ(A)≪1/uκ(A)u
पुनश्च यह मायने रखता है कि ?getrs
गणना वाला समाधान में (A + E)x = b
गड़बड़ी के साथ सही समाधान है , लेकिन में कोई गड़बड़ी नहीं है । यदि में गड़बड़ी की अनुमति दी जाती है तो चीजें अलग होंगी ।EAbb
संपादित इस अधिक प्रत्यक्ष रूप से कार्य, कोड में दिखाने के लिए, कि यह एक अस्थायी या किस्मत की बात है, बल्कि (असामान्य) दो शर्त संख्या कुछ विशिष्ट मैट्रिक्स के लिए बहुत अलग होने का परिणाम है, यानी, नहीं है
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
संपादित करें 2 यहां एक ही घटना का एक और उदाहरण है जहां विभिन्न स्थितियों की संख्या अप्रत्याशित रूप से बहुत भिन्न होती है। इस बार,
यहाँ पर 10 × 10 मैट्रिक्स Vandermonde है है, और जब , बेतरतीब ढंग से चुना जाता है की तुलना में छोटा होता है noticably , और सबसे ज्यादा मामले द्वारा दिया जाता है कुछ के लिए ।
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
औसत मामला (परिमाण के लगभग 9 आदेश बेहतर त्रुटि):
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
सबसे खराब स्थिति ( ):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
संपादित करें 3 एक और उदाहरण फोर्सिथे मैट्रिक्स है, जो कि फॉर्म के किसी भी आकार का जॉर्डन ब्लॉक है
यह , , इसलिए , लेकिन , तो । और जैसा कि हाथ से सत्यापित किया जा सकता है, धुरी के साथ साथ साथ रेखीय समीकरणों को हल करना बेहद सटीक है, संभावित रूप से बावजूद । तो यह मैट्रिक्स भी अप्रत्याशित रूप से सटीक समाधान निकलेगा।
A=⎛⎝⎜⎜⎜000ϵ100001000010⎞⎠⎟⎟⎟.
∥A∥=1∥A−1∥=ϵ−1κ∞(A)=ϵ−1|A−1|=A−1=|A|−1ए एक्स = ख κ ∞ ( एक )cond(A)=1Ax=bκ∞(A)
संपादित करें 4 कहन मैट्रीज़ भी इस तरह से हैं, जिसमें :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